Spring JDBC模块的作用
Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作。使得开发人员可以从繁琐操作中解脱,从而将更多的家里投入到编写业务逻辑当中。
JdbcTemplate的解析
针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础。
JdbcTemplate类是Spring JDBC 的核心类。
DataSource
其主要功能是获取数据库连接,还可以引入对数据库连接的缓冲池和分布式事务的支持,它可以访问数据库资源的标准接口。
SQLExceptionTranslator
该接口负责对SQLException进行转译工作。通过必要的设置获取SQLExceptionTranslator中的方法,可以使JdbcTemplate在需要处理SQLException时,委托SQLExceptionTranslator的实现类来完成相关的转译工作。
JdbcOperations接口
定义了在JdbcTemplate类中可以使用的操作集合,包括增删改查操作。
Spring JDBC模块
该模块主要有四个包组成:
- 核心包:core
- 数据源包:DataSource
- 对象包:object
- 支持包:support
Spring JDBC 的配置
了解了Spring JDBC模块之后,我们知道Spring对数据库的操作都封装在几个包中而想要使用Spring JDBC
所以我们需要对其进行配置如下:
步骤:
第一步:实例化DataSource,实现对数据库连接池的配置
第二步:实例化JDBC模板(即JdbcTemplate接口),并将DataSource注入进去
第三步:配置需要实例化的bean ,将JDBC模板注入到该实例中
<!--先在xml配置文件中注入DataSource,实现数据库连接池的配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--注入驱动-->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<!--配置数据源所在地址-->
<property name="url" value="jdbc:mysql://localhost:3306/data?characterEncoding=utf8"/>
<!--数据库用户名-->
<property name="username" value="root"/>
<!--数据库密码-->
<property name="password" value="gxtgxt123"/>
</bean>
<!--配置JDBC模板(JdbcTemplate接口)-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--将数据库连接池注入到JDBC模板中-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--在spring配置文件中开启组件扫描-->
<context:component-scan base-package="包名"/>
需要注意的是:配置数据库连接池的时候,对于注入到DataSource数据源内部的数据(包括:数据库驱动,数据库用户名,数据库密码…),我们一般将其与xml配置文件分开,便于后期对于程序的维护。
- 那我们一个这么怎么实现这个解耦的操作呢?
- 我们可以在resources内创建一个properties类型的文件,
- 然后将注入数据源内的数据保存在这个文件内
- 在xml文件中加载对应的properties类型的文件
- 然后再在xml的DataSource内来引用这些数据,实现连接池。
创建jdbc.properties文件
//数据库驱动
jdbc.daiver=com.mysql.cj.jdbc.Driver
//数据源地址
jdbc.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8
//数据库用户名
jdbc.user=root
//数据库用户密码
jdbc.possword=rood
对应的在xml内的配置:
<!--加载jdbc.properties文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置DataSource内的连接池-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--注入驱动-->
<property name="driverClassName" value="${jdbc.driver}"/>
<!--配置数据源所在地址-->
<property name="url" value="${jdbc.url}"/>
<!--数据库用户名-->
<property name="username" value="${jdbc.uesr}"/>
<!--数据库密码-->
<property name="password" value="${jdbc.possword}"/>
</bean>
增删改
//调用jdbcTemplate对象的update()方法来实现增删改操作
updata(String sql,Object ... args)
/*这个方法有两个参数:
第一个:sql语句
第二个:可变参数,设置sql语句值,不规定参数的个数
*/
查询
- 查询返回某个值
//当我们查询表里有多少个记录的情况下,返回的就是某个值
//调用queryForObject()方法来实现查询
queryForObject(String sql,Class<?> requiredType)
/*
两个参数:
第一个:sql 语句
第二个:返回值的类型:例如--->Integer.class
*/
- 查询返回对象
//依然是使用queryForObject()方法,但参数有三个
queryForObject(String sql,RowMapper<T> rowMapper,Object... args)
/*
第一个参数:sql语句
第二个语句:RowMapper-->本身是一个接口。当返回不同类型的数据,使用这个接口的实现类可以完成数据的封装
第三个参数:sql语句中对应的"?"的值
*/
//例子:
Book book=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
//这种查询的返回值类型对应第二个参数里面指定的对象类型,但是得提前定义好用来封装的数据类
- 查询返回集合
//调用query()方法
query(String sql,RowMapper<T> rowMapper,Object... args)
/*
第一个参数:sql语句
第二个语句:RowMapper-->本身是一个接口。当返回不同类型的数据,使用这个接口的实现类可以完成数据的封装
第三个参数:sql语句中对应的"?"的值
*/
//这种查询的返回值类型对应第二个参数里面指定的对象类型的一个集合,但是得提前定义好用来封装的数据类
//返回一个集合!!!!!!!!!!!!!!!!!
对数据库的批量操作
- 批量操作指的是:操作表里的多条记录;
- ------>批量删除,批量修改…
批量添加
-
使用batchUpdate(String sql,List<Object[]> batchArges)方法实现对数据库的批量添加 有两个参数:
第一个:sql语句
第二个:List集合,如果我们添加多条记录,便将记录放到一个集合内,实现批量操作
批量修改
- 使用batchUpdate(String sql,List<Object[]> batchArges)方法实现对数据库的批量修改 有两个参数:
第一个:sql语句
第二个:List集合,对应sql语句内"?"的值
批量删除
- 使用batchUpdate(String sql,List<Object[]> batchArges)方法实现对数据库的批量删除 有两个参数:
第一个:sql语句
第二个:List集合,对应sql语句内"?"的值