# springboot_template **Repository Path**: keepgoingxjw/springboot_template ## Basic Information - **Project Name**: springboot_template - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #模板项目 ## BeanUtils ### 实现两个拷贝属性值方法 - copyProperties - copyPropertiesASM > 模仿Spring中的 BeanUtils.copyProperties(source,target),并进行了改进 。可以忽略大小写和_。推荐使用 copyPropertiesASM方法 速度快,不仅可以忽略大小写和_,而且不同类型可以相互赋值。 ### getSingleClass(Class clazz) 根据 class 得到创建的类这个类是单例,这样就把class创建类缓存起来了 ## 集成swagger获取API swagger-ui.html ## BaseController 所有的 Controller 继承 BaseController。BaseController中存放公共的引入。 ## GlobalExceptionHandler 通用 Api Controller 全局异常处理 ## HttpAspect 采用 aspect 统一的 http 日志处理 ## shiro [博客](https://my.oschina.net/u/3350266/blog/2209610) >Controller中的所有需要验证的方法,必须带 .action ```xml org.apache.shiro shiro-spring 1.4.0 ``` - ShiroRealm类定义 登录认证;角色和权限 - ShiroConfig ## ThreadManager 全局的线程池管理类。 ## Mybatis-Plus [学习地址](http://mp.baomidou.com/#/quick-start?id=%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B%E4%BC%A0%E7%BB%9F) ### 配置 第一部分在 application.yml 中 第二部分在 MybatisPlusConfig 中 ### 通用的CRUD(只针对单表) #### 表名注解 @TableName > value 表名( 默认空 ), resultMap xml 字段映射 resultMap ID #### 主键注解 @TableId > value 字段值(驼峰命名方式,该值可无) , type主键 ID 策略类型 ```text @TableId(type = IdType.INPUT) AUTO(0, "数据库ID自增"), INPUT(1, "用户输入ID"), ID_WORKER(2, "全局唯一ID"), //(默认配置) UUID(3, "全局唯一ID"), NONE(4, "该类型为未设置主键类型"), ID_WORKER_STR(5, "字符串全局唯一ID"); ``` 主键添加type注解之后,数据库不设置自增主键,也不用显示的设置主键。如果不配置则默认使用 ID_WORKER #### 字段注解 @TableField > fill 字段填充标记 ( FieldFill, 配合自动填充使用 ) ```text FieldFill 中有4个选项如下 DEFAULT 默认不处理 INSERT 插入填充字段 UPDATE 更新填充字段 INSERT_UPDATE 插入和更新填充字段 // fill注释会在 insert update的时候自动地更新这个值 @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime = LocalDateTime.now(); ``` #### 乐观锁标记注解 @Version ### 条件构造器 >示例 ```java @Test public void selectUserPage() { Page page = new Page<>(1,10); IPage find = userService.selectUserPage(page, new QueryWrapper().lambda().like(User::getName,"2") .between(User::getUpdateTime, LocalDateTime.of(2018,8,21,0,0,0), LocalDateTime.of(2018,8,21,23,59,59))); System.out.println(JSON.toJSONString(find)); } @Test public void updateWrapperTest() { User user = new User(); user.setUsercode("update"); userService.update(user,new UpdateWrapper().lambda().eq(User::getName,"2")); } ``` |查询方式 | 说明 | | ------------- |:-------------:| |setSqlSelect|设置 SELECT 查询字段| |where| WHERE 语句,拼接 + WHERE 条件| |and|AND 语句,拼接 + AND 字段=值| |andNew| AND 语句,拼接 + AND (字段=值)| |or |OR 语句,拼接 + OR 字段=值| |orNew|OR 语句,拼接 + OR (字段=值)| |eq|等于=| |allEq|基于 map 内容等于=| |ne|不等于<>| |gt|大于>| |ge|大于等于>=| |lt|小于<| |le|小于等于<=| |like|模糊查询 LIKE| |notLike|模糊查询 NOT LIKE| |in|IN 查询| |notIn|NOT IN 查询| |isNull|NULL 值查询| |isNotNull|IS NOT NULL| |groupBy|分组 GROUP BY| |having|HAVING 关键词| |orderBy|排序 ORDER BY| |orderAsc|ASC 排序 ORDER BY| |orderDesc|DESC 排序 ORDER BY| |exists|EXISTS 条件语句| |notExists|NOT EXISTS 条件语句| |between|BETWEEN 条件语句| |notBetween|NOT BETWEEN 条件语句| |addFilter|自由拼接 SQL| |last|拼接在最后,例如:last("LIMIT 1")| ### 分页 >UserMapper.class 中编写方法 ```java List selectUserPage(Page page, @Param("ew")Wrapper wrapper); ``` >UserMapper.xml 中编写 ```xml ``` >UserServiceImp.class 编写 ```java @Override public IPage selectUserPage(Page page, Wrapper wrapper) { return page.setRecords(userMapper.selectUserPage(page,wrapper)); } ``` > 测试 ```java @Test public void selectUserPage() { Page page = new Page<>(1,10); IPage find = userService.selectUserPage(page, new QueryWrapper().lambda().like(User::getName,"2")); System.out.println(JSON.toJSONString(find)); } ``` >日志中打印 ```text ==> Preparing: SELECT COUNT(1) FROM user WHERE name LIKE ? ==> Parameters: %2%(String) ==> Preparing: SELECT * FROM user WHERE name LIKE ? LIMIT 0,10 ==> Parameters: %2%(String) <== Total: 2 ```