SpringBoot(五)——整合 Mybatis、JPA(未完待续)
一、整合 Mybatis
1、整合 Mybatis
创建项目:
然后开始配置数据源:
然后根据数据库来创建一个实体类:
接着就是 mapper 层:
如果 mapper.xml 跟接口放在一起,就不需要其他配置,只需要在 pom.xml 那里配置 build。
但是每个 mapper 上面都要加,这样很麻烦,有个一劳永逸的方式:
然后测试代码:
可以发现没问题。
2、其他地方放置 mapper.xml 文件
如果 xml 文件想放在 resources 文件夹里,也是可以的:
先去掉 build:
接着,可以按照编译后的文件夹路径来在 resources 里面创建:
这样创建也可以。因为编译以后接口跟 xml 文件实际上还是在同一个文件夹里面。
也可以:
这么创建文件夹就需要另外配置:
以及其他配置:
3、整合 Mybatis 多数据源
这里 mapper 和接口是放在一起的。
这个跟前面的多数据源配置基本一样:
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.url=jdbc:mysql:///test?serverTimezone=Asia/Shanghai
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.url=jdbc:mysql:///test01?serverTimezone=Asia/Shanghai
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsOne(){
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dsTwo(){
return DruidDataSourceBuilder.create().build();
}
}
@Configuration
//配置包扫描,并且指定对应的 SqlSessionFactory 和 SqlSessionTemplate
@MapperScan(basePackages = "com.qf.demo_mybatis2.mapper",sqlSessionFactoryRef = "sqlSessionFactoryOne",
sqlSessionTemplateRef = "sqlSessionTemplateOne")
public class MyBatisConfigOne {
@Autowired
@Qualifier("dsOne")
DataSource dsOne;
@Bean
SqlSessionFactory sqlSessionFactoryOne(){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dsOne);
SqlSessionFactory sessionFactory = null;
try {
sessionFactory = sqlSessionFactoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sessionFactory;
}
@Bean
SqlSessionTemplate sqlSessionTemplateOne(){
return new SqlSessionTemplate(sqlSessionFactoryOne());
}
}
还需要配置 two,two 也是一样的,将上面的改个名字即可。
接着就是配置对应的实体类和 mapper ,查询,就完成了。
然后测试代码:
4、使用动态数据源
如果有数据源的话,数据库做读写分离。
这里引用一下 苞米豆 的工具:
然后创建这个文件(原来的那个 properties 文件可以不要):
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql:///test?serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql:///test01?serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#......省略
#以上会配置一个默认库master,一个组slave下有两个子库slav
mybatis:
mapper-locations: classpath*:/mapper/*.xml
type-aliases-package: com.qf.demo_mybatis2.model
用这玩意还需要一个 service 层: