Spring jdbc
- Spring jdbc模块负责 数据库资源管理和错误处理
Spring jdbcTemplate解析
- Spring框架提供了 jdbcTemplate类 可以说是 Spring jdbc的核心类
- jdbcTemplate 直接父类 jdbcAccessor,为子类提供了,访问数据库的公共属性。
- 1,DataSource:主要功能是获得数据库的连接。
- 2,SQLExceptionTranslator:处理异常
- jdbcTemplate 实现类 jdbcOperatiions:该接口定义了在jdbcTemplate类中 可以使用的操作集合,包括添加,修改,查询,删除,等操作。
- jdbcTemplate 直接父类 jdbcAccessor,为子类提供了,访问数据库的公共属性。
Spring jdbc配置
-
Spring jdbc模块主要由4个包组成,Spring对数据库的操作都封装在这几个包当中,要想使用Spring jdbc就要对这几个包进行配置
- 1,core:包含jdbc的核心功能,包括jdbcTemplate类…
- 2,dataSource:访问数据可的实用工具类,它有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码。
- 3,object:以面对对象的方式,访问数据库,它允许执行查询 并返回结果作为业务对象,可以在数据表的列和业务对象的属性之间映射查询结果。
- 4,support:包含core和object的支持类。- 配置模板如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <!-- //配置数据源 --> <bean id="dataSource" class= "org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 数据库驱动 --> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <!-- 链接数据库的URL --> <property name="url" value="jdbc:mysql://localhost:3306/spring"/> <!-- 连接数据库的用户名 --> <property name= "username" value="root"/> <!-- 连接数据库的密码 --> <property name="password" value="123456"/> </bean> <!-- jdbcTemplate 模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--默认必须使用数据源 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置注入bean --> <bean id="xxx" class="xxx"> <property name="JdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans>
- 注意:
- org.springframework.jdbc.datasource.DriverManagerDataSource,该类用于对数据源进行配置
- URL地址MySQL5和MySQL8可能会有出入,其中jdbc是协议,mysql是子协议,localhost是数据库ip地址,3306是端口号,spring是数据库名。
- org.springframework.jdbc.core.JdbcTemplate,该类定义看jdbcTemplate中的相关配置
- 定义jdbcTemplate时,需将dataSource注入到jdbcTemplate中,而其他需要使用jdbcTemplate时,也需要将jdbcTemplate注入到需要的bean中。
Spring jdbc的常用方法
execute()
- excute(String sql) 方法可以直接完成执行SQL语句
update()
- update()方法,可以完成 插入,修改,删除的操作。在jdbcTemplate类中提供了一系列的update()方法。
package com.wuyuandu.dao;
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
public class AccountDaoImpl implements AccountDao {
//获得jdbcTemplate
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/*插入
* int update(String sql,Object... args)
* 通过Object传入参数 执行SQL语句
*/
public int add(Account account) {
String sql = "insert into Account(username,id) value(?,?)";
int num = this.jdbcTemplate.update
(sql,new Object[] {account.getUsername(),account.getId()});
return num;
}
//删除 直接通过参数 执行SQL语句
public int delete(int id) {
// TODO Auto-generated method stub
String sql = "delete from account where id=?";
int num = this.jdbcTemplate.update(sql,id);
return num;
}
query()
- JdbcTemplate类中还提供了大量的query()方法来处理各种对数据库表的查询操作
/*查询
* List query(String sql, RowMapper rowMapper)
* 执行 String类型参数提供的 SQL语句,并通过RowMapper返回一个List类型的结果
*/
public List<Account> select() {
// TODO Auto-generated method stub
String sql = "select * from account";
List<Account> list = this.jdbcTemplate.query
(sql,new BeanPropertyRowMapper<Account>(Account.class));
return list;
}
/*
* List query ( String sql, Object[] args, RowMapper rowMapper)
* 使用 Object[]的值来设置 SQL语句中的参数值,采用RowMapper回调方法,可以直接返回List类型的数据
*/
public List<Account> select(Account account) {
// TODO Auto-generated method stub
String sql = "select * from account where id=? and username=?";
List<Account> list = this.jdbcTemplate.query
(sql,new Object[] {account.getId(),account.getUsername()},new BeanPropertyRowMapper<Account>(Account.class));
return list;
}
/*
* queryForObject(String sql, RowMapper rowMapper,Object. .. args)
* 将args参数绑定到 SQL 语句中,并通过 RowMapper返回一个 Object 类型的单行记录
* 只能是8大基本类型中 不知道String可不可以
*/
public int select(Account account) {
// TODO Auto-generated method stub
String sql = "select count(*) from Account where id=? and username=?";
int num = this.jdbcTemplate.queryForObject
(sql,Integer.class,new Object[] {account.getId(),account.getUsername()});
return num;
}
/*
* queryForObject(String sql, RowMapper rowMapper)
* 通过 RowMapper返回一个 Object 类型的单行记录
* 只能是8大基本类型中 不知道String可不可以
*/
public int select(int id) {
// TODO Auto-generated method stub
String sql = "select count(*) from Account where id=?";
int num = this.jdbcTemplate.queryForObject
(sql,Integer.class,id);
return num;
}