MybatisPuls补充知识总结

mybatisPuls指明xml文件路径

mybatis-plus.mapper-locations=…
默认路径为
,mybatis-plus.mapper-locations=classpath:/mapper/** * .xml (Locations of yBatis mapper files) String[]

后续就可以像mybatis那样给dao层创建SQL语句了

继承类

dao层继承baseMapper
iservice接口继承Iservic
Iservice接口实现类继承serviceImp

替代@TableName的一对一配置

这个可以让实体类映射表的时候带上默认的 "t_"前缀

mybatis-plus.global-config.db-config.table-prefix=
在这里插入图片描述

设计全局主键生成策略

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

分页插件的配置和使用

MybatisPlusInterceptor 另外声明一下 这个组件是mybatisPuls 3.4.0及以后版本才更新使用的,之前的版本不存在这个组件.

在系统主配置文件创建组件

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //设置数据库拦截类型
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }

测试代码

    @Test
    public void testPage(){
        Page<User> page = new Page<>(1,2);
        userMapper.selectPage(page,null);
        System.out.println(page);
    }

自定义自己写的SQL如何实现分页

调用自己写的dao层方法时,自己的自定义方法必须返回page类型,并且第一个参数必须为page类型

userMapper.getpage(page,null);

乐观锁插件

1.要给实体类乐观锁的版本号字段添加@Version
2.增加乐观锁插件

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //设置数据库拦截类型
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }

3.这个时候一个业务同时更改数据时就会使用乐观锁的形式进行修改

代码生成器

1.添加依赖


        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>

2.测试类

public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/rongbingqiang?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", "root", "9672005")
                        .globalConfig(builder -> {
                            builder.author("atguigu") // 设置作者
//.enableSwagger() // 开启 swagger 模式
                                    .fileOverride() // 覆盖已生成文件
                                    .outputDir("F:\\freeMarker"); // 指定输出目录
                        })
                        .packageConfig(builder -> {
                            builder.parent("com.atguigu") // 设置父包名,设置父包 例如com.rong
                                    .moduleName("mybatisplus") // 设置父包模块名 是生成文件的上级目录
                                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "F:\\freeMarker"));
// 设置mapperXml生成路径
                        })
                        .strategyConfig(builder -> {
                            builder.addInclude("user") // 设置需要生成的表名 数据库中的表
                                    .addTablePrefix("t_", "c_"); // 设置过滤表前缀 不生成哪些表,一个过滤条件
                        })
                        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker
             //   引擎模板,默认的是Velocity引擎模板
                        .execute();
    }

多数据源

1、创建数据库及表

创建数据库mybatis_plus_1和表product

2、引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
3、配置多数据源

说明:注释掉之前的数据库连接,添加新配置在项目的配置文件中使用

spring:
# 配置数据源信息
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为master
primary: master
# 严格匹配数据源,默认false.true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave_1:
url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
创建service
//创建其中一个数据库的service
public interface UserService extends IService<User> {
}

@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements
UserService {
}

创建另外一个数据库的service
public interface ProductService extends IService<Product> {
}
@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
implements ProductService {
}
测试
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
@Test
public void testDynamicDataSource(){
System.out.println(userService.getById(1L));
System.out.println(productService.getById(1L));
}
结论

1、都能顺利获取对象,则测试成功
2、如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源,自动切
换,是不是就能实现读写分离?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值