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)相关推荐

  1. springboot整合持久层技术

    springboot整合持久层技术 整合jdbcTemplate 1.依赖导入 <?xml version="1.0" encoding="UTF-8"? ...

  2. 【SpringBoot】SpringBoot——整合持久层技术

    文章目录 5. 整合持久层技术 5.1 整合JdbcTemplate 5.2 整合MyBatis 5.3 Spring Data JPA 5.3.1 JPA.Spring Data.Spring Da ...

  3. mybatis generator 中文注释_[SpringBoot2.X] 23- 整合持久层技术 -MyBatis - 配置

    整合MyBatis 1搭建项目环境 1.1.1创建项目--略 11.2修改POM文件,添加相关依赖 <dependency><groupId>org.springframewo ...

  4. [Spring Boot 2]整合持久层技术

    持久层技术,简单来说,就是通过操纵对象来操作数据库.(具体见前言部分) 本期博客继续深入Spring Boot技术,值得一提的是,尽管Spring Boot操作起来还是不错的,看都看明白,但还是强烈建 ...

  5. Java持久层框架之mybatis使用

    一.什么是框架,框架从何而来,为什么使用框架? 框架(framework): 1.是一系列jar包,其本质是对JDK功能的拓展.(jar包,jar:class文件的压缩包) 2.框架是一组程序的集合, ...

  6. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  7. 关于springboot持久层框架mybatis+jpa组合使用

    一.简介 JPA和MyBatis各有各的好处,混合食用效果更佳.(hibernate是面向对象的,而MyBatis是面向关系的) 个人总结(总结自己的理解) 1.表关联较多的项目,优先使用mybati ...

  8. springboot整合持久层技术(mysql驱动问题)

    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  9. 【Spring 持久层】Spring 与 Mybatis 整合

    持久层 持久层整合总述 Mybatis 开发步骤回顾 Mybatis 开发中存在的问题 Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 Spring 与 ...

  10. JavaWeb(四)——MyBatis(持久层框架)

    Mybatis--持久层框架(用于简化JDBA) Mybatis概述 Mybatis概念 JDBC 缺点 Mybatis 优化 Mybatis快速入门 创建user表,添加数据 创建模块,导入坐标(p ...

最新文章

  1. 达摩院NLP团队斩获六项世界冠军背后,让AI没有难懂的语言
  2. Datawhale面经项目来了!
  3. word2vec原理浅析
  4. eclipse中的汉字极小的解决方案(转载)
  5. Taro+react开发(90):列表渲染key值
  6. NIPS 2018 接收论文list 完整清单
  7. netty 权威指南~第11章——WebSoket协议开发
  8. 支付交易相关接口文档对接
  9. BOOST升压有源功率因数校正
  10. lesson 12 goodbye and good luck 再见,一路顺风-将来时态-early in the morning
  11. JAVA的面向对象编程
  12. 如何查看自己电脑应该买什么样的内存条
  13. [开发]resin+spring+struts配搭在线上常见的三个问题
  14. 解决-使用html2canvas截取页面时,页面的div背景图无法截取并跨域
  15. 我的Java学习之路(第十六天)----- Java实现杨辉三角
  16. mkv封装字幕乱码问题
  17. CCD、CMOS和像素
  18. 【案例】天津滨海农商行:基于大数据风控的移动互联网个人快贷系统——滨e贷
  19. 好玩有趣的初音未来的居合斩游戏HTML源码
  20. 用钩子函数实现鼠标动作录制

热门文章

  1. 拒绝故障,远离“背锅侠”的 10 大法宝利器!
  2. windows mysql5.719_Window Mysql 5.7.18安装
  3. ssm毕设项目我为群众办实事资料管理系统58g55(java+VUE+Mybatis+Maven+Mysql+sprnig)
  4. 双十一剁手快,ERP系统不能慢
  5. 计算机网络管理的模型结构,计算机网络体系结构及协议之基本参考模型
  6. 使用Java调取C++动态库
  7. imx6ull使用Unique ID配置网卡MAC地址
  8. 旭宏建材租赁管理系统 官方
  9. 等待分类与解决基本流程
  10. 【科研论文】基于ODMA和L-PLC技术的楼宇自动化系统的设计和研究(W7100A)