网站建设课程简介图片,公司邮箱怎么查询,南宁网站设计多少钱一个,西安seo公司#x1f648;作者简介#xff1a;练习时长两年半的Java up主 #x1f649;个人主页#xff1a;程序员老茶 #x1f64a; ps:点赞#x1f44d;是免费的#xff0c;却可以让写博客的作者开心好久好久#x1f60e; #x1f4da;系列专栏#xff1a;Java全栈#xff0c;… 作者简介练习时长两年半的Java up主 个人主页程序员老茶 ps:点赞是免费的却可以让写博客的作者开心好久好久 系列专栏Java全栈计算机系列火速更新中 格言种一棵树最好的时间是十年前其次是现在 动动小手点个关注不迷路感谢宝子们一键三连 目录 课程名Java内容/作用知识点/设计/实验/作业/练习学习SpringBoot的数据层解决方案SpringBoot的数据层解决方案一、SQL1、数据源技术2、持久化技术3、数据库技术 课程名Java
内容/作用知识点/设计/实验/作业/练习
学习SpringBoot的数据层解决方案
SpringBoot的数据层解决方案
好久不见从这里开始不再是单纯的在springboot内部搞事情了要涉及到很多相关知识。本章节主要内容都是和数据存储与读取相关前期学习的知识与数据层有关的技术基本上都围绕在数据库这个层面上所以本章要讲的第一个大的分支就是SQL解决方案相关的内容除此之外数据的来源还可以是非SQL技术相关的数据操作因此第二部分围绕着NOSQL解决方案讲解。至于什么是NOSQL解决方案讲到了再说吧。下面就从SQL解决方案说起。
一、SQL
回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术MySQL数据库与MyBatisPlus框架后面又学了Druid数据源的配置所以现在数据层解决方案可以说是MysqlDruidMyBatisPlus。而三个技术分别对应了数据层操作的三个层面
数据源技术Druid持久化技术MyBatisPlus数据库技术MySQL
下面的研究就分为三个层面进行研究对应上面列出的三个方面咱们就从第一个数据源技术开始说起。
1、数据源技术
目前我们使用的数据源技术是Druid运行时可以在日志中看到对应的数据源初始化信息具体如下
INFO 28600 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
INFO 28600 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited 如果不使用Druid数据源程序运行后是什么样子呢是独立的数据库连接对象还是有其他的连接池技术支持呢将Druid技术对应的starter去掉再次运行程序可以在日志中找到如下初始化信息
INFO 31820 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
INFO 31820 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 虽然没有DruidDataSource相关的信息了但是我们发现日志中有HikariDataSource这个信息就算不懂这是个什么技术看名字也能看出来以DataSource结尾的名称这一定是一个数据源技术。我们又没有手工添加这个技术这个技术哪里来的呢这就是这一节要讲的知识springboot内嵌数据源。
数据层技术是每一个企业级应用程序都会用到的而其中必定会进行数据库连接的管理。springboot根据开发者的习惯出发开发者提供了数据源技术就用你提供的开发者没有提供那总不能手工管理一个一个的数据库连接对象啊怎么办我给你一个默认的就好了这样省心又省事大家都方便。
springboot提供了3款内嵌数据源技术分别如下
HikariCPTomcat提供DataSourceCommons DBCP
第一种HikartCP这是springboot官方推荐的数据源技术作为默认内置数据源使用。啥意思你不配置数据源那就用这个。
第二种Tomcat提供的DataSource如果不想用HikartCP并且使用tomcat作为web服务器进行web程序的开发使用这个。为什么是Tomcat不是其他web服务器呢因为web技术导入starter后默认使用内嵌tomcat既然都是默认使用的技术了那就一用到底数据源也用它的。有人就提出怎么才能不使用HikartCP用tomcat提供的默认数据源对象呢把HikartCP技术的坐标排除掉就OK了。
第三种DBCP这个使用的条件就更苛刻了既不使用HikartCP也不使用tomcat的DataSource时默认给你用这个。
springboot这心操的也是稀碎啊就怕你自己管不好连接对象给你一顿推荐真是开发界的最强辅助。既然都给你奶上了那就受用吧怎么配置使用这些东西呢之前我们配置druid时使用druid的starter对应的配置如下
spring:datasource:druid: url: jdbc:mysql://localhost:3306/ssm_db?serverTimezoneUTCdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root 换成是默认的数据源HikariCP后直接吧druid删掉就行了如下
spring:datasource:url: jdbc:mysql://localhost:3306/ssm_db?serverTimezoneUTCdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root 当然也可以写上是对hikari做的配置但是url地址要单独配置如下
spring:datasource:url: jdbc:mysql://localhost:3306/ssm_db?serverTimezoneUTChikari:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root 这就是配置hikari数据源的方式。如果想对hikari做进一步的配置可以继续配置其独立的属性。例如
spring:datasource:url: jdbc:mysql://localhost:3306/ssm_db?serverTimezoneUTChikari:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootmaximum-pool-size: 50 如果不想使用hikari数据源使用tomcat的数据源或者DBCP配置格式也是一样的。学习到这里以后我们做数据层时数据源对象的选择就不再是单一的使用druid数据源技术了可以根据需要自行选择。
总结
springboot技术提供了3种内置的数据源技术分别是Hikari、tomcat内置数据源、DBCP
2、持久化技术
说完数据源解决方案再来说一下持久化解决方案。springboot充分发挥其最强辅助的特征给开发者提供了一套现成的数据层技术叫做JdbcTemplate。其实这个技术不能说是springboot提供的因为不使用springboot技术一样能使用它谁提供的呢spring技术提供的所以在springboot技术范畴中这个技术也是存在的毕竟springboot技术是加速spring程序开发而创建的。
这个技术其实就是回归到jdbc最原始的编程形式来进行数据层的开发下面直接上操作步骤
步骤①导入jdbc对应的坐标记得是starter
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId
/dependency步骤②自动装配JdbcTemplate对象
SpringBootTest
class Springboot15SqlApplicationTests {Testvoid testJdbcTemplate(Autowired JdbcTemplate jdbcTemplate){}
}步骤③使用JdbcTemplate实现查询操作非实体类封装数据的查询操作
Test
void testJdbcTemplate(Autowired JdbcTemplate jdbcTemplate){String sql select * from tbl_book;ListMapString, Object maps jdbcTemplate.queryForList(sql);System.out.println(maps);
}步骤④使用JdbcTemplate实现查询操作实体类封装数据的查询操作
Test
void testJdbcTemplate(Autowired JdbcTemplate jdbcTemplate){String sql select * from tbl_book;RowMapperBook rm new RowMapperBook() {Overridepublic Book mapRow(ResultSet rs, int rowNum) throws SQLException {Book temp new Book();temp.setId(rs.getInt(id));temp.setName(rs.getString(name));temp.setType(rs.getString(type));temp.setDescription(rs.getString(description));return temp;}};ListBook list jdbcTemplate.query(sql, rm);System.out.println(list);
}步骤⑤使用JdbcTemplate实现增删改操作
Test
void testJdbcTemplateSave(Autowired JdbcTemplate jdbcTemplate){String sql insert into tbl_book values(3,springboot1,springboot2,springboot3);jdbcTemplate.update(sql);
} 如果想对JdbcTemplate对象进行相关配置可以在yml文件中进行设定具体如下
spring:jdbc:template:query-timeout: -1 # 查询超时时间max-rows: 500 # 最大行数fetch-size: -1 # 缓存行数总结
SpringBoot内置JdbcTemplate持久化解决方案使用JdbcTemplate需要导入spring-boot-starter-jdbc的坐标
3、数据库技术
截止到目前springboot给开发者提供了内置的数据源解决方案和持久化解决方案在数据层解决方案三件套中还剩下一个数据库莫非springboot也提供有内置的解决方案还真有还不是一个三个这一节就来说说内置的数据库解决方案。
springboot提供了3款内置的数据库分别是
H2HSQLDerby
以上三款数据库除了可以独立安装之外还可以像是tomcat服务器一样采用内嵌的形式运行在spirngboot容器中。内嵌在容器中运行那必须是java对象啊对这三款数据库底层都是使用java语言开发的。
我们一直使用MySQL数据库就挺好的为什么有需求用这个呢原因就在于这三个数据库都可以采用内嵌容器的形式运行在应用程序运行后如果我们进行测试工作此时测试的数据无需存储在磁盘上但是又要测试使用内嵌数据库就方便了运行在内存中该测试测试该运行运行等服务器关闭后一切烟消云散多好省得你维护外部数据库了。这也是内嵌数据库的最大优点方便进行功能测试。
下面以H2数据库为例讲解如何使用这些内嵌数据库操作步骤也非常简单简单才好用嘛
步骤①导入H2数据库对应的坐标一共2个
dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactId
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId
/dependency步骤②将工程设置为web工程启动工程时启动H2数据库
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency步骤③通过配置开启H2数据库控制台访问程序也可以使用其他的数据库连接软件操作
spring:h2:console:enabled: truepath: /h2 web端访问路径/h2访问密码123456如果访问失败先配置下列数据源启动程序运行后再次访问/h2路径就可以正常访问了
datasource:url: jdbc:h2:~/testhikari:driver-class-name: org.h2.Driverusername: sapassword: 123456步骤④使用JdbcTemplate或MyBatisPlus技术操作数据库
略
其实我们只是换了一个数据库而已其他的东西都不受影响。一个重要提醒别忘了上线时把内存级数据库关闭采用MySQL数据库作为数据持久化方案关闭方式就是设置enabled属性为false即可。
总结
H2内嵌式数据库启动方式添加坐标添加配置H2数据库线上运行时请务必关闭
到这里SQL相关的数据层解决方案就讲完了现在的可选技术就丰富的多了。
数据源技术Druid、Hikari、tomcat DataSource、DBCP持久化技术MyBatisPlus、MyBatis、JdbcTemplate数据库技术MySQL、H2、HSQL、Derby
现在开发程序时就可以在以上技术中任选一种组织成一套数据库解决方案了。
往期专栏Java全栈开发数据结构与算法计算机组成原理操作系统数据库系统物联网控制原理与技术