OpenSessionInView
打开与数据库的会话在view层.
OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
OpenSessionIvView是管理事务 –
延迟事务的 – 延迟Connection关闭的时间的。
第一步:创建一个项目
第二步:修改DataSourceutils添加threadlocal
package czb.utils;
import java.sql.Connection;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public classDataSourceUtils {
private static DataSource ds;
private static ThreadLocal<Connection>tl= newThreadLocal<Connection>();
static {
ds = newComboPooledDataSource();
}
public static DataSourcegetDataSource() {
return ds;
}
public static ConnectiongetConnection() {
Connectioncon = tl.get();
if (con == null) {
try {
con= ds.getConnection();
tl.set(con);
}catch(Exception e) {
throw new RuntimeException(e);
}
}
return con;
}
}
第三步:开发两个dao
public classDao2 {
publicvoidsave(){
String sql = "insert into stud2 values('S002','Rose')";
QueryRunner run = new QueryRunner();
Connection con = DataSourceUtils.getConnection();
run.update(con, sql);
}
}
public classDao2 {
publicvoidsave(){
String sql = "insert into stud2 values('S002','Rose')";
QueryRunner run = new QueryRunner();
Connection con = DataSourceUtils.getConnection();
run.update(con, sql);
}
}
第四步:开发service
public classSaveService {
privateDao1 dao1= newDao1();
privateDao2 dao2= newDao2();
publicvoidsave(){
dao1.save();
dao2.save();
}
}
第五步:开发servlet
public classSaveServlet extends HttpServlet {
private static final long serialVersionUID= 1L;
private SaveService service = new SaveService();
public voiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
service.save();
}
}
第六步:开发最重点的类-Filter – TxFilter
public classTxFilter implementsFilter {
public void destroy() {
}
public void doFilter(ServletRequestrequest, ServletResponse response,
FilterChainchain) throwsIOException, ServletException {
Connectioncon = null;
try {
con= DataSourceUtils.getConnection();
// 开事务
con.setAutoCommit(false);
// 放行
chain.doFilter(request,response);
// 来到这说明正常,提交
con.commit();
}catch(Exception e) {
try {
con.rollback();
}catch(SQLException e1) {
e1.printStackTrace();
}
throw new RuntimeException(e);
}finally{
try {
con.setAutoCommit(true);
con.close();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}
public void init(FilterConfigfConfig) throwsServletException {
}
}
配置
<filter>
<display-name>TxFilter</display-name>
<filter-name>TxFilter</filter-name>
<filter-class>cn.oracle.filer.TxFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TxFilter</filter-name>
<url-pattern>/tx/*</url-pattern>
</filter-mapping>
---------------------
作者:469187296
来源:CSDN
原文:https://blog.csdn.net/xiaobiaobiao521/article/details/8941245
版权声明:本文为博主原创文章,转载请附上博文链接!