简介
jdbctemplate就像dbutils的小工具,方便操作数据,可以进行事务管理。jbdctemplate的优势是spring中可以进行注解方式完成事务处理。dbutils就像是外来包。
数据的库的基本操作
- 加载驱动类
- 通过url、用户名、密码获得connect
- 获取state对象,进行sql操作
- 如果是update(),返回处理的条目。如果是query() 需要处理resultSet对象获取结果。
以上是没有采用jdbc工具的时候操作。采用数据库的一些包可以封装数据。
资源池的概念
- 资源池是为了管理conncet资源
- 用的比较好的数据为c3p0,设置方式可以通过setxxx(),或者配置文件。javax.sql的具有资源池的接口DataSource。jar包可以根据需要自己实现。
jbdcTempate实现修改
添加、修改、删除。都是类似的操作。
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
String sql="insert into Person value(?,?)";
int i=jdbcTemplate.update(sql,3);
int i=jdbcTemplate.update(sql,"zhangbin",2);
查询
查询的时候需要提供处理函数。
返回一个对象
String sql="select name from Person where id=1";
String i= jdbcTemplate.queryForObject(sql,String.class);
返回一个自定义对象
<T> T queryForObject(String var1, RowMapper<T> var2)//操作接口
public interface RowMapper<T> { //处理result的接口
T mapRow(ResultSet var1, int var2) throws SQLException;
}
以上两个函数是现象自定义对象接口
//查询操作
String sql="select * from Person where id=1";
Person person= jdbcTemplate.queryForObject(sql, new MapObject());
//具体的接口实现
class MapObject implements RowMapper<Person> {
@Override
public Person mapRow(ResultSet resultSet, int i) throws SQLException {
Person person =new Person();
int id=resultSet.getInt("id");
String name=resultSet.getString("name");
person.setId(id);
person.setName(name);
return person;
}
}
返回list
接口的实现部分包含了 int i;与自定义的对象接口相同。
// String sql="select * from Person ";
// List<Person> i=jdbcTemplate.query(sql, new MapObject());
template的ioc
可以将DataSource、jdbcTemplate对象放入ioc的配置文件中。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///mysql1"> </property>
<property name="user" value="root"> </property>
<property name="password" value="123"> </property>
<property name="driverClass" value="com.mysql.jdbc.Driver"> </property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
事务操作
事务特点
- 一致性
- 原子性
- 隔离性
- 永久性
多线程操作特点
- 不可重复读
- 脏读
- 幻读
事务处理隔离
- 串行
- 读未提交
- 重复读复图
- 读提交
jdbctempate jar包
在原来的数据包中增加几个包
//jdbcTemplate的操作数据库包
spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
//c3p0数据库
c3p0-0.9.2.1.jar
mchange-commons-java-0.2.3.4.jar
约束
约束如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
xml设置如下
对事务处理的实现,针对不同的底层有不同的实现,对于jbdctempate的底层实现类DataSourceTransactionManager。
//实现事务管理
<bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
//增强事务处理
<tx:advice id="txadvice" transaction-manager="transaction">
<tx:attributes>
<tx:method name="tran*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
//设置切面
<aop:config>
<aop:pointcut id="cut1" expression="execution(* com.zhao.day3.service.PersonService.*(..))" />
<!--<aop:advisor advice-ref="txadvice" pointcut-ref="cut1"/>-->
<aop:advisor advice-ref="txadvice" pointcut-ref="cut1"/>
</aop:config>
注解方式:
