`
Drakedog
  • 浏览: 48668 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JdbcTemplete事务处理

阅读更多
package dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import po.UserInfo;
import dao.UserDao;

public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate; //根据当前数据源连接创建的实例
private PlatformTransactionManager transactionManager;//根据当前数据源连接创建的实例

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
   this.jdbcTemplate = jdbcTemplate;
}

public void setTransactionManager(PlatformTransactionManager transactionManager) {
   this.transactionManager = transactionManager;
}

public UserInfo queryByNamePwd(String username,String pwd) {
   //DefaultTransactionDefinition 是TransactionDefinition的一个实现类
   //transactionDefinition是表示事务的一些属性 如隔离级别等
   DefaultTransactionDefinition def = new DefaultTransactionDefinition();
   // transactionstatus 表示当前事务
//首先获得当前的事务,需要一个事务定义类(规定隔离级别等属性的一个类)
   //根据指定的属性创造一个新事务实例.
   TransactionStatus status = transactionManager.getTransaction(def);    try{
    //参数为一个sql语句
    //List result = jdbcTemplate.queryForList("select * from userinfo where username="+username+" and pwd="+pwd);
    //参数一个sql语句和 一个 object[] 后面盛放传递过去的参数
    List result = jdbcTemplate.queryForList("select * from userinfo where username= ? and pwd=?",new String[]{username,pwd});
    UserInfo user = null;
    user = (UserInfo)result.get(0);
    return user;
   }catch(DataAccessException ex)
   {
    transactionManager.rollback(status);
    ex.printStackTrace();
    return null;
   }
}

public boolean addUser(UserInfo user) {
   DefaultTransactionDefinition def = new DefaultTransactionDefinition();
   TransactionStatus status = transactionManager.getTransaction(def);
   try{
    String sql = "insert into userinfo(username,pwd) values(?,?)";
    String[] args ={user.getUsername() ,user.getPassword()};
    jdbcTemplate.update(sql, args);
    return true;
   }catch(Exception ex)
   {
    transactionManager.rollback(status);
    ex.printStackTrace();
    return false;
  
   }
 
 
}

public boolean delUser(UserInfo user) {
   // TODO Auto-generated method stub
   DefaultTransactionDefinition def = new DefaultTransactionDefinition();
   TransactionStatus status = transactionManager.getTransaction(def);
   try{
    String del = "delete from userinfo where id = ?";
    Integer[] args={user.getId()};
    jdbcTemplate.update(del, args);
    return true;
   }catch(Exception ex)
   {
    transactionManager.rollback(status);
    ex.printStackTrace();
    return false;
   }
}

public boolean modifyUser(UserInfo user) {
   // TODO Auto-generated method stub
   return false;
}

public List<UserInfo> query(String sql) {
   // TODO Auto-generated method stub
   return null;
}

public UserInfo queryById(final int id) {
   // TODO Auto-generated method stub
   DefaultTransactionDefinition def = new DefaultTransactionDefinition();
   TransactionStatus status = transactionManager.getTransaction(def);
   try{
    String query = "select * from userinfo where id = ?";
   /*
   jdbcTemlate对象的execute方法内 把传递进去的sql语句包装成PreparedStatement对象
   然后 传递给第二个参数(一个PreparedStatementCallback对象)的doInPreparedStatement()方法
   接着返回该方法所返回的值 
   */
     jdbcTemplate.execute(query,new PreparedStatementCallback(){
     public Object doInPreparedStatement(PreparedStatement pstmt)throws SQLException

       {
      pstmt.setInt(1, id);
      ResultSet rst = pstmt.executeQuery();
      rst.next();
      UserInfo user = new UserInfo();
      user.setId(id);
      user.setUsername(rst.getString("username"));
      user.setPassword(rst.getString("pwd"));
      return null;

       }


    });
   }catch(Exception ex)
   {
    ex.printStackTrace();
   }
   return null;
}

}



分享到:
评论

相关推荐

    Spring_JdbcTemplete代码包.zip

    这个"Spring_JdbcTemplete代码包"可能包含了示例代码、配置文件和其他相关资源,帮助我们理解和使用Spring JDBC Template。 1. **Spring JDBC Template的基本概念** - **模板方法模式**:Spring JDBC Template基于...

    springboot-jdbctemplete.rar

    JdbcTemplate内置了事务管理功能,可以使用`@Transactional`注解开启事务,例如: ```java @Transactional public void createUserAndOrder(User user, Order order) { jdbcTemplate.update("INSERT INTO user(......

    spring_JdbcTemplete使用详解

    执行批量更新操作,用于处理大量数据的插入或更新。 ##### 2.3 其他常用方法 - **int execute(String sql, PreparedStatementCallback action)** 执行任意 SQL 语句,适用于执行存储过程等复杂操作。 - **...

    spring jdbcTemplete+flex+pureMvc+cairngorm

    非常好的东西,喜欢的下载下来吧spring 3.0jdbcTemplete+flex4.6+pureMvc+cairngorm2.2.2+blazeds, 最新出炉,可以选择pureMvc和cairngorm2.2.2两种框架

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    交友平台毕业设计

    毕业论文使用jsp+webwork+spring+jdbctemplete+MySQL开发 而jsp运用了大量的jstl,吸收了freemarker的大部分精华 毕业论文包括以下模块: 登录、注册、用户管理、角色管理、权限管理,用户角色,角色权限,模块...

    spring基础功能分享ppt课件.ppt

    JDBC抽象及DAO模块提供了jdbcTemplete模板,ORM映射集成模块支持hibernate、jpa、ibatis等框架的持久化模板。Spring MVC框架类似于STRUTS\WEBWORK框架,拥有(model/view/controller)等功能。 Spring Portlet MVC...

    java实验代码.doc

    例如,`JdbcTemplete` 类提供了一种统一的方式来执行数据库操作。 Java 中的 SQLException SQLException 是 Java 中的一种异常类型,它用于捕获数据库操作中的异常。例如,在 `PersonDaoImpl` 类中,如果数据库...

Global site tag (gtag.js) - Google Analytics