MybatisPlus学习总结(上)

MybatisPlus学习总结(上)

  • 一、介绍
  • 二、集成MP
    • 2.1 Mybatis + MP
    • 2.3 Spring + Mybatis + MP
    • 2.2 SpringBoot + Mybatis + MP
  • 三、CRUD基本用法
    • 3.1 插入操作
    • 3.1.1 代码示例
    • 3.1.2 @TableId
    • 3.1.3 @TableField
    • 3.2 更新操作
      • 3.2.1 根据id更新
      • 3.2.2 根据条件更新
    • 3.3 删除操作
      • 3.3.1 deleteById
      • 3.3.2 deleteByMap
      • 3.3.3 delete
      • 3.3.4 deleteBatchIds
    • 3.4 查询操作
      • 3.4.1 selectById
      • 3.4.2 selectBatchIds
      • 3.4.3 selectOne
      • 3.4.4 selectCount
      • 3.4.5 selectList
      • 3.4.6 selectPage
    • 3.5 SQL注入的原理(待补)
  • 四、Mybatis_Plus 的配置
    • 4.1 基本配置
    • 4.2 进阶配置
    • 4.3 全局策略配置
    • 4.4 总结

环境:mybatis-plus 3.4.3

一、介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

官方地址:http://mp.baomidou.com
代码发布地址:
Github: https://github.com/baomidou/mybatis-plus
Gitee: https://gitee.com/baomidou/mybatis-plus
文档发布地址:https://mp.baomidou.com/guide/

二、集成MP

1、创建数据库以及表:

-- 创建库
CREATE DATABASE mp;
-- 使用库
USE mp;

-- 创建测试表
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_name` varchar(20) NOT NULL COMMENT '用户名',
`password` varchar(20) NOT NULL COMMENT '密码',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- 插入测试数据
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES
('1', 'zhangsan', '123456', '张三', '18', '[email protected]');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES
('2', 'lisi', '123456', '李四', '20', '[email protected]');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES
('3', 'wangwu', '123456', '王五', '28', '[email protected]');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES
('4', 'zhaoliu', '123456', '赵六', '21', '[email protected]');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES
('5', 'sunqi', '123456', '孙七', '24', '[email protected]');

`

2、log4j.properties:

log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n

2.1 Mybatis + MP

项目结构:
MybatisPlus学习总结(上)_第1张图片

1、导入依赖

<dependencies>
  
  <dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plusartifactId>
    <version>3.4.3version>
  dependency>

  
  <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.9version>
  dependency>
  
  <dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.1.12version>
  dependency>
  
  <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
    <version>1.18.4version>
  dependency>
  
  <dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.12version>
  dependency>
  
  <dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-log4j12artifactId>
    <version>1.6.4version>
  dependency>
dependencies>

注意: Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus 会自动帮你维护!

2、编写mybatis-config.xml文件


DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mp"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <package name="com.zb.mapper"/>
    mappers>
configuration>

3、创建 javaBean:

//在User对象中添加@TableName,指定数据库表名
@Data
@TableName("tb_user")
public class User {
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

4、定义UserMapper接口继承BaseMapper

public interface UserMapper extends BaseMapper<User> {
}

5、测试
使用MybatisSqlSessionFactoryBuilder创建创建SqlSessionFactory

@Test
public void testFindAll() throws IOException {
    String config = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(config);
    //使用MybatisSqlSessionFactoryBuilder创建创建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);
    //获取和数据库的一次会话:等同于getConnection()
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    //测试查询
    List<User> users = userMapper.selectList(null);
    for (User user : users) {
        System.out.println(user);
    }

}

结果:

MybatisPlus学习总结(上)_第2张图片

2.3 Spring + Mybatis + MP

项目结构:
MybatisPlus学习总结(上)_第3张图片

1、导入依赖

<dependencies>

  
  <dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plusartifactId>
    <version>3.4.3version>
  dependency>

  
  <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.9version>
  dependency>
  
  <dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.1.12version>
  dependency>
  
  <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
    <version>1.18.4version>
  dependency>
  
  <dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.12version>
  dependency>
  
  <dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-log4j12artifactId>
    <version>1.6.4version>
  dependency>

  
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-contextartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>
  
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-txartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-jdbcartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>

dependencies>

2、编写jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mp
jdbc.username=root
jdbc.password=root

3、编写applicationContext.xml


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="maxActive" value="10"/>
        <property name="minIdle" value="5"/>
    bean>
    
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    bean>
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zb.mapper"/>
    bean>
    
beans>

3、创建 javaBean和UserMapper :

//在User对象中添加@TableName,指定数据库表名
@Data
@TableName("tb_user")
public class User {
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

public interface UserMapper extends BaseMapper<User> {
}

4、测试:

public class AppTest {

    private ApplicationContext ioc = new
            ClassPathXmlApplicationContext("applicationContext.xml");

    private UserMapper userMapper = ioc.getBean("userMapper",UserMapper.class);
    
    @Test
    public void testSelectList() {
        List<User> users = this.userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }
}

结果:
MybatisPlus学习总结(上)_第4张图片

2.2 SpringBoot + Mybatis + MP

项目结构:
MybatisPlus学习总结(上)_第5张图片

1、导入依赖

<parent>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-parentartifactId>
  <version>2.5.2version>
parent>

<dependencies>
  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starterartifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-loggingartifactId>
      exclusion>
    exclusions>
  dependency>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    <scope>testscope>
  dependency>

  
  <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
  dependency>
  
  <dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.4.3version>
  dependency>
  
  <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.47version>
  dependency>
  <dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-log4j12artifactId>
  dependency>
  <dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <scope>testscope>
  dependency>

dependencies>

2、编写application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mp
spring.datasource.username=root
spring.datasource.password=root

3、创建 javaBean和UserMapper

//在User对象中添加@TableName,指定数据库表名
@Data
@TableName("tb_user")
public class User {
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

//@Mapper //如果没有设置mapper接口的扫描包需要使用Mapper注解标记
public interface UserMapper extends BaseMapper<User> {
}

4、编写启动类

@MapperScan("com.zb.mapper")//设置mapper接口的扫描包
@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

5、测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList(){
        System.out.println("执行结果");
        List<User> users = this.userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }

}

结果:
MybatisPlus学习总结(上)_第6张图片

三、CRUD基本用法

通过继承BaseMapper就可以获取到各种各样的单表操作,BaseMapper 方法列表:
MybatisPlus学习总结(上)_第7张图片

3.1 插入操作

3.1.1 代码示例

使用BaseMapper中的int insert(T entity)方法
MybatisPlus学习总结(上)_第8张图片
测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestUserMapper {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert() {
        User user = new User();
        user.setEmail("[email protected]");
        user.setAge(301);
        user.setUserName("caocao1");
        user.setName("曹操1");
        user.setPassword("123456");

        int result = userMapper.insert(user); //result数据库受影响的行数
        System.out.println("result => " + result);

        //获取自增长后的id值, 自增长后的id值会回填到user对象中
        System.out.println("id => " + user.getId());
    }
    
}

结果:可以看到id的值不正确,我们期望的是数据库自增长
在这里插入图片描述

问题:如何设置id的生成策略呢?

3.1.2 @TableId

@TableId注解的作用:

value: 指定表中的主键列的列名, 如果实体属性名与列名一致,可以省略不指定.
type: 指定主键策略.

修改User对象:(使用@TableId注解)

@Data
@TableName("tb_user")
public class User {
    /*
     * @TableId:
     * 	 value: 指定表中的主键列的列名, 如果实体属性名与列名一致,可以省略不指定.
     *   type: 指定主键策略.
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

测试:

@Test
public void testInsert() {
    User user = new User();
    user.setEmail("[email protected]");
    user.setAge(301);
    user.setUserName("caocao1");
    user.setName("曹操1");
    user.setPassword("123456");

    int result = userMapper.insert(user); //result数据库受影响的行数
    System.out.println("result => " + result);

    //获取自增长后的id值, 自增长后的id值会回填到user对象中
    System.out.println("id => " + user.getId());

}

结果:
在这里插入图片描述

MP支持的id策略:
MybatisPlus学习总结(上)_第9张图片

3.1.3 @TableField

@TableField注解的作用:

1、对象中的属性名和字段名不一致的问题(非驼峰)
2、对象中的属性字段在表中不存在的问题
3、查询的时候不查询该字段

MybatisPlus学习总结(上)_第10张图片
结果:
在这里插入图片描述

3.2 更新操作

3.2.1 根据id更新

方法定义:
在这里插入图片描述

3.2.2 根据条件更新

方法定义:
在这里插入图片描述

3.3 删除操作

3.3.1 deleteById

方法定义:
MybatisPlus学习总结(上)_第11张图片
测试:

@Test
public void testDeleteById(){
    // 根据id删除数据
    int result = userMapper.deleteById(9L);
    System.out.println("result => " + result);
}

执行结果:
在这里插入图片描述

3.3.2 deleteByMap

方法定义:
MybatisPlus学习总结(上)_第12张图片

测试:

@Test
public void testDeleteByMap(){

    Map<String,Object> map = new HashMap<>();
    map.put("user_name", "zhangsan");
    map.put("password", "99999");

    // 根据map删除数据,多条件之间是and关系
    int result = this.userMapper.deleteByMap(map);
    System.out.println("result => " + result);
}

执行结果:
在这里插入图片描述

3.3.3 delete

方法定义:
在这里插入图片描述
测试:

方法一:(推荐)

@Test
public void testDelete01(){

    //用法一:
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("user_name", "caocao1")
            .eq("password", "123456");

    // 根据包装条件做删除
    int result = this.userMapper.delete(wrapper);
    System.out.println("result => " + result);
}

方法二:

@Test
public void testDelete02(){
    //用法二:
    User user = new User();
    user.setPassword("123456");
    user.setUserName("caocao");

    QueryWrapper<User> wrapper = new QueryWrapper<>(user);

    // 根据包装条件做删除
    int result = this.userMapper.delete(wrapper);
    System.out.println("result => " + result);
}

执行结果:
在这里插入图片描述

3.3.4 deleteBatchIds

方法定义:
在这里插入图片描述

测试:

@Test
public void  testDeleteBatchIds(){
    // 根据id批量删除数据
    int result = this.userMapper.deleteBatchIds(Arrays.asList(10L, 11L));
    System.out.println("result => " + result);
}

执行结果:
在这里插入图片描述

3.4 查询操作

3.4.1 selectById

方法定义:

在这里插入图片描述

测试:

@Test
public void testSelectById() {
    User user = userMapper.selectById(2L);
    System.out.println(user);
}

执行结果:
在这里插入图片描述

3.4.2 selectBatchIds

方法定义:
在这里插入图片描述

测试:

@Test
public void testSelectBatchIds(){
    // 根据id批量查询数据
    List<User> users = this.userMapper.selectBatchIds(Arrays.asList(2L, 3L, 4L, 100L));
    for (User user : users) {
        System.out.println(user);
    }
}

执行结果:
在这里插入图片描述

3.4.3 selectOne

方法定义:
在这里插入图片描述
测试:

@Test
public void testSelectOne(){
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    //查询条件
    wrapper.eq("password", "123456").eq("age","20");
    // 查询的数据超过一条时,会抛出异常
    User user = this.userMapper.selectOne(wrapper);
    System.out.println(user);
}

执行结果:
在这里插入图片描述
注意:查询的数据超过一条时,会抛出TooManyResultsException异常

3.4.4 selectCount

方法定义:
在这里插入图片描述
测试:

@Test
public void testSelectCount(){

    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.gt("age", 20); // 条件:年龄大于20岁的用户

    // 根据条件查询数据条数
    Integer count = this.userMapper.selectCount(wrapper);
    System.out.println("count => " + count);
}

执行结果:
在这里插入图片描述

3.4.5 selectList

方法定义:
在这里插入图片描述
测试:

@Test
public void testSelectList(){
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    //设置查询条件
    wrapper.like("email", "itcast");//like表示模糊查询

    List<User> users = this.userMapper.selectList(wrapper);
    for (User user : users) {
        System.out.println(user);
    }
}

执行结果:
在这里插入图片描述

3.4.6 selectPage

方法定义:
在这里插入图片描述

前提: 配置分页插件,实现物理分页。(以SpringBoot为例)

@Configuration
public class MybatisPlusConfig {

    // 旧版
//    @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(true));
//        return paginationInterceptor;
//    }

    // 配置分页插件,最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

}

测试:

// 测试分页查询,前提:配置分页插件
@Test
public void testSelectPage(){

    Page<User> page = new Page<>(3,2); //查询

    QueryWrapper<User> wrapper = new QueryWrapper<>();
    //设置查询条件
//        wrapper.like("email", "itcast");//like表示模糊查询
    IPage<User> iPage = userMapper.selectPage(page, wrapper);

    System.out.println("数据总条数: " + iPage.getTotal());
    System.out.println("数据总页数: " + iPage.getPages());
    System.out.println("当前页数: " + iPage.getCurrent());

    List<User> records = iPage.getRecords();
    for (User record : records) {
        System.out.println(record);
    }

}

执行结果:
MybatisPlus学习总结(上)_第13张图片

3.5 SQL注入的原理(待补)

尚硅谷:P30-33

四、Mybatis_Plus 的配置

好的博客:https://blog.csdn.net/weixin_44159306/article/details/91992439

4.1 基本配置

1、configLocation

设置MyBatis 配置文件位置,如果有单独的 MyBatis 配置,请将其路径配置到configLocation

Spring Boot:

mybatis-plus.config-location = classpath:mybatis-config.xml

Spring:

<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
	<property name="configLocation" value="classpath:mybatis-config.xml"/>
bean>

2、mapperLocations
MyBatis Mapper 所对应的 XML 文件位置,如果在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置

Spring Boot:

mybatis-plus.mapper-locations = classpath*:mybatis/*.xml

Spring:

<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
	<property name="mapperLocations" value="classpath*:mybatis/*.xml"/>
bean>

Maven 多模块项目的扫描路径需以 classpath*:开头 (即加载多个 jar 包下的 XML 文件)

3、typeAliasesPackage
MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名

Spring Boot:

mybatis-plus.type-aliases-package = com.zb.bean

Spring:

<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
	<property name="typeAliasesPackage"
value="com.zb.bean"/>
bean>

4.2 进阶配置

1、mapUnderscoreToCamelCase
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。
此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中默认为true

Spring Boot:

#关闭自动驼峰映射,该参数不能和mybatis-plus.config-location同时存在
mybatis-plus.configuration.map-underscore-to-camel-case=false

2、cacheEnabled
全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,默认为 true。

mybatis-plus.configuration.cache-enabled=false

4.3 全局策略配置

1、idType

全局默认主键类型,设置后,即可省略实体对象中的@TableId(type = IdType.AUTO)配置。默认值: ID_WORKER

Spring Boot:

mybatis-plus.global-config.db-config.id-type=auto

Spring:


<bean id="sqlSessionFactory"
      class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="globalConfig">
        <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
            <property name="dbConfig">
                <bean
                        class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
                    <property name="idType" value="AUTO"/>
                bean>
            property>
        bean>
    property>
bean>

2、tablePrefix
表名前缀,全局配置后可省略@TableName()配置。

Spring Boot:

mybatis-plus.global-config.db-config.table-prefix=tb_

Spring:

<bean id="sqlSessionFactory"
      class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="globalConfig">
        <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
            <property name="dbConfig">
                <bean
                        class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
                    <property name="idType" value="AUTO"/>
                    <property name="tablePrefix" value="tb_"/>
                bean>
            property>
        bean>
    property>
bean>

4.4 总结

SpringBoot的常用配置:

# 指定全局的配置文件
#mybatis-plus.config-location=classpath:mybatis-config.xml
# 指定Mapper.xml文件的路径
mybatis-plus.mapper-locations = classpath*:mybatis/*.xml
# 实体对象的扫描包
mybatis-plus.type-aliases-package = com.zb.bean

# 禁用自定的驼峰映射,默认开启
mybatis-plus.configuration.map-underscore-to-camel-case=false

# 禁用缓存
mybatis-plus.configuration.cache-enabled=false

# 全局的id生成策略
mybatis-plus.global-config.db-config.id-type=auto

# 全局的表名的前缀
mybatis-plus.global-config.db-config.table-prefix=tb_

Spring的常用配置:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="maxActive" value="10"/>
        <property name="minIdle" value="5"/>
    bean>
    
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        
        <property name="dataSource" ref="dataSource"/>
        
        
        
        <property name="typeAliasesPackage" value="com.zb.bean"/>
        
        <property name="mapperLocations" value="classpath*:mapper/*.xml"/>

        
        <property name="configuration" ref="configuration"/>
        
        <property name="globalConfig" ref="globalConfig"/>
    bean>


    
    <bean id="configuration" class="com.baomidou.mybatisplus.core.MybatisConfiguration">
        
        <property name="mapUnderscoreToCamelCase" value="true"/>
    bean>

    
    <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        
        <property name="dbConfig" ref="dbConfig"/>
    bean>

    <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
        
        <property name="idType" value="AUTO"/>
        
        <property name="tablePrefix" value="tb_"/>
    bean>

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zb.mapper"/>
    bean>

beans>

你可能感兴趣的:(MybatisPlus)