package easyjweb.demo.user.dao.impl; import java.util.Date; import java.util.List; import org.apache.commons.dbcp.BasicDataSource; import com.easyjf.container.annonation.Bean; import easyjweb.demo.user.dao.UserDao; import easyjweb.demo.user.domain.User; /** * UserDao的另一个实现,该实现用来读取数据库 * * @author 大峡 * */ public class UserDaoJdbcImpl implements UserDao { private javax.sql.DataSource dataSource; public UserDaoJdbcImpl() { java.util.Properties p = new java.util.Properties(); try { p.load(this.getClass().getResourceAsStream("/db.properties")); String driver = p.getProperty("database.driverClassName"); String url = p.getProperty("database.url"); String userName = p.getProperty("database.username"); String password = p.getProperty("database.password"); BasicDataSource bdds = new BasicDataSource(); bdds.setDriverClassName(driver); bdds.setUrl(url); bdds.setUsername(userName); bdds.setPassword(password); this.dataSource = bdds; } catch (java.io.IOException e) { } } public UserDaoJdbcImpl(javax.sql.DataSource dataSource) { this.dataSource = dataSource; } public void setDataSource(javax.sql.DataSource dataSource) { this.dataSource = dataSource; } public User get(final Long id) { User user = (User) new SqlExecute() { Object doExecute() throws java.sql.SQLException { stat = conn.prepareStatement("select * from User where id=?"); stat.setLong(1, id); rs = stat.executeQuery(); if (rs.next()) { return rs2user(rs); } else return null; } }.execute(); return user; } public List<User> list() { java.util.List<User> users = (List<User>) new SqlExecute() { Object doExecute() throws java.sql.SQLException { stat = conn.prepareStatement("select * from User"); rs = stat.executeQuery(); java.util.List<User> list = new java.util.ArrayList<User>(); while (rs.next()) { list.add(rs2user(rs)); } return list; } }.execute(); return users; } public void remove(Long id) { new SqlExecute() { Object doExecute() throws java.sql.SQLException { stat = conn.prepareStatement("delete * from User where id=?"); return stat.executeUpdate(); } }.execute(); } public void save(final User user) { new SqlExecute() { Object doExecute() throws java.sql.SQLException { stat = conn .prepareStatement("insert into User(name,password,sex,email,bornDate,loginTimes,lastLoginTime,intro,id) values(?,?,?,?,?,?,?,?,?)"); List<User> list = list(); user.setId(new Long(list == null ? 1 : list.size() + 1)); stat.setString(1, user.getName()); stat.setString(2, user.getPassword()); stat.setString(3, user.getSex()); stat.setString(4, user.getEmail()); stat.setDate(5, user.getBornDate() == null ? null : new java.sql.Date(user.getBornDate().getTime())); stat.setInt(6, user.getLoginTimes()); stat.setDate(7, user.getLastLoginTime() == null ? null : new java.sql.Date(user.getLastLoginTime().getTime())); stat.setString(8, user.getIntro()); stat.setLong(9, user.getId()); return stat.executeUpdate(); } }.execute(); } public void update(final Long id, final User user) { new SqlExecute() { Object doExecute() throws java.sql.SQLException { stat = conn .prepareStatement("update User set name=?,password=?,sex=?,email=?,bornDate=?,loginTimes=?,lastLoginTime=?,intro=? where id=?"); stat.setString(1, user.getName()); stat.setString(2, user.getPassword()); stat.setString(3, user.getSex()); stat.setString(4, user.getEmail()); stat.setDate(5, user.getBornDate() == null ? null : new java.sql.Date(user.getBornDate().getTime())); stat.setInt(6, user.getLoginTimes()); stat.setDate(7, user.getLastLoginTime() == null ? null : new java.sql.Date(user.getLastLoginTime().getTime())); stat.setString(8, user.getIntro()); stat.setLong(9, user.getId()); return stat.executeUpdate(); } }.execute(); } private User rs2user(java.sql.ResultSet rs) throws java.sql.SQLException { Long id = rs.getLong("id"); String name = rs.getString("name"); String password = rs.getString("password"); String sex = rs.getString("sex"); String email = rs.getString("email"); Date bornDate = rs.getDate("bornDate"); Integer loginTimes = rs.getInt("loginTimes"); Date lastLoginTime = rs.getDate("lastLoginTime"); String intro = rs.getString("intro"); User u = new User(name, email, bornDate); u.setId(id); u.setPassword(password); u.setLoginTimes(loginTimes); u.setLastLoginTime(lastLoginTime); u.setSex(sex); u.setIntro(intro); return u; } abstract class SqlExecute { protected java.sql.Connection conn = null; protected java.sql.PreparedStatement stat = null; protected java.sql.ResultSet rs = null; Object execute() { try { conn = dataSource.getConnection(); return doExecute(); } catch (java.sql.SQLException e) { e.printStackTrace(); try { if (rs != null) rs.close(); if (stat != null) stat.close(); } catch (java.sql.SQLException e2) { throw new java.lang.RuntimeException(e2.getMessage()); } } finally { try { if (conn != null && !conn.isClosed()) conn.close(); } catch (java.sql.SQLException e2) { throw new java.lang.RuntimeException(e2.getMessage()); } } return null; } abstract Object doExecute() throws java.sql.SQLException; } }