`
Drakedog
  • 浏览: 48185 次
  • 性别: 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;
}

}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics