From fbe814f7cbd66b32669ac98875cfe97dec28c19f Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Thu, 8 Nov 2018 18:49:08 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-orm-mybatis-plus?=
=?UTF-8?q?=20=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 1 +
spring-boot-demo-orm-mybatis-plus/.gitignore | 25 +
spring-boot-demo-orm-mybatis-plus/README.md | 426 ++++++++++++++++++
spring-boot-demo-orm-mybatis-plus/pom.xml | 76 ++++
...ringBootDemoOrmMybatisPlusApplication.java | 26 ++
.../plus/config/CommonFieldHandler.java | 39 ++
.../plus/config/MybatisPlusConfig.java | 42 ++
.../orm/mybatis/plus/entity/User.java | 88 ++++
.../orm/mybatis/plus/mapper/UserMapper.java | 22 +
.../orm/mybatis/plus/service/UserService.java | 20 +
.../plus/service/impl/UserServiceImpl.java | 24 +
.../src/main/resources/application.yml | 51 +++
.../src/main/resources/db/data.sql | 2 +
.../src/main/resources/db/schema.sql | 13 +
...ootDemoOrmMybatisPlusApplicationTests.java | 16 +
.../service/impl/UserServiceImplTest.java | 153 +++++++
16 files changed, 1024 insertions(+)
create mode 100644 spring-boot-demo-orm-mybatis-plus/.gitignore
create mode 100644 spring-boot-demo-orm-mybatis-plus/README.md
create mode 100644 spring-boot-demo-orm-mybatis-plus/pom.xml
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/SpringBootDemoOrmMybatisPlusApplication.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/CommonFieldHandler.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/MybatisPlusConfig.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/User.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/UserMapper.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/service/UserService.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/service/impl/UserServiceImpl.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/resources/application.yml
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/resources/db/data.sql
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/main/resources/db/schema.sql
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/test/java/com/xkcoding/orm/mybatis/plus/SpringBootDemoOrmMybatisPlusApplicationTests.java
create mode 100644 spring-boot-demo-orm-mybatis-plus/src/test/java/com/xkcoding/orm/mybatis/plus/service/impl/UserServiceImplTest.java
diff --git a/pom.xml b/pom.xml
index 9d6d895..adc6bf1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,7 @@
+ * mybatis-plus 配置 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.config + * @description: mybatis-plus 配置 + * @author: yangkai.shen + * @date: Created in 2018/11/8 17:29 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@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; + +/** + *+ * 通用字段填充 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.config + * @description: 通用字段填充 + * @author: yangkai.shen + * @date: Created in 2018/11/8 17:40 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@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 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.mapper + * @description: UserMapper + * @author: yangkai.shen + * @date: Created in 2018/11/8 16:57 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Component +public interface UserMapper extends BaseMapper+ * User Service + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service + * @description: User Service + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:10 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface UserService extends IService+ * User Service + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service.impl + * @description: User Service + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:10 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Service +public class UserServiceImpl extends ServiceImpl+ * User Service 测试 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service.impl + * @description: User Service 测试 + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:13 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +public class UserServiceImplTest 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+ * 启动器 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus + * @description: 启动器 + * @author: yangkai.shen + * @date: Created in 2018/11/8 16:48 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@SpringBootApplication +public class SpringBootDemoOrmMybatisPlusApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootDemoOrmMybatisPlusApplication.class, args); + } +} diff --git a/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/CommonFieldHandler.java b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/CommonFieldHandler.java new file mode 100644 index 0000000..77584eb --- /dev/null +++ b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/CommonFieldHandler.java @@ -0,0 +1,39 @@ +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; + +/** + *+ * 通用字段填充 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.config + * @description: 通用字段填充 + * @author: yangkai.shen + * @date: Created in 2018/11/8 17:40 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@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); + } +} diff --git a/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/MybatisPlusConfig.java b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/MybatisPlusConfig.java new file mode 100644 index 0000000..4d6f846 --- /dev/null +++ b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/MybatisPlusConfig.java @@ -0,0 +1,42 @@ +package com.xkcoding.orm.mybatis.plus.config; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + *+ * mybatis-plus 配置 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.config + * @description: mybatis-plus 配置 + * @author: yangkai.shen + * @date: Created in 2018/11/8 17:29 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@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(); + } +} diff --git a/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/User.java b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/User.java new file mode 100644 index 0000000..afa560a --- /dev/null +++ b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/User.java @@ -0,0 +1,88 @@ +package com.xkcoding.orm.mybatis.plus.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +import static com.baomidou.mybatisplus.annotation.FieldFill.INSERT; +import static com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE; + +/** + *+ * 用户实体类 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.entity + * @description: 用户实体类 + * @author: yangkai.shen + * @date: Created in 2018/11/8 16:49 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@TableName("orm_user") +public class User implements Serializable { + private static final long serialVersionUID = -1840831686851699943L; + + /** + * 主键 + */ + private Long id; + + /** + * 用户名 + */ + private String name; + + /** + * 加密后的密码 + */ + private String password; + + /** + * 加密使用的盐 + */ + private String salt; + + /** + * 邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phoneNumber; + + /** + * 状态,-1:逻辑删除,0:禁用,1:启用 + */ + private Integer status; + + /** + * 创建时间 + */ + @TableField(fill = INSERT) + private Date createTime; + + /** + * 上次登录时间 + */ + private Date lastLoginTime; + + /** + * 上次更新时间 + */ + @TableField(fill = INSERT_UPDATE) + private Date lastUpdateTime; +} diff --git a/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/UserMapper.java b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/UserMapper.java new file mode 100644 index 0000000..4bb44b4 --- /dev/null +++ b/spring-boot-demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/UserMapper.java @@ -0,0 +1,22 @@ +package com.xkcoding.orm.mybatis.plus.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xkcoding.orm.mybatis.plus.entity.User; +import org.springframework.stereotype.Component; + +/** + *+ * UserMapper + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.mapper + * @description: UserMapper + * @author: yangkai.shen + * @date: Created in 2018/11/8 16:57 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Component +public interface UserMapper extends BaseMapper+ * User Service + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service + * @description: User Service + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:10 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface UserService extends IService+ * User Service + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service.impl + * @description: User Service + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:10 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Service +public class UserServiceImpl extends ServiceImpl+ * User Service 测试 + *
+ * + * @package: com.xkcoding.orm.mybatis.plus.service.impl + * @description: User Service 测试 + * @author: yangkai.shen + * @date: Created in 2018/11/8 18:13 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +public class UserServiceImplTest 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