首先建立如下图所示的包结构:

然后首先件里模型model包下的两个类:
package model;
public abstract class Bean {
}
下面是User类的代码:
package model;
import java.util.Date;
public class User extends Bean{
private Integer id;
private String name;
private String password;
private String sex;
private String email;
private String pwdQuestion;
private String pwdAnswer;
private Date regDate;
private String lastLoginDate;
private String lastLoginIp;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPwdQuestion() {
return pwdQuestion;
}
public void setPwdQuestion(String pwdQuestion) {
this.pwdQuestion = pwdQuestion;
}
public String getPwdAnswer() {
return pwdAnswer;
}
public void setPwdAnswer(String pwdAnswer) {
this.pwdAnswer = pwdAnswer;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
public String getLastLoginDate() {
return lastLoginDate;
}
public void setLastLoginDate(String lastLoginDate) {
this.lastLoginDate = lastLoginDate;
}
public String getLastLoginIp() {
return lastLoginIp;
}
public void setLastLoginIp(String lastLoginIp) {
this.lastLoginIp = lastLoginIp;
}
}
然后建立dao包,里面的BaseDao代码如下:
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import model.Bean;
public abstract class BaseDao {
private static String url = "jdbc://localhost:3306/test";
private static String name = "root";
private static String password = "12345";
private static String driverName = "com.mysql.jdbc.Driver";
private Connection getConnection() {
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, name, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* parse ResultSet to Bean's Child
* @param rt
* @return
* Bean
*/
protected abstract Bean fillBean(ResultSet rt);
/**
* select
* @param sql
* @return
* the result of select operation
*/
public ArrayList select(String sql) {
ArrayList list = new ArrayList();
Connection conn = getConnection();
Statement st = null;
ResultSet rt = null;
try {
st = conn.createStatement();
rt = st.executeQuery(sql);
while (rt.next()) {
list.add(fillBean(rt));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rt.close();
st.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
/**
* update,insert,delete
* @param sql
* @return
* operation columns
*/
public int update(String sql) {
int flag = -1;
Connection conn = getConnection();
Statement st = null;
try {
st = conn.createStatement();
flag = st.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
conn.rollback();// 如果出现异常,当前操作自动回滚
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
try {
conn.commit();// 如果操作正常,当前操作提交
st.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
}
下面是UserDao的代码:
package dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.Bean;
import model.User;
public class UserDao extends BaseDao{
private static final String TABLE_NAME="user";
@Override
protected Bean fillBean(ResultSet rt) {
User user=new User();
try {
user.setId(rt.getInt("id"));
user.setName(rt.getString("name"));
user.setPassword(rt.getString("password"));
user.setSex(rt.getString("sex"));
user.setEmail(rt.getString("email"));
user.setPwdQuestion(rt.getString("pwdquestion"));
user.setPwdAnswer(rt.getString("pwdanswer"));
user.setRegDate(rt.getDate("regdate"));
user.setLastLoginDate(rt.getString("lastlogindate"));
user.setLastLoginIp(rt.getString("lastloginip"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
public ArrayList selectById(String id){
String sql="select * from "+TABLE_NAME+" where id='"+id+"'";
ArrayList list=super.select(sql);
return list;
}
}
这样书写这两个dao的好处是,BaseDao只是加载一些配置信息,公共重复的sql操作,子类中只需要提供解析ResultSet到实体Bean的方法,那么只需要对sql和参数进行有效地封装就好了。虽然做的很粗糙,但是道理上的封装就是这样的。