一。JDBC基础
JDBC为Java应用程序访问存储在数据库中的数据提供了一种标准方式。
JDBC基础结构的核心是针对每个数据库的驱动程序(运行Java代码访问数据库的驱动程序)。一旦加载驱动程序,就会注册java.sql.DriverManager类。这个类管理驱动程序列表并提供建立与数据库连接的静态方法。DriverManager的getConnection()方法返回驱动程序实现的java.sql.connection接口。该接口允许针对数据库运行SQL语句。
使用方式1.
加载驱动,获取连接,使用连接执行sql,然后出来返回的结果集。
二。spring JDBC基础
1.核心包
(1)org.springframework.jdbc.core
包含JDBC类的基础,JdbcTemplate,简化了使用JDBC编写数据库操作的过程。
(2)org.springframework.jdbc.datasource
包含辅助类和DataSource实现,可以用来在JEE容器外运行JDBC代码。几个子包提供了对嵌入式数据库,数据库初始化和各种数据源查找机制的支持。
(3)org.springframework.jdbc.object
包含有助于将数据库返回数据转换为对象或对象列表的类。
(4)org.springframework.jdbc.support
该包中最重要的类是SQLException翻译支持。
(5)org.springframework.jdbc.config
该包包含支持spring的ApplicationContext中JDBC配置的类。
2.数据库连接和数据源
可以提供一个实现了javax.sql.DataSource的bean,从而使用spring来帮助管理数据库连接。
DataSource和Connection的区别:DataSource可以提供并管理Connection,简单点说就是DataSource封装了Connection。
DataSource实现类:
(1)DriverManagerDataSource(org.springframework.jdbc.datasource包)
(2)SimpleDriverDataSource(org.springframework.jdbc.datasource包)
(3)BasicDataSource(org.apache.commons.dbcp2包)
DataSource配置方式
(1)xml方式
<bean id="dataSource" Class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"
<context:property-placeholder location="classpath:db/jdbc.properties"> //获取配置方式一
<util:properties id = ‘jdbc‘ location="classpath:db/jdbc.properties">//获取配置方式二,使用util命名空间,这种方式会创建一个名称为jdbc的bean,并把配置中的属性都放到这个bean中,所以使用这种方式上面变量引用要把前缀jdbc去掉。
>
(2)Java配置方式
@Configuration
@PropertySource("classpath:db/jdbc2.properites")//引入属性配置
public class DbConfig{
@Value("${driverClassName}")//获取属性值
private String driverClassName;
}
3.嵌入式数据库
spring提供了内部的数据库,可以不依赖外部第三方数据库,比如mysql等。一般用于本地开发或单元测试。
(1)XML配置
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:db/h2/schema.sql">//创建schema
<jdbc:script location="classpath:db/h2/test-data.sql">//填充数据
</jdbc:embedded-database>
(2)Java配置方式
@Configuration
public class EmbeddedJdbcConfig {
@Bean
public DataSource dataSource(){
EmbeddedDatabaseBuilder dbBuilder = new EmbeddedDatabaseBuilder();
return dbBuilder.setType(EmbeddedDatabaseType.H2).addScripts("classpath:db/h2/schema.sql","classpath.db/h2/test-data.sql").build();
}
}
4.异常处理
Spring提供了SQLExceptionTranslator接口的默认实现来把通用SQL错误代码转换为Spring JDBC异常。一般用默认就可以,如果不够可以扩展这个类。
异常类需要设置到JdbcTemplate中使用。
5.JdbcTemplate类
一般很少使用database直接进行数据库操作,这样比较麻烦而且容易出错。spring 提供了JdbcTemplate来进行数据库操作。
JdbcTemplate类允许向数据库发出任何类型的sql并返回任何类型的结果。它是对datasource的进一步封装,通知扩展了功能。
比如NamedParameterJdbcTemplate可以使用自定义的名称代替sql中的占位符,方便对应参数值。
核心方法:
query(sql, parameters, returnType);
第一个参数是需要执行的sql,里面可能有占位符
第二个参数是传入的参数,替换第一个参数里的占位符。
第三个参数是返回的类型。
为了方便的把查询到的记录映射为对象,Spring提供了以下接口,只需要把接口实现类添加到上面的第三个参数即可。
(1)RowMapper<T>接口
只支持将行映射到单个域对象。
方法
public Singer mapRwo(ResultSet rs, int rowNum) throws SQLException{
Singer singer = new Singer();
singer.setId(rs.getLong("id"));//rs是一行数据。
。。。。
}
lambda表达式的使用
jdbcTemplate.query(sql, (rs,rowNum)->{//调用接口的地方实现接口
Singer singer = new Singer();
singer.setId(rs.getLong("id"));//rs是一行数据。
。。。。
})
(2)ResultSetExtractor
支持嵌套域对象,比如对象中的一个属性是其他对象的集合。
6.建模JDBC的spring类
(1)MappingSqlQuery<T>
允许将查询字符串和mapRow()方法一起封装到一个类中。
首先使用数据源和查询语句来设置父类
然后实现mapRow()设置自己的映射方法。
(2)SqlUpdate
封装任何sql更新语句
(3)BatchSqlUpdate
批量执行更新
(4)SqlFunction<T>
允许使用参数和返回类型调用数据库中的存储函数。
(5)使用注解来设置JDBC DAO
@Repository作为@Component注解的特化版,标识一个用于数据库操作的bean。
@Resource让spring自动注入数据源。
总结:
以上是JDBC的相关知识,以及spring中如何实现JDBC已经如何应用,到目前为止了解到的用法是使用jdbcTemplate的相关建模对象来操作数据库。但是,实际生产中我们很少直接使用这种方式,一般会引用第三方开发库,比如MyBatis。不过了解一下上面的内容也有助于后面对mybatis的了解。
原文:https://www.cnblogs.com/fymc/p/11344268.html