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代码包"可能包含了示例代码、配置文件和其他相关资源,帮助我们理解和使用Spring JDBC Template。 1. **Spring JDBC Template的基本概念** - **模板方法模式**:Spring JDBC Template基于...
JdbcTemplate内置了事务管理功能,可以使用`@Transactional`注解开启事务,例如: ```java @Transactional public void createUserAndOrder(User user, Order order) { jdbcTemplate.update("INSERT INTO user(......
执行批量更新操作,用于处理大量数据的插入或更新。 ##### 2.3 其他常用方法 - **int execute(String sql, PreparedStatementCallback action)** 执行任意 SQL 语句,适用于执行存储过程等复杂操作。 - **...
非常好的东西,喜欢的下载下来吧spring 3.0jdbcTemplete+flex4.6+pureMvc+cairngorm2.2.2+blazeds, 最新出炉,可以选择pureMvc和cairngorm2.2.2两种框架
spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。
毕业论文使用jsp+webwork+spring+jdbctemplete+MySQL开发 而jsp运用了大量的jstl,吸收了freemarker的大部分精华 毕业论文包括以下模块: 登录、注册、用户管理、角色管理、权限管理,用户角色,角色权限,模块...
JDBC抽象及DAO模块提供了jdbcTemplete模板,ORM映射集成模块支持hibernate、jpa、ibatis等框架的持久化模板。Spring MVC框架类似于STRUTS\WEBWORK框架,拥有(model/view/controller)等功能。 Spring Portlet MVC...
例如,`JdbcTemplete` 类提供了一种统一的方式来执行数据库操作。 Java 中的 SQLException SQLException 是 Java 中的一种异常类型,它用于捕获数据库操作中的异常。例如,在 `PersonDaoImpl` 类中,如果数据库...