Dao模式
基础Dao
public abstract class BaseDao {
// 使用DbUtils操作数据库,导包
private QueryRunner queryRunner = new QueryRunner();
/**
* update()方法用来执行:Insert/Update/Delete语句
* @return 返回-1表示执行失败,返回其他表示影响的行数
*/
public int update(String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.update(connection,sql,args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(connection);
}
return -1;
}
/**
* 查询返回一个Javabean的sql语句
* @param type 返回的对象类型
* @param sql 执行的sql语句
* @param args sql对应的参数值
* @param <T> 返回的类型的泛型
* @return
*/
public <T> T queryForOne(Class<T> type,String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(connection);
}
return null;
}
/**
* 查询返回多个javaBean的sql语句
* @param type
* @param sql
* @param args
* @param <T>
* @return 返回多条行数据
*/
public <T> List<T> queryForList(Class<T> type,String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new BeanListHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(connection);
}
return null;
}
/**
* 返回一行一列的sql语句
* @param sql 执行的sql
* @param args sql对应的参数值
* @return
*/
public Object queryForSingleValue(String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new ScalarHandler(),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(connection);
}
return null;
}
}
pojo
User实体类
public class User {
private Integer id;
private String username;
private String password;
private String email;
public User() {
}
public User(Integer id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
User实体类对应的Dao接口
UserDao
public interface UserDao {
/**
* 注册时防止重名 验证用户名是否有效 查询数据库里是否有浏览器输入的用户名
* @param username 用户名
* @return 返回null表示无此用户
*/
User queryUserByUsername(String username);
// 注册 验证密码是否有效 查询数据库里是否有浏览器输入的密码
/**
* 注册 保存用户信息
* @param user 用户对象
* @return 返回0表示未保存到用户信息
*/
int save(User user);
/**
* 登录 根据用户名和密码查询用户信息
* @param username 用户名
* @param password 密码
* @return 如果返回null,说明用户名密码有一个出错。
*/
User queryUserByUsernameAndPassword(String username, String password);
}
接口实现类
UserDaoImpl
public class UserDaoImpl extends BaseDao implements UserDao {
@Override
public User queryUserByUsername(String username) {
String sql = "select id,username,password,email from cb_user where username=?"; // 查询指定用户名的所有信息
return queryForOne(User.class,sql,username);
}
@Override
public int save(User user) {
String sql = "insert into cb_user(username,password,email) values(?,?,?)"; // 插入新用户
return update(sql,user.getUsername(),user.getPassword(),user.getEmail());
}
@Override
public User queryUserByUsernameAndPassword(String username, String password) {
String sql = "select id,username,password,email from cb_user where username=? and password=?"; // 查询指定用户名和密码的用户
return queryForOne(User.class,sql,username,password);
}
}