Spring Boot如何使用JDBC获取相关的数据详解
什么是JDBC
JavaDatabaseConnectivity是一种用于执行SQL语句的JavaAPI,与数据库建立连接、发送操作数据库的语句并处理结果。
SpringBoot使用JDBC
增加依赖
修改pom.xml:将dependecies修改为如下两个
org.springframework.boot spring-boot-starter-jdbc com.h2database h2
创建Customer.java类
packagecom.example.kane.Model; publicclassCustomer{ privatelongid; privateStringfirstName,lastName; publicCustomer(longid,StringfirstName,StringlastName){ this.id=id; this.firstName=firstName; this.lastName=lastName; } @Override publicStringtoString(){ returnString.format( "Customer[id=%d,firstName='%s',lastName='%s']", id,firstName,lastName); } //getters&settersomittedforbrevity }
修改Application类
packagecom.example.kane; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.boot.CommandLineRunner; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.web.client.RestTemplateBuilder; importorg.springframework.context.annotation.Bean; importorg.springframework.jdbc.core.JdbcTemplate; importorg.springframework.scheduling.annotation.EnableScheduling; importjava.util.Arrays; importjava.util.List; importjava.util.stream.Collectors; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.web.client.RestTemplate; importcom.example.kane.Model.Customer; @SpringBootApplication //@EnableScheduling publicclassRestfulWebService1ApplicationimplementsCommandLineRunner{ privatestaticfinalLoggerlog=LoggerFactory.getLogger(RestfulWebService1Application.class); publicstaticvoidmain(Stringargs[]){ SpringApplication.run(RestfulWebService1Application.class,args); } @Autowired JdbcTemplatejdbcTemplate; @Override publicvoidrun(String...strings)throwsException{ log.info("Creatingtables"); jdbcTemplate.execute("DROPTABLEcustomersIFEXISTS"); jdbcTemplate.execute("CREATETABLEcustomers("+ "idSERIAL,first_nameVARCHAR(255),last_nameVARCHAR(255))"); //Splitupthearrayofwholenamesintoanarrayoffirst/lastnames List
运行项目看结果
2019-03-0114:19:52.078 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :Creatingtables
2019-03-0114:19:52.086 INFO7436---[ restartedMain]com.zaxxer.hikari.HikariDataSource :HikariPool-1-Starting...
2019-03-0114:19:52.392 INFO7436---[ restartedMain]com.zaxxer.hikari.HikariDataSource :HikariPool-1-Startcompleted.
2019-03-0114:19:52.429 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :InsertingcustomerrecordforJohnWoo
2019-03-0114:19:52.430 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :InsertingcustomerrecordforJeffDean
2019-03-0114:19:52.430 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :InsertingcustomerrecordforJoshBloch
2019-03-0114:19:52.430 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :InsertingcustomerrecordforJoshLong
2019-03-0114:19:52.461 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :Queryingforcustomerrecordswherefirst_name='Josh':
2019-03-0114:19:52.480 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :Customer[id=3,firstName='Josh',lastName='Bloch']
2019-03-0114:19:52.480 INFO7436---[ restartedMain]c.e.kane.RestfulWebService1Application :Customer[id=4,firstName='Josh',lastName='Long']
2019-03-0114:20:01.122 INFO7436---[nio-8080-exec-5]o.a.c.c.C.[Tomcat].[localhost].[/] :InitializingSpringDispatcherServlet'dispatcherServlet'
2019-03-0114:20:01.123 INFO7436---[nio-8080-exec-5]o.s.web.servlet.DispatcherServlet :InitializingServlet'dispatcherServlet'
2019-03-0114:20:01.146 INFO7436---[nio-8080-exec-5]o.s.web.servlet.DispatcherServlet :Completedinitializationin22ms
说明
官网的例子,没有配置JDBCTemplate的Datasource,默认使用的是H2的内存存储的数据库,只能当做测试使用。下面会有介绍更改DataSource的方法
介绍下CommandLineRunner
功能
在项目启动后,执行执行功能,我们可以定一个类,去实现CommandLineRunner接口,重写run方法,执行一部分操作。需要注意的是,定义类必须标记为Spring管理的组件
测试类
packagecom.example.kane.Model; importorg.springframework.boot.CommandLineRunner; importorg.springframework.core.annotation.Order; importorg.springframework.stereotype.Component; @Component @Order(value=1)//因为可能有许多事情要做,Order可以根据大小,判读执行的顺序 publicclassrun_after_applicationimplementsCommandLineRunner{ @Override publicvoidrun(String...args)throwsException{ //TODOAuto-generatedmethodstub System.out.println("-----------------------"); } }
介绍下JdbcTempalte
在JDBC核心包中,JdbcTemplate是主要的类,简化了JDBC的使用,避免了一些常规错误。它能够执行JDBC核心流程,在应用代码之上提供SQL语句、导出结果。这个类执行SQL查询、更新、对结果集重复操作捕获JDBC的异常。并将它翻译成org.springframework.dao包中定义的基本的、信息量更大的异常层次结构。
JDBC构造方法
JdbcTemplate()
//为Bean创建一个JdbcTemplate以供使用 //再没配置DataSource的情况下springboot提供了一些嵌入式的数据库支持,上面的例子使用的就是H2数据库,是一个内存的数据库
JdbcTemplate(javax.sql.DataSourcedataSource)
//构造的时候传入一个DataSource,来获取链接 //JdbcTemplateSpringboot默认链接的是H2database,
在springboot中配置mysql数据库
数据库配置类db_config
packagecom.example.kane.config; importorg.apache.commons.dbcp.BasicDataSource; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importjavax.sql.DataSource; @Configuration publicclassdb_config{ //这个类是一个Config类 @Value("${db.driver}") privateStringDRIVER; @Value("${db.password}") privateStringPASSWORD; @Value("${db.url}") privateStringURL; @Value("${db.username}") privateStringUSERNAME; @Bean publicDataSourcedataSource1(){ BasicDataSourcedataSource=newBasicDataSource(); dataSource.setDriverClassName(DRIVER); dataSource.setUrl(URL); dataSource.setUsername(USERNAME); dataSource.setPassword(PASSWORD); returndataSource; } }
application.properties
#Database #mysqljdbc连接驱动 db.driver:com.mysql.cj.jdbc.Driver db.url:jdbc:mysql://localhost:3306/test db.username:root db.password:root
pom.xml
commons-dbcp commons-dbcp 1.4 mysql mysql-connector-java runtime
application启动类修改
@Autowired JdbcTemplatejdbcTemplate; //下面是加载了数据库的配置。只需要增加这个 @Autowired db_configdb_config;
运行程序后会发现数据存储到本地数据库
SELECT*fromcustomers; ------------------------ 1JohnWoo 2JeffDean 3JoshBloch 4JoshLong
另一个简单的方法配置mysql数据库
直接修改application.properties
#database spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
将properties改成yml文件application.yml
spring: datasource: url:jdbc:mysql://localhost:3306/test username:root password:root driver-class-name:com.mysql.cj.jdbc.Driver
注:这两种方式又回归到配置文件的方式了,
JDBCTemplate常用方法
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
- 参考官网https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html
关于连接池的一些内容
为什么要使用数据库连接池?
因为建立数据库连接是一个非常耗时的过程,使用连接池可以预先同数据库建立连接,放在内存中。应用需要使用数据库的时候直接使用连接池中的连接即可。
当前三大主流连接池
- DBCP:提供最大空闲连接数,超过连接全部自动断开连接,其他两个没有。
- C3P0:提供最大空闲连接时间,这样可以做到自动收回空闲连接的机制
- Druid:阿里出品的,同样提供最大的空闲连接时间
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。