Spring JdbcTemplate:
Spring提供的jdbc模板,类似于dbutils
使用:
导入Spring相关jar包
导入spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
导入数据库驱动jar包
入门:
//1.创建一个数据库连接池-->Spring内置连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//2.设置dataSource相关属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///数据库名");
dataSource.serUsername("root");
dataSource.setPassword("root");
//3.创建一个JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
//4.执行操作
jdbcTemplate.execute(sql);
使用配置完成入门案例:
<!-- 配置连接池,Spring内置连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///数据库名"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 配置自定义连接池 -->
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value=""/>
<property name="jdbcUrl" value=""/>
<property name="user" value=""/>
<property name="password" value=""/>
</bean>
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref=""/>
</bean>
<!-- 引入外部properties配置文件 -->
<context:property-placeholder location="classpath:xxx.properties"/>
<!-- 外部配置文件在核心配置文件中的使用 -->
<value="${key}"/>
//外部配置文件在代码中的使用
@Value(value="${key}")
private String value;
使用JdbcTemplate完成CRUD操作:
insert,delete,update操作:
jdbcTemplate.update(sql,params):
select操作:
1、简单数据返回:
jdbcTemplate.queryForObject(sql,返回值类型.class,params);
2、返回单个对象:
jdbcTemplate.queryForObject(sql,new RowMapper<T>(){
@Override
public T maprow(Result rs, int rowNum) throws SQLException{
数据封装操作
}
},params);
3、返回对象的集合:
jdbcTemplate.query(sql,new RowMapper<T>(){
@Override
public T maprow(Result rs, int rowNum) throws SQLException{
数据封装操作
}
},params);
4、返回单个对象(简化):
jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<T>(T.class),params);
5、返回对象的集合(简化):
jdbcTemplate.query(sql,new BeanPropertyRowMapper<T>(T.class),params);
Spring的事务管理:【*****】
dao层的配置:
让dao继承JdbcDaoSupport类,这个类创建了JdbcTemplate,只需注入一个dataSource即可.
Spring事务管理的优点:
1、提供一致的对于不同事务管理的API
2、支持声明式事务管理【****】
3、编程事务管理(了解)
4、优秀的整合与Spring的数据访问
Spring事务管理的注意功能-->三个接口
1、PlatformTransactionManager
-->事务管理器,选择相关平台管理事务(jdbc hibernare jpa...)
2、TransactionDefinition
-->定义事务的相关信息(隔离,传播,超时,只读)
3、TransactionStatus
-->描述事务的具体状态
PlatformTransactionManager:
-->平台事务管理器
-->DataSourceTransactionManager 主要针对jdbcTemplate开发,MyBatis开发
-->HibernateTransactionManager 主要针对Hibernate开发
-->JpaTransactionManager 主要针对JPA开发
TransactionDefinition
-->事务的定义信息
-->隔离:
事物的隔离级别.
-->超时:
默认值是-1,代表使用数据库默认的超时时间
-->只读:
true/false,如果选true一般是在select操作
-->传播:
propagation_required 默认值,两个操作处于同一个事务,如果之前没有事务,新建一个事务
propagation_requires_new 两个操作处于不同的事务
propagation_nested 嵌套事务,使用SavePoint来实现,事务回滚到指定的savepoint,【只对 DataSourceTransactionManager有作用】
propagation_supports 支持当前事务,如果不存在,就不使用事务
propagation_mandatory 支持当前事务,如果不存在,抛出异常
propagation_not_supported 非事务运行,如果事务存在,挂起当前事务
propagation_never 非事务运行,如果有事务存在,抛出异常
TransactionStatus:
-->事务的状态:
--> boolean isNewTransaction();
--> boolean hasSavepoint();
--> void setRollbackOnly();
--> boolean isRollbackOnly();
--> void flush();
--> boolean isCompleted();
声明式事务管理:
事务管理方式:
1、编码方案 --> 不建议使用,具有侵入性;
2、声明式事务控制 --> 基于AOP对目标进行代理,添加around环绕通知,不具有侵入性;
基于XML配置声明式事务管理:
1、引入aop和tx的名称空间
2、核心文件的配置
<!-- 配置数据源(连接池) -->
<!-- 配置事务管理器 -->
<bean id="事务管理器" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="数据源"/>
</bean>
<!-- 配置通知 -->
<tx:advice id="通知" transaction-manager="事务管理器">
<tx:attributes>
<tx:method name="要进行事务管理的方法名"/>
<!--
name 必须 要进行事务管理的方法名
isolation 可选 设置事务隔离级别,默认default
propagation 可选 设置事务传播,默认required
timeout 可选 超时时间,默认-1
read-only 可选 默认false
rollback-for 可选 设置一个异常,如果产生该异常,事务回滚
no-rollback-for 可选 设置一个异常,如果产生该异常,事务部回滚
-->
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<aop:poincut exepression="切点表达式" id="切点"/>
<aop:advisor advice-ref="通知" point-ref="切点"/>
</aop:config>
基于Annotation声明式事务管理:
1、在核心配置文件
配置是注解生效的配置
<!-- 开启注解事务控制 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2、在需要事务管理的类或方法上添加注解:
@Transactional
对于xml方式和annotation方式的优缺点:
xml:便于维护
annotaion:方便
Spring提供的jdbc模板,类似于dbutils
使用:
导入Spring相关jar包
导入spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
导入数据库驱动jar包
入门:
//1.创建一个数据库连接池-->Spring内置连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//2.设置dataSource相关属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///数据库名");
dataSource.serUsername("root");
dataSource.setPassword("root");
//3.创建一个JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
//4.执行操作
jdbcTemplate.execute(sql);
使用配置完成入门案例:
<!-- 配置连接池,Spring内置连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///数据库名"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 配置自定义连接池 -->
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value=""/>
<property name="jdbcUrl" value=""/>
<property name="user" value=""/>
<property name="password" value=""/>
</bean>
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref=""/>
</bean>
<!-- 引入外部properties配置文件 -->
<context:property-placeholder location="classpath:xxx.properties"/>
<!-- 外部配置文件在核心配置文件中的使用 -->
<value="${key}"/>
//外部配置文件在代码中的使用
@Value(value="${key}")
private String value;
使用JdbcTemplate完成CRUD操作:
insert,delete,update操作:
jdbcTemplate.update(sql,params):
select操作:
1、简单数据返回:
jdbcTemplate.queryForObject(sql,返回值类型.class,params);
2、返回单个对象:
jdbcTemplate.queryForObject(sql,new RowMapper<T>(){
@Override
public T maprow(Result rs, int rowNum) throws SQLException{
数据封装操作
}
},params);
3、返回对象的集合:
jdbcTemplate.query(sql,new RowMapper<T>(){
@Override
public T maprow(Result rs, int rowNum) throws SQLException{
数据封装操作
}
},params);
4、返回单个对象(简化):
jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<T>(T.class),params);
5、返回对象的集合(简化):
jdbcTemplate.query(sql,new BeanPropertyRowMapper<T>(T.class),params);
Spring的事务管理:【*****】
dao层的配置:
让dao继承JdbcDaoSupport类,这个类创建了JdbcTemplate,只需注入一个dataSource即可.
Spring事务管理的优点:
1、提供一致的对于不同事务管理的API
2、支持声明式事务管理【****】
3、编程事务管理(了解)
4、优秀的整合与Spring的数据访问
Spring事务管理的注意功能-->三个接口
1、PlatformTransactionManager
-->事务管理器,选择相关平台管理事务(jdbc hibernare jpa...)
2、TransactionDefinition
-->定义事务的相关信息(隔离,传播,超时,只读)
3、TransactionStatus
-->描述事务的具体状态
PlatformTransactionManager:
-->平台事务管理器
-->DataSourceTransactionManager 主要针对jdbcTemplate开发,MyBatis开发
-->HibernateTransactionManager 主要针对Hibernate开发
-->JpaTransactionManager 主要针对JPA开发
TransactionDefinition
-->事务的定义信息
-->隔离:
事物的隔离级别.
-->超时:
默认值是-1,代表使用数据库默认的超时时间
-->只读:
true/false,如果选true一般是在select操作
-->传播:
propagation_required 默认值,两个操作处于同一个事务,如果之前没有事务,新建一个事务
propagation_requires_new 两个操作处于不同的事务
propagation_nested 嵌套事务,使用SavePoint来实现,事务回滚到指定的savepoint,【只对 DataSourceTransactionManager有作用】
propagation_supports 支持当前事务,如果不存在,就不使用事务
propagation_mandatory 支持当前事务,如果不存在,抛出异常
propagation_not_supported 非事务运行,如果事务存在,挂起当前事务
propagation_never 非事务运行,如果有事务存在,抛出异常
TransactionStatus:
-->事务的状态:
--> boolean isNewTransaction();
--> boolean hasSavepoint();
--> void setRollbackOnly();
--> boolean isRollbackOnly();
--> void flush();
--> boolean isCompleted();
声明式事务管理:
事务管理方式:
1、编码方案 --> 不建议使用,具有侵入性;
2、声明式事务控制 --> 基于AOP对目标进行代理,添加around环绕通知,不具有侵入性;
基于XML配置声明式事务管理:
1、引入aop和tx的名称空间
2、核心文件的配置
<!-- 配置数据源(连接池) -->
<!-- 配置事务管理器 -->
<bean id="事务管理器" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="数据源"/>
</bean>
<!-- 配置通知 -->
<tx:advice id="通知" transaction-manager="事务管理器">
<tx:attributes>
<tx:method name="要进行事务管理的方法名"/>
<!--
name 必须 要进行事务管理的方法名
isolation 可选 设置事务隔离级别,默认default
propagation 可选 设置事务传播,默认required
timeout 可选 超时时间,默认-1
read-only 可选 默认false
rollback-for 可选 设置一个异常,如果产生该异常,事务回滚
no-rollback-for 可选 设置一个异常,如果产生该异常,事务部回滚
-->
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<aop:poincut exepression="切点表达式" id="切点"/>
<aop:advisor advice-ref="通知" point-ref="切点"/>
</aop:config>
基于Annotation声明式事务管理:
1、在核心配置文件
配置是注解生效的配置
<!-- 开启注解事务控制 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2、在需要事务管理的类或方法上添加注解:
@Transactional
对于xml方式和annotation方式的优缺点:
xml:便于维护
annotaion:方便