spring jdbc
一。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方式
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" > (2)Java配置方式 @Configuration @PropertySource("classpath:db/jdbc2.properites")//引入属性配置 public class DbConfig{ @Value("${driverClassName}")//获取属性值 private String driverClassName; 3.嵌入式数据库 spring提供了内部的数据库,可以不依赖外部第三方数据库,比如mysql等。一般用于本地开发或单元测试。 (1)XML配置 (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 只支持将行映射到单个域对象。 方法 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 允许将查询字符串和mapRow()方法一起封装到一个类中。 首先使用数据源和查询语句来设置父类 然后实现mapRow()设置自己的映射方法。 (2)SqlUpdate 封装任何sql更新语句 (3)BatchSqlUpdate 批量执行更新 (4)SqlFunction 允许使用参数和返回类型调用数据库中的存储函数。 (5)使用注解来设置JDBC DAO @Repository作为@Component注解的特化版,标识一个用于数据库操作的bean。 @Resource让spring自动注入数据源。 总结: 以上是JDBC的相关知识,以及spring中如何实现JDBC已经如何应用,到目前为止了解到的用法是使用jdbcTemplate的相关建模对象来操作数据库。但是,实际生产中我们很少直接使用这种方式,一般会引用第三方开发库,比如MyBatis。不过了解一下上面的内容也有助于后面对mybatis的了解。