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、如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源,自动切
换,是不是就能实现读写分离?