Spring 对数据层的支持
一致的异常层次
一致的DAO 抽象类
jdbcDaoSupport -JDBC数据访问对象的基类
HibernateDaoSupport -Hibernate数据访问对象的基类
JdoDaoSupport -JDO数据访问对象的基类
JpaDaoSupport -JPA数据访问对象的基类
JDBC 问题 :
- 重复的步骤繁多
- 过多的与业务无关的内容 出现在代码中【侵入式】
- JDBC 的 connection 是紧耦合的
引入 Spring 后
1、创建数据源 bean
<!-- 数据源连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost/kgc">
</property>
<property name="username" value="root"></property>
<property name="password" value="ok"></property>
</bean>
2、注入数据源
<bean id="userDao" class="com.kgc.user.dao.UserDaoImpl" >
<property name="dataSource" ref="dataSource"></property>
</bean>
3、创建 JdbcTemplate
String sql = "insert into user(uuid,name,age) " +
"values('"+um.getUuid()+"','"+um.getName()+"','"+um.getAge()+"') ";
JdbcTemplate jt = new JdbcTemplate(dataSource);
jt.execute(sql);
4、执行sql 语句
Spring 无侵入式框架
创建JdbcTemplate
执行 sql 语句
Spring 抽象 框架内容
Core模块 -核心处理模块
DataSource -简化DataSource 访问的工具类
Object 模块 -封装了查询、更新以及存储过程的形成
Support 模块 -提供了异常转换和相关的工具类
JdbcTemplate 介绍
JdbcTemplate概念 :是一个帮助我们管理资源的工具
- JdbcTemplate是core 包的核心类
- 主要作用是完成资源创建以及释放等工作; Spring 还是做了资源相关的内容,只是这一部分不需要我们们来做了
- JdbcTemplate 提供PrepareStatementCallback回调函数供我们调用
演示:
执行DML
执行DQL
JdbcDaoSupport
目的: DataSource 和 JdbcTemplate 与业务无关
PrepareStatementCallback : 提供 preparedStatement
使用方式与JDBC 完全一致
String sql = "insert into user(uuid,name,age) values(?,?,?) ";
PreparedStatementCallback pscb = new PreparedStatementCallback() {
@Override
public Object doInPreparedStatement(PreparedStatement pstmt)
throws SQLException, DataAccessException {
pstmt.setString(1, um.getUuid());
pstmt.setString(2, um.getName());
pstmt.setInt(3, um.getAge());
// 这一步别忘执行
pstmt.execute();
return null;
}
};
JdbcTemplate jt = new JdbcTemplate(dataSource);
jt.execute(sql,pscb);
NamedParameterJdbcTemplate
- 对于JdbcTemplate 进行封装
- ?,?,? ->按位置传值 提供了对命名参数的支持