SpringBoot持久层技术(jdbcTemplate+mybatis+springdataJPA)
SpringBoot整合持久层技术
- 整合jdbcTemplate
- 案例
- 整合Mybaits
- 案例
- 整合SpringDataJPA
- 案例
- 多数据源
- JDBCTemplate多数据源
- Mybatis多数据源
整合jdbcTemplate
jdbctemplate是Spring提供的JDBC框架,利用AOP技术来解决直接使用jdbc带来的大量代码的繁杂问题
SpringBoot对JdbcTemplate的使用提供了一套自动化配置类:JdbcTemplateAutoConfiguration类,所以想要使用只需要提供JdbcTemplate的依赖和dataSource依赖即可
案例
1.pom.xml配置
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies>
2.配置数据库连接信息applicaion.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql:///chapter05?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
3.创建JavaBean
public class Book {private int id;private String name;private Double price;//省略getter setter
}
4.创建持久层接口dao
jdbcTemplate 对于增删改都使用update方法
@Repository
public class BookDao {//加入jdbc依赖后就可以直接注入使用@AutowiredJdbcTemplate jdbcTemplate;public int addBook(Book book){return jdbcTemplate.update("insert into book(name,price) values(?,?)",book.getName(),book.getPrice());}public int updateBook(Book book){return jdbcTemplate.update("update book set name = ? , price = ? where id = ?" , book.getName(),book.getPrice(),book.getId());}public int deleteBookByid(Integer id){return jdbcTemplate.update("delete from book where id = ?",id);}public Book getBook(Integer id){return jdbcTemplate.queryForObject("select * from book where id = ?" , new BeanPropertyRowMapper<>(Book.class) , id);}public List<Book> getAllBooks(){return jdbcTemplate.query("select * from book",new BeanPropertyRowMapper<>(Book.class));}
}
6.测试
@SpringBootTest
class JdbctemplateApplicationTests {//注入service层@AutowiredBookService bookService;@Testvoid contextLoads() {Book book = new Book();book.setId(1);Book book1 = bookService.getBook(1);System.out.println(book1.toString()); }}
整合Mybaits
SpringBoot同样为Mybatis提供了自动化配置
案例
1.导入Mybatis依赖、数据库依赖、数据库连接池的依赖
2.配置数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
3.创建DAO接口
public interface BuserMapper {List<Buser> getAllBuser();
}
4.创建对应mapper.xml文件
<mapper namespace="pljandsyx.top.mybatisdatasource.mapper.BuserMapper"><select id="getAllBuser" resultType="pljandsyx.top.mybatisdatasource.Buser">select * from t_buser</select>
</mapper>
5.扫描mapper.xml文件
两种方法:
第一种:在每个mapper.xml文件里添加@Mapper注解
第二种:在启动类添加包扫描注解@MapperScan(basePackages=“pljandsyx.top.mybatisdatasource.mapper”)
6.测试
//注入依赖@AutowiredBuserMapper buserMapper;@Testvoid contextLoads() {List<Buser> allBuser = buserMapper.getAllBuser();System.out.println(allBuser);}
关于mapper.xml文件的位置:
1.如果放在java目录下,编译时是不会被扫描到的,尽管添加了@Mapper注解或者扫描注解
2.可以在resources目录创建与java目录相同的文件路径
3.如果硬要放在java目录,在pom.xml添加配置resource路径,如下
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!-- 当然也要告诉服务器resources也是我们的资源路径--><resource><directory>src/main/resources</directory></resource></resources>
4.如果要放在resources目录下的mapper目,在application.properties:
mybatis.mapper-locations=classpath:/mybatis/
整合SpringDataJPA
SpringDataJPA可以有效减少访问数据库的代码
案例
多数据源
多数据源就是在一个javaEE项目中才用了不同数据库实例中的多个库,或者说同一个数据库实例中多个不同的库,中间件可以完成,当然SpringBooot也可以完成
下面是三种配置方式
JDBCTemplate多数据源
1.导入相同依赖(jdbc依赖,mysql连接依赖,druid连接池依赖),创建两个数据库实例test1&test2
2.配置两个不同的数据源
#数据源1
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.url=jdbc:mysql:///localhost:3360/test1
spring.datasource.one.username=root
spring.datasource.one.password=root#数据源2
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.url=jdbc:mysql:///localhost:3360/test2
spring.datasource.two.username=root
spring.datasource.two.password=root
因为提供了不同的数据源,所以就要自定义加载数据源配置以及提供两个不同的JdbcTemplate实例
3.配置datasource & jdbcTemplate
DataSourceConfig.class:
@Configuration
public class DataSourceConfig {//因为在配置数据源的时候用了不同的前缀,所以要用类型安全的属性注入
//返回的Bean名称就是方法名@Bean@ConfigurationProperties(prefix = "spring.datasource.one")DataSource ds1(){return DruidDataSourceBuilder.create().build();}
//因为在配置数据源的时候用了不同的前缀,所以要用类型安全的属性注入
//返回的Bean名称就是方法名@Bean@ConfigurationProperties(prefix = "spring.datasource.two")DataSource ds2(){return DruidDataSourceBuilder.create().build();}
}
TemplateConfig.class:
@Configuration
public class TemplateConfig
{//这里同样需要指定不用的数据源使用@Qualifier注解,指定对应的Bean,直接New返回一个加入dataSource为参数的JdbcTemplate@BeanJdbcTemplate jdbcTemplate1(@Qualifier(value = "ds1") DataSource dataSource){return new JdbcTemplate(dataSource);}
//这里同样需要指定不用的数据源使用@Qualifier注解,指定对应的Bean,直接New返回一个加入dataSource为参数的JdbcTemplate@BeanJdbcTemplate jdbcTemplate2(@Qualifier(value = "ds2") DataSource dataSource){return new JdbcTemplate(dataSource);}
}
4.测试
//这里要指定注入的不用JdbcTemplate,使用@Resource或者可以使用@AutoWired和@Qualfier组合@Resource(name = "jdbcTemplate1")JdbcTemplate jdbcTemplate1;@Resource(name = "jdbcTemplate2")JdbcTemplate jdbcTemplate2;@Testvoid contextLoads() {Buser buser1 = jdbcTemplate1.queryForObject("select * from t_buser where id = 1", new BeanPropertyRowMapper<>(Buser.class));System.out.println(buser1.toString());Buser buser2 = jdbcTemplate2.queryForObject("select * from t_buser where id = 1", new BeanPropertyRowMapper<>(Buser.class));System.out.println(buser2.toString());}
Mybatis多数据源
1.导入依赖
2.配置数据源
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC
spring.datasource.one.username=root
spring.datasource.one.password=rootspring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC
spring.datasource.two.username=root
spring.datasource.two.password=root
@Configuration
public class DadaSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.one")DataSource dsone(){return DruidDataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix = "spring.datasource.two")DataSource dstwo(){return DruidDataSourceBuilder.create().build();}
}
3.配置SqlSessionFactory&SqlSessionTemplate
@Configuration
@MapperScan(basePackages = "pljandsyx.top.mybatisdatasource.mapper1", sqlSessionFactoryRef ="sqlSessionFactory1" , sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisConfigOne {@Resource(name = "dsone")DataSource dsone;@BeanSqlSessionFactory sqlSessionFactory1(){SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();try{sqlSessionFactoryBean.setDataSource(dsone);return sqlSessionFactoryBean.getObject();}catch (Exception e){e.printStackTrace();}return null;}@BeanSqlSessionTemplate sqlSessionTemplate1(){return new SqlSessionTemplate(sqlSessionFactory1());}
}
@Configuration
@MapperScan(basePackages = "pljandsyx.top.mybatisdatasource.mapper2" ,sqlSessionTemplateRef = "sqlSessionTemplate2" ,sqlSessionFactoryRef ="sqlSessionFactory2")
public class MybatisConfigTwo {@Resource(name = "dstwo")DataSource dstwo;
@Bean
SqlSessionFactory sqlSessionFactory2(){SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();try{sqlSessionFactoryBean.setDataSource(dstwo);return sqlSessionFactoryBean.getObject();}catch (Exception e){e.printStackTrace();}return null;}@BeanSqlSessionTemplate sqlSessionTemplate2(){return new SqlSessionTemplate(sqlSessionFactory2());}
}
4.创建接口以及对应xml文件
第一个
@Repository
public interface BuserMapper1 {List<Buser> getAllBuser1();
}
<mapper namespace="pljandsyx.top.mybatisdatasource.mapper1.BuserMapper1"><select id="getAllBuser1" resultType="pljandsyx.top.mybatisdatasource.Buser">select * from t_buser</select>
</mapper>
第二个
@Repository
public interface BuserMapper2 {List<Buser> getAllBuser2();
}
<mapper namespace="pljandsyx.top.mybatisdatasource.mapper2.BuserMapper2"><select id="getAllBuser2" resultType="pljandsyx.top.mybatisdatasource.Buser">select * from t_buser</select>
</mapper>
5.测试
@SpringBootTest
class MybatisdatasourceApplicationTests {@AutowiredBuserMapper1 buserMapper1;@AutowiredBuserMapper2 buserMapper2;@Testvoid contextLoads() {List<Buser> allBuser1 = buserMapper1.getAllBuser1();System.out.println(allBuser1);List<Buser> allBuser2 = buserMapper2.getAllBuser2();System.out.println(allBuser2);}
}
最后这里有个疑问:
接口名称一定要跟xml文件名称一样吗?
当不一样时,找不到对应的方法,尽管xml文件里的namespace等都一一对应了;
SpringBoot持久层技术(jdbcTemplate+mybatis+springdataJPA)相关推荐
- springboot整合持久层技术
springboot整合持久层技术 整合jdbcTemplate 1.依赖导入 <?xml version="1.0" encoding="UTF-8"? ...
- 【SpringBoot】SpringBoot——整合持久层技术
文章目录 5. 整合持久层技术 5.1 整合JdbcTemplate 5.2 整合MyBatis 5.3 Spring Data JPA 5.3.1 JPA.Spring Data.Spring Da ...
- mybatis generator 中文注释_[SpringBoot2.X] 23- 整合持久层技术 -MyBatis - 配置
整合MyBatis 1搭建项目环境 1.1.1创建项目--略 11.2修改POM文件,添加相关依赖 <dependency><groupId>org.springframewo ...
- [Spring Boot 2]整合持久层技术
持久层技术,简单来说,就是通过操纵对象来操作数据库.(具体见前言部分) 本期博客继续深入Spring Boot技术,值得一提的是,尽管Spring Boot操作起来还是不错的,看都看明白,但还是强烈建 ...
- Java持久层框架之mybatis使用
一.什么是框架,框架从何而来,为什么使用框架? 框架(framework): 1.是一系列jar包,其本质是对JDK功能的拓展.(jar包,jar:class文件的压缩包) 2.框架是一组程序的集合, ...
- 持久层框架之MyBatis
1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- 关于springboot持久层框架mybatis+jpa组合使用
一.简介 JPA和MyBatis各有各的好处,混合食用效果更佳.(hibernate是面向对象的,而MyBatis是面向关系的) 个人总结(总结自己的理解) 1.表关联较多的项目,优先使用mybati ...
- springboot整合持久层技术(mysql驱动问题)
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more tha ...
- 【Spring 持久层】Spring 与 Mybatis 整合
持久层 持久层整合总述 Mybatis 开发步骤回顾 Mybatis 开发中存在的问题 Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 Spring 与 ...
- JavaWeb(四)——MyBatis(持久层框架)
Mybatis--持久层框架(用于简化JDBA) Mybatis概述 Mybatis概念 JDBC 缺点 Mybatis 优化 Mybatis快速入门 创建user表,添加数据 创建模块,导入坐标(p ...
最新文章
- 达摩院NLP团队斩获六项世界冠军背后,让AI没有难懂的语言
- Datawhale面经项目来了!
- word2vec原理浅析
- eclipse中的汉字极小的解决方案(转载)
- Taro+react开发(90):列表渲染key值
- NIPS 2018 接收论文list 完整清单
- netty 权威指南~第11章——WebSoket协议开发
- 支付交易相关接口文档对接
- BOOST升压有源功率因数校正
- lesson 12 goodbye and good luck 再见,一路顺风-将来时态-early in the morning
- JAVA的面向对象编程
- 如何查看自己电脑应该买什么样的内存条
- [开发]resin+spring+struts配搭在线上常见的三个问题
- 解决-使用html2canvas截取页面时,页面的div背景图无法截取并跨域
- 我的Java学习之路(第十六天)----- Java实现杨辉三角
- mkv封装字幕乱码问题
- CCD、CMOS和像素
- 【案例】天津滨海农商行:基于大数据风控的移动互联网个人快贷系统——滨e贷
- 好玩有趣的初音未来的居合斩游戏HTML源码
- 用钩子函数实现鼠标动作录制
热门文章
- 拒绝故障,远离“背锅侠”的 10 大法宝利器!
- windows mysql5.719_Window Mysql 5.7.18安装
- ssm毕设项目我为群众办实事资料管理系统58g55(java+VUE+Mybatis+Maven+Mysql+sprnig)
- 双十一剁手快,ERP系统不能慢
- 计算机网络管理的模型结构,计算机网络体系结构及协议之基本参考模型
- 使用Java调取C++动态库
- imx6ull使用Unique ID配置网卡MAC地址
- 旭宏建材租赁管理系统 官方
- 等待分类与解决基本流程
- 【科研论文】基于ODMA和L-PLC技术的楼宇自动化系统的设计和研究(W7100A)