Spring整合JDBC
Spring中提供了一个可以操作数据库的对象,封装了JDBC技术
JDBCTemplate => JDBC模板对象
与DBUtils中的QueryRunner非常相似
//准备连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://103.249.130.173:3306/hibernate_crm?useUnicode=true&characterEncoding=UTF8");
dataSource.setUser("appUser");
dataSource.setPassword("AA1122BB");
//创建JDBC模板对象
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
//书写sql语句并执行
String sql = "insert into t_user values(null,'rose')";
jt.update(sql);
Spring整合Dao 数据库
步骤
1 导包
- 4+2 spring包
- spring-test、spring-aop、junit4类库
- c3p0连接池 JDBC驱动
- spring-jdbc spring-tx事务
2 准备数据库
书写Dao
public interface TUserDao {
//增
void save(TUser user);
//删除
void delete(Integer id);
//改
void update(TUser user);
//查
TUser getById(Integer id);
int getTotalCount();
List<TUser> getAllTUser();
}
书写实现类impl
public class TUserDaoImpl implements TUserDao {
private JdbcTemplate jt;
@Override
public void save(TUser user) {
String sql = "insert into t_user values(null,?)";
jt.update(sql, user.getName());
}
@Override
public void delete(Integer id) {
String sql = "delete from t_user where id = ?";
jt.update(sql, id);
}
@Override
public void update(TUser user) {
String sql = "update t_user set name = ? where id =?";
jt.update(sql, user.getName(), user.getId());
}
@Override
public TUser getById(Integer id) {
String sql = "select * from t_user where id = ?";
TUser tUser = jt.queryForObject(sql, new RowMapper<TUser>() {
@Override
public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
TUser tUser = new TUser();
tUser.setId(resultSet.getInt("id"));
tUser.setName(resultSet.getString("name"));
return tUser;
}
}, id);
return tUser;
}
@Override
public int getTotalCount() {
String sql = "select count(*) from t_user";
Integer count = jt.queryForObject(sql, Integer.class);
return count;
}
@Override
public List<TUser> getAllTUser() {
String sql = "select * from t_user";
List<TUser> query = jt.query(sql, new RowMapper<TUser>() {
@Override
public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
TUser tUser = new TUser();
tUser.setId(resultSet.getInt("id"));
tUser.setName(resultSet.getString("name"));
return tUser;
}
});
return query;
}
public JdbcTemplate getJt() {
return jt;
}
public void setJt(JdbcTemplate jt) {
this.jt = jt;
}
}
实现配置
<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.xsd">
<!--配置目标对象-->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl"
value="jdbc:mysql://103.249.130.173:3306/hibernate_crm?useUnicode=true&characterEncoding=UTF8"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="user" value="appUser"></property>
<property name="password" value="AA1122BB"></property>
</bean>
<!--jdbcTemplate放入Spring容器-->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--将UserDao放入Spring容器-->
<bean name="userDao" class="cn.probuing.dao.TUserDaoImpl">
<property name="jt" ref="jdbcTemplate"/>
</bean>
</beans>
进阶内容
JDBCDaoSupport
JDBCDapSupport根据连接池创建JDBC模板
不需要手动准备JDBC模板,从父类方法中获得即可
继承JDBCDaoSupport后,需要直接注入连接池就可以了
<!--将UserDao放入Spring容器-->
<bean name="userDao" class="cn.probuing.dao.TUserDaoImpl">
<!--<property name="jt" ref="jdbcTemplate"/>-->
<property name="dataSource" ref="dataSource"/>
</bean>
读取外部的Properties
- 编写.properties文件
为防止properties key键冲突 需要添加前缀 例如 test.key jdbc.key
jdbc.jdbcUrl=jdbc:mysql://xxxxxxxxxx;characterEncoding=UTF8
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=xxxxx
jdbc.password=xxxxxx
-
配置指定读取spring db.properties配置
-
配置读取配置中的值作为配置中的值
Spring中aop事务
Spring封装了事务管理的代码
- 打开事务
- 提交事务
- 回滚事务
事务操作对象
因为在不同平台,操作事务的代码各不相同,所以Spring提供了一个接口
- PlatformTransactionManager 接口
- JDBC平台 DataSourceTransactionManager
- HibernateTransitionManager
**在Spring中玩事务管理,最为核心的对象就是TransactionManager对象
Spring管理事务的属性介绍
事务的隔离级别
是否只读
事务的传播行为
Spring管理事物方式
编码式
将核心事务管理器配置到Spring容器
配置TransactionTemplate模板
将事务模板注入Service
在Service中调用模板
aop xml配置方式
导包
aop
aspect
aop联盟
weaving织入包
导入新的约束(tx)
beans: 最基本
context:读取properties配置
aop:配置aop
tx:配置事务通知
配置通知
配置将通知织入目标
注解配置
导包
aop
aspect
aop联盟
weaving织入包