首页 > 数据库技术 > 详细

spring jdbc

时间:2019-08-13 14:56:39      阅读:73      评论:0      收藏:0      [点我收藏+]

一。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的了解。

 

spring jdbc

原文:https://www.cnblogs.com/fymc/p/11344268.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!