用Idea 2019.3+和Gradle5.2.1+ 构建SpringBoot多项目(十)——mybatis plus

components文件夹下新建module项目mybatis+, 项目结构如下:

模块子模块说明
nuts.springboot.boot 工程启动引导项目
nuts-springboot-listener actuator admin项目
components  
 nuts-springboot-dbpool数据库连接池组件
 nuts-springboot-log4j2使用log4j2作为日志组件
 nuts-springboot-logbackspringboot默认日志组件
 nuts-springboot-mybatis使用mybatis作为ORM组件
 nuts-springboot-mybatis+使用mybatis plus作为ORM组件
   
endpoints 后端api响应接口
 nuts-springboot-clover模板项目后端
 nuts-springboot-home统一异常处理、统一返回结构
kernels 工程内核模型
 nuts-springboot-core核心模型
   
   

mybatis+.gradle文件引入mybatis相关依赖

dependencies {
    implementation('com.baomidou:mybatis-plus-boot-starter:3.2.0') {
        exclude group: 'com.zaxxer', module: 'HikariCP'
    }
    // 数据库连接池
    implementation project(':components:nuts.springboot.dbpool')
}

注意 :没有使用默认HikariCP数据库连接池时,需要排除对应的依赖;否则默认使用HikariCP,并报url没有找到属性值

mybatis plus使用参照单元测试样例:

UserMapper 

@Mapper
@Repository
public interface UserMapper {

    /**
     * 查询所有用户
     *
     * @return 用户列表
     */
    List<UserPO> selectAllUser();

    /**
     * 分页查询所有用户
     *
     * @return 用户列表
     */
    IPage<UserPO> selectPageUser(Page<?> page);

}

 UserRepositoryTest 

@SpringBootTest
public class UserRepositoryTest extends AbstractSpringBootTest {
    private static final Logger logger = LoggerFactory.getLogger(UserRepositoryTest.class);

    @Test
    public void testQueryUser() {
        UserMapper userMapper = webApplicationContext.getBean(UserMapper.class);
        Assert.isInstanceOf(UserMapper.class, userMapper, "UserMapper对象不能为空");
        List<UserPO> userPOList = userMapper.selectAllUser();
        userPOList.forEach(userPO -> {
            logger.info(userPO.toString());
        });
        Assert.isTrue(userPOList.size() > 0, "数据库记录查询异常");
    }

    @Test
    public void testQueryUserPage() {
        UserMapper userMapper = webApplicationContext.getBean(UserMapper.class);
        Assert.isInstanceOf(UserMapper.class, userMapper, "UserMapper对象不能为空");
        Page<UserPO> userPOPage = new Page<>();
        userPOPage.setPages(0).setSize(1);
        IPage<UserPO> userPOIPage = userMapper.selectPageUser(userPOPage);
        userPOIPage.getRecords().forEach(userPO -> {
            logger.info(userPO.toString());
        });
        Assert.isTrue(userPOIPage.getRecords().size() == 1, "数据库记录查询异常");

    }
}

 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.hazulnut.admin.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="org.hazulnut.admin.entity.UserPO">
        <result column="id" jdbcType="BIGINT" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="password" jdbcType="VARCHAR" property="password" />
        <result column="salt" jdbcType="VARCHAR" property="salt" />
        <result column="email" jdbcType="VARCHAR" property="email" />
        <result column="phone_number" jdbcType="VARCHAR" property="phoneNumber" />
        <result column="status" jdbcType="INTEGER" property="status" />
        <result column="create_time" jdbcType="INTEGER" property="createTime" />
        <result column="last_login_time" jdbcType="TIMESTAMP" property="lastLoginTime" />
        <result column="last_update_time" jdbcType="TIMESTAMP" property="lastUpdateTime" />
    </resultMap>

    <select id="selectAllUser" resultMap="BaseResultMap">
        SELECT * FROM orm_user
    </select>

    <select id="selectPageUser" resultType="org.hazulnut.admin.entity.UserPO">
        SELECT * FROM orm_user
    </select>
</mapper>

注意:Mapper下的接口类与资源文件夹中的xml文件名要求一致,否则提示无法找到对应的xml或定义

<mapper namespace="org.hazulnut.admin.mapper.UserMapper"> 这里是对应Mapper接口类的全类名

application-mybatis-dev.yaml

mybatis-plus:
  mapper-locations: classpath*:mappings/**/**.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: org.hazulnut.admin.mapper
  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
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    cache-enabled: true

单元测试运行结果:

 使用IPage作为分页组件

 MybatisPlusConfiguration

@Configuration
public class MybatisPlusConfiguration {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(false));
        return paginationInterceptor;
    }
}

 单元测试运行结果:

至此完成mybatis plus配置使用。

 

 ————————————————

 Github项目 https://github.com/HazelNutsWorkGroup/nuts.springboot.single ,

 Gitee项目   https://gitee.com/sleeber/nuts.springboot.single

 欢迎大家交流

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页