Mybatis&&MybatisPlus

基于spring的mybatis入门

全局配置文件

官网全局配置文件解析

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--官网全局配置文件解析 https://mybatis.net.cn/configuration.html-->
    <settings>
        <!--懒加载 默认为false-->
        <setting name="lazyLoadingEnabled" value="false"/>
        <!-- 开启二级缓存 -->
        <setting name="cacheEnabled" value="true" />
        <!--配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。-->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!--驼峰命名自动映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--指定 MyBatis 增加到日志名称的前缀。-->
        <setting name="logPrefix" value="MYBATIS"/>
        <!--设置数据库超时时间-->
        <setting name="defaultStatementTimeout" value="1000"/>
    </settings>

    <typeAliases>
        <!--类型别名(可以使用注解:@Alias("Student")) 单独为某个类设置别名-->
        <package name="com.example.mybatistest.pojo"/>
    </typeAliases>

    <!--    配置分页插件 注意版本不同interceptor(拦截器不同)5.0之后使用PageInterceptor-->
    <!--    <plugins>-->
    <!--        <plugin interceptor="com.github.pagehelper.PageHelper">-->
    <!--            <property name="dialect" value="mysql"/>-->
    <!--        </plugin>-->
    <!--    </plugins>-->

    <!--    5.1.2版本 PageInterceptor 并且可以自动识别sql语言-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--分页合理化参数  pageNum<=0时查询第一页,超过最大页码时查询最后一页-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

    <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://localhost:3306/localhost"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.example.mybatistest.mapper.StudentMapper"></mapper>
    </mappers>
</configuration>

Mapper

主键返回

<!--设置useGeneratedKeys,keyColumn,keyProperty三个属性后,插入成功后的对象的id会自动赋值-->
<insert id="insertStudent" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO student(name, `number`, address, age)
        VALUES(#{name}, #{number}, #{address}, #{age});
</insert>

批量插入(foreach标签)

<insert id="insertBatch" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO student(name, `number`, address, age) values
        <!--collection表示参数名称,separator表示每次循环中间添加的字符-->
        <foreach collection="list" separator="," item="item">
            (#{item.name},#{item.number},#{item.address},#{item.age})
        </foreach>
    </insert>

动态sql

动态sql标签解析

缓存机制

mybatis缓存机制
mybatis二级缓存是表级缓存,开销大,假设进行多表联合查询,其他mapper的更新操作并不会刷新缓存,这样就造成了数据不一致的问题.因此不建议使用二级缓存.
如果使用,建议关闭只读: readOnly=false(默认),此时用户拿到的是缓存的副本而不是缓存的内存地址,防止造成缓存污染

基于SpringBoot的MybatisPlus

官方文档

快速开始

依赖

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.5.3</version>
</dependency>

注意:
引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。

配置

# 开启日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 设置实体类所对应的表的统一前缀
#mybatis-plus.global-config.db-config.table-prefix=t_
# 设置全局主键生成策略
mybatis-plus.global-config.db-config.id-type=auto
# 指定映射文件位置
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
# 配置别名
mybatis-plus.type-aliases-package=com.example.mybatisplustest.pojo

配置Mapper

1、Mapper接口需要继承BaseMapper
2、启动类需要添加@MapperScan注解
3、如需添加mapper映射文件,需要用在配置文件中mapper-loacltions指定映射文件位置(不指定的默认位置:classpath:/mapper/**/.xml)

分页插件

1、配置分页拦截器

@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //配置分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }

2、分页查询

@Test
    void contextLoads() {
        Page<Student> studentPage = new Page<>(0, 5);
        studentMapper.selectPage(studentPage, null);
        System.err.println(studentPage.getRecords());
    }

乐观锁插件

注意:
实体字段需要添加一个代表数据版本的字段,并且添加@Version注解

配置乐观锁插件

 @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //配置分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }

MybatisPlus逆向工程

直接用MybatisX插件去生成就好啦

posted @ 2023-01-17 10:31  MorningBell  阅读(56)  评论(0编辑  收藏  举报