# spring-boot-demo-orm-mybatis-plus
> 此 demo 演示了 Spring Boot 如何集成 mybatis-plus,简化Mybatis开发,带给你难以置信的开发体验。
>
> - 2019-09-14 新增:ActiveRecord 模式操作
## pom.xml
```xml
* mybatis-plus 配置 *
* * @author yangkai.shen * @date Created in 2018-11-08 17:29 */ @Configuration @MapperScan(basePackages = {"com.xkcoding.orm.mybatis.plus.mapper"}) @EnableTransactionManagement public class MybatisPlusConfig { /** * 性能分析拦截器,不建议生产使用 */ @Bean public PerformanceInterceptor performanceInterceptor(){ return new PerformanceInterceptor(); } /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` ## CommonFieldHandler.java ```java package com.xkcoding.orm.mybatis.plus.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; /** ** 通用字段填充 *
* * @author yangkai.shen * @date Created in 2018-11-08 17:40 */ @Slf4j @Component public class CommonFieldHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("lastUpdateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ...."); this.setFieldValByName("lastUpdateTime", new Date(), metaObject); } } ``` ## application.yml ```yaml spring: datasource: url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource initialization-mode: always continue-on-error: true schema: - "classpath:db/schema.sql" data: - "classpath:db/data.sql" hikari: minimum-idle: 5 connection-test-query: SELECT 1 FROM DUAL maximum-pool-size: 20 auto-commit: true idle-timeout: 30000 pool-name: SpringBootDemoHikariCP max-lifetime: 60000 connection-timeout: 30000 logging: level: com.xkcoding: debug com.xkcoding.orm.mybatis.plus.mapper: trace mybatis-plus: mapper-locations: classpath:mappers/*.xml #实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: com.xkcoding.orm.mybatis.plus.entity global-config: # 数据库相关配置 db-config: #主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: auto #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" field-strategy: not_empty #驼峰下划线转换 table-underline: true #是否开启大写命名,默认不开启 #capital-mode: true #逻辑删除配置 #logic-delete-value: 1 #logic-not-delete-value: 0 db-type: mysql #刷新mapper 调试神器 refresh: true # 原生配置 configuration: map-underscore-to-camel-case: true cache-enabled: true ``` ## UserMapper.java ```java /** ** UserMapper *
* * @author yangkai.shen * @date Created in 2018-11-08 16:57 */ @Component public interface UserMapper extends BaseMapper* User Service *
* * @author yangkai.shen * @date Created in 2018-11-08 18:10 */ public interface UserService extends IService* User Service *
* * @author yangkai.shen * @date Created in 2018-11-08 18:10 */ @Service public class UserServiceImpl extends ServiceImpl* User Service 测试 *
* * @author yangkai.shen * @date Created in 2018-11-08 18:13 */ @Slf4j public class UserServiceTest extends SpringBootDemoOrmMybatisPlusApplicationTests { @Autowired private UserService userService; /** * 测试Mybatis-Plus 新增 */ @Test public void testSave() { String salt = IdUtil.fastSimpleUUID(); User testSave3 = User.builder().name("testSave3").password(SecureUtil.md5("123456" + salt)).salt(salt).email("testSave3@xkcoding.com").phoneNumber("17300000003").status(1).lastLoginTime(new DateTime()).build(); boolean save = userService.save(testSave3); Assert.assertTrue(save); log.debug("【测试id回显#testSave3.getId()】= {}", testSave3.getId()); } /** * 测试Mybatis-Plus 批量新增 */ @Test public void testSaveList() { List* 角色实体类 *
* * @author yangkai.shen * @date Created in 2019-09-16 14:04 */ @Data @TableName("orm_role") @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) public class Role extends Model* RoleMapper *
* * @author yangkai.shen * @date Created in 2019-09-16 14:06 */ public interface RoleMapper extends BaseMapper* Role *
* * @author yangkai.shen * @date Created in 2019-09-16 14:19 */ @Slf4j public class ActiveRecordTest extends SpringBootDemoOrmMybatisPlusApplicationTests { /** * 测试 ActiveRecord 插入数据 */ @Test public void testActiveRecordInsert() { Role role = new Role(); role.setName("VIP"); Assert.assertTrue(role.insert()); // 成功直接拿会写的 ID log.debug("【role】= {}", role); } /** * 测试 ActiveRecord 更新数据 */ @Test public void testActiveRecordUpdate() { Assert.assertTrue(new Role().setId(1L).setName("管理员-1").updateById()); Assert.assertTrue(new Role().update(new UpdateWrapper