Spring JDBC

Spring JDBC

Spring JDBC是什么 ?
Spring JDBC是Spring 框架对JDBC的简单封装。
它为什么而存在,或者说它可以干什么
Spring JDBC避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,而且JDBC将事务交给Spring框架来管理。

一、基础知识

Dao

Data Access Object 数据访问接口
接口可用JDBC、Mybatis、Hibernate 实现。
业务使用接口获取对象。

ORM

Object Relation Mapping 对象关系映射。

数据访问

  1. 连接参数
  2. 打开连接
  3. 声明SQL语句以及参数
  4. 执行SQL,并循环访问结果
  5. 执行业务
  6. 处理异常
  7. 关闭连接,语句以及结果集

二、DataSource

驱动类名、链接地址、用户名、密码

配置

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy—method="close">
	<property name="driverCIassName" value="${jdbc.driverClassName}"/>
	<property name="url" value="${jdbc.url}"/>
	<property name="username" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>
</bean>
<context:property—placeholder location="db.properties"/> 数据库配置

三、JdbcTemplate

功能

  • 声明SQL及参数
  • 执行SQL及处理结果
  • 异常处理

示例

查询
int rowCount = this.jdbcTemplate.queryForObject(
"select count(*) from user",Integer.class);
int countOfNamedJoe = this.jdbcTempIate.queryForObject(
"select count(*) from user where first_name = ?",
Integer.class,"Joe");
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from user where id = ?"
new Object[]{1212L},String.class);

更新
this.jdbcTemplate.update(
"insert into user(first_name, lastname) value (?, ?)", "Meimei","Han");
this.jdbcTemplate.update(
"update user set last_name = ? where id = ?", "Li", 5276L); 
this.jdbcTemplate.update(
"delete from user where id = ?", Long.valueOf(userId));
执行sql语句
this.jdbcTemplate.execute("create table user(Id integer, first_name varchar(100), last_name varchar(100))
RowMapper
查询一个
User user this.jdbcTemplate.queryForObject(
"select first_name, last_name from user where id =?",
	new Object[]{1212L},
	new RowMapper<User>(){
		public User mapRow(ResultSet rs, int rowNum) throws SQLException{
			User user = new User();
			user.setFirstName(rs.getString("first_name"));
			user.setLastName(rs.getString("Iastname"));
			return user;
		}
}):
查询多个
List<User> users = this.jdbcTemplate.query(
"select first_name,last_name from user", new RowMapper<User>(){
	public User mapRow(ResultSet rs,int rowNum)throws SQLException{
		User user = new User();
		user.setFirstName(rs·getString("first_name"));
		user.setLastName(rs.getString("last_name"));
		return user;
	}
});

声明

public class JdbcExampleDao implements ExampleDao{
	private JdbcTempLate jdbcTemplate;
 	public void setDataSource(DataSource dataSource){
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		}
//..DAO接囗实现
配置
xml配置
<bean id="exampIeDaollcourse.JdbcExampIeDao">
	<property name="dataSource" ref="dataSource"/>
</bean>
注解配置
public class JdbcExampleDao implements ExampleDao{
	private JdbcTempLate jdbcTemplate;
	@Autowired
 	public void setDataSource(DataSource dataSource){
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		}
//..DAO接囗实现

四、 NamedParameterJdbcTempIate

namedParameterJdbcTempIate 是对JdbcTempIate的一个封装
用 “:名称” 来代替 ”?“

示例

private NamedParameterJdbcTempLate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource){
	this.namedParameterJdbcTempIate = new NamedParameterJdbcTemp(dataSource);
}
public int countOfUsersByFirstName(String firstName){
	String sql = "select count(*) from user where first_name = :first_name";
	Map<String, String> namedParameters = Collections.singletonMap("first_name",firstName);
	return this.namedParameterJdbcTemplate,queryForObject(sql,namedParameters,
Integer.class);

接口

SqlParameterSource :功能:数据库列表名和字段名对应

queryForObject(String sql, Map<String, ?> RowMapper, <T> rowMapper)

queryForObject(String sql,SqlParameterSource paramSource, Class<T> requiredType)

子类实现接口
MapSqlParameterSource :手动对应
BeanPropertySqlParameterSource :spring自动对应
BeanPropertySqlParameterSource 的使用示例

private NamedParameterJdbcTempLate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource){
	this.namedParameterJdbcTempIate = new NamedParameterJdbcTemp(dataSource);
}
public int countOfUsersByFirstName(User exampleUser){
	String sql = "select count(*) from user where first_name = :first_name";
	SqLParameterSource namedParameters = new BeanPropertySqLParameterSource(exampleUser);
	return this.namedParameterJdbcTemplate,queryForObject(sql,namedParameters, Integer.class);

异常处理

数据库:SQLException是checked异常,到处都是try/catch(代码非常难堪)
Spring:DataAccessException是unchecked异常,不用写catch
疑惑见Spring JDBC Exception

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值