DAO设计模式---初步实现
2016-09-01 17:21
459 查看
简单Java类
数据库连接支持
业务层接口、工厂和实现
数据层接口、工厂和实现
junit测试
简单Java类
数据库连接支持
数据层接口
数据层实现类
数据层工厂
业务层接口
业务层实现
业务层工厂
添加Junit测试
数据库连接支持
业务层接口、工厂和实现
数据层接口、工厂和实现
junit测试
简单Java类
public class Member { private String mid; private String name; private Integer age; private String phone; private Date birthday; private String note; public Member(){} public String getMid() { return mid; } public void setMid(String mid) { this.mid = mid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } @Override public String toString() { return "Member [mid=" + mid + ", name=" + name + ", age=" + age + ", phone=" + phone + ", birthday=" + birthday + ", note=" + note + "]"; } public Member(String mid, String name, Integer age, String phone, Date birthday, String note) { super(); this.mid = mid; this.name = name; this.age = age; this.phone = phone; this.birthday = birthday; this.note = note; } }
数据库连接支持
public class DatabaseConnection { private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; //填写自己连接的数据库和密码 private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:XXXX"; private static final String DBUSER = "XXXXX"; private static final String PASSWORD = "XXXXX"; private Connection conn; public DatabaseConnection(){ try { Class.forName(DBDRIVER); conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Connection getConnection(){ return this.conn; } public void close(){ if(this.conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
数据层接口
public interface IMemberDAO { public boolean doCreate(Member vo) throws Exception; public boolean doUpdate(Member vo) throws Exception; public boolean doRemoveBatch(Set<String> ids)throws Exception; public Member findById(String id) throws Exception; public Member findByPhone(String phone) throws Exception; public List<Member> findAll() throws Exception; public List<Member> findAll(Integer currentPage,Integer lineSize)throws Exception; public List<Member> findAll(String colimn,String keyWord,Integer currentPage,Integer lineSize)throws Exception; public Long getCountAll() throws Exception; public Long getCountAll(String colimn,String keyWord)throws Exception; }
数据层实现类
public class MemberDAOImpl implements IMemberDAO { private Connection conn; private PreparedStatement ptmt; public MemberDAOImpl(Connection conn){ this.conn = conn; } @Override public boolean doCreate(Member vo) throws Exception { String sql = "insert into member ( mid,name,age,phone,birthday,note) values (?,?,?,?,?,?)" ; ptmt = this.conn.prepareStatement(sql); ptmt.setString(1, vo.getMid()); ptmt.setString(2,vo.getName()); ptmt.setInt(3,vo.getAge()); ptmt.setString(4, vo.getPhone()); ptmt.setDate(5, new java.sql.Date(vo.getBirthday().getTime())); ptmt.setString(6, vo.getNote()); return ptmt.executeUpdate()>0; } @Override public boolean doUpdate(Member vo) throws Exception { String sql = "update member set name=?,age=?,phone=?,birthday=?,note=? where mid = ?"; ptmt = this.conn.prepareStatement(sql); ptmt.setString(1,vo.getName()); ptmt.setInt(2,vo.getAge()); ptmt.setString(3, vo.getPhone()); ptmt.setDate(4, new java.sql.Date(vo.getBirthday().getTime())); ptmt.setString(5, vo.getNote()); ptmt.setString(6, vo.getMid()); return ptmt.executeUpdate()>0; } @Override public boolean doRemoveBatch(Set<String> ids) throws Exception { StringBuffer sql = new StringBuffer("delete from member where mid in("); Iterator<String> iter = ids.iterator(); while(iter.hasNext()){ sql.append("'").append(iter.next()).append("'").append(","); } sql.delete(sql.length()-1, sql.length()).append(")"); ptmt = this.conn.prepareStatement(sql.toString()); return ptmt.executeUpdate()>0; } @Override public Member findById(String id) throws Exception { String sql = "select mid,name,age,phone,birthday,note from member where mid =?" ; ptmt = this.conn.prepareStatement(sql); ptmt.setString(1, id); ResultSet rs = ptmt.executeQuery(); Member vo = null; while(rs.next()){ vo = new Member (); vo.setMid(rs.getString(1)); vo.setName(rs.getString(2)); vo.setAge(rs.getInt(3)); vo.setPhone(rs.getString(4)); vo.setBirthday(rs.getDate(5)); vo.setNote(rs.getString(6)); } return vo; } @Override public Member findByPhone(String phone) throws Exception { String sql = "select mid,name,age,phone,birthday,note from member where phone =?" ; ptmt = this.conn.prepareStatement(sql); ptmt.setString(1, phone); ResultSet rs = ptmt.executeQuery(); Member vo = null; while(rs.next()){ vo = new Member (); vo.setMid(rs.getString(1)); vo.setName(rs.getString(2)); vo.setAge(rs.getInt(3)); vo.setPhone(rs.getString(4)); vo.setBirthday(rs.getDate(5)); vo.setNote(rs.getString(6)); } return vo; } @Override public List<Member> findAll() throws Exception { String sql = "select mid,name,age,phone,birthday,note from member " ; ptmt = this.conn.prepareStatement(sql); ResultSet rs = ptmt.executeQuery(); List<Member> all = new ArrayList<Member>(); Member vo = null; while(rs.next()){ vo = new Member (); vo.setMid(rs.getString(1)); vo.setName(rs.getString(2)); vo.setAge(rs.getInt(3)); vo.setPhone(rs.getString(4)); vo.setBirthday(rs.getDate(5)); vo.setNote(rs.getString(6)); all.add(vo); } return all; } @Override public List<Member> findAll(Integer currentPage, Integer lineSize) throws Exception { String sql = "select * from (select mid,name,age,phone,birthday,note,rownum rn " + " from member where rownum <= ? ) temp " + " where temp.rn< ?" ; ptmt = this.conn.prepareStatement(sql); ptmt.setInt(1, currentPage*lineSize); ptmt.setInt(2, (currentPage-1)*lineSize); ResultSet rs = ptmt.executeQuery(); List<Member> all = new ArrayList<Member>(); Member vo = null; while(rs.next()){ vo = new Member (); vo.setMid(rs.getString(1)); vo.setName(rs.getString(2)); vo.setAge(rs.getInt(3)); vo.setPhone(rs.getString(4)); vo.setBirthday(rs.getDate(5)); vo.setNote(rs.getString(6)); all.add(vo); } return all; } @Override public List<Member> findAll(String colimn, String keyWord, Integer currentPage, Integer lineSize) throws Exception { String sql = "select * from (select mid,name,age,phone,birthday,note,rownum rn " + " from member where rownum <= ? and "+colimn+" like ?) temp " + " where temp.rn< ?" ; ptmt = this.conn.prepareStatement(sql); ptmt.setInt(1, currentPage*lineSize); ptmt.setString(2, "%"+keyWord+"%"); ptmt.setInt(3, (currentPage-1)*lineSize); ResultSet rs = ptmt.executeQuery(); List<Member> all = new ArrayList<Member>(); Member vo = null; while(rs.next()){ vo = new Member (); vo.setMid(rs.getString(1)); vo.setName(rs.getString(2)); vo.setAge(rs.getInt(3)); vo.setPhone(rs.getString(4)); vo.setBirthday(rs.getDate(5)); vo.setNote(rs.getString(6)); all.add(vo); } return all; } @Override public Long getCountAll() throws Exception { String sql = "select count(*) from member"; ptmt = this.conn.prepareStatement(sql); ResultSet rs = ptmt.executeQuery(); while(rs.next()){ return rs.getLong(1); } return 0L; } @Override public Long getCountAll(String colimn, String keyWord) throws Exception { String sql = "select count(*) from member where "+colimn+" like ?"; ptmt = this.conn.prepareStatement(sql); ptmt.setString(1, "%"+keyWord+"%"); ResultSet rs = ptmt.executeQuery(); while(rs.next()){ return rs.getLong(1); } return 0L; } }
数据层工厂
public class DAOFactory { private DAOFactory(){} public static <T>T getInstance(Class<T> cls,Connection conn){ try { Constructor<T> cos = cls.getConstructor(Connection.class); return cos.newInstance(conn); } catch (Exception e) { e.printStackTrace(); } return null; } }
业务层接口
public interface IMemberService { public boolean add(Member vo) throws Exception; public boolean edit(Member vo)throws Exception; public boolean remove(Set<String > ids)throws Exception; public Member get(String id) throws Exception; public List<Member> list() throws Exception; public Map<String,Object> lsit(Integer currenPage,Integer lineSize) throws Exception; public Map<String,Object> lsit(String column,String keyWord,Integer currenPage,Integer lineSize) throws Exception; }
业务层实现
public class MemberServiceImpl implements IMemberService { private DatabaseConnection dct = new DatabaseConnection(); @Override public boolean add(Member vo) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); if(dao.findById(vo.getMid())==null){ if(dao.findByPhone(vo.getPhone())==null){ if(vo.getAge()<=0){ vo.setAge(-1); } return dao.doCreate(vo); } } }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return false; } @Override public boolean edit(Member vo) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); Member temp = dao.findByPhone(vo.getPhone()); if(temp ==null){ return dao.doUpdate(vo); }else{ if(temp.getMid().equals(vo.getMid())){ return dao.doUpdate(vo); } } }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return false; } @Override public boolean remove(Set<String> ids) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); return dao.doRemoveBatch(ids); }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return false; } @Override public Member get(String id) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); return dao.findById(id); }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return null; } @Override public List<Member> list() throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); return dao.findAll(); }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return null; } @Override public Map<String, Object> lsit(Integer currenPage, Integer lineSize) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); Map<String, Object> map = new HashMap<String, Object>(); map.put("allMembers", dao.findAll(currenPage, lineSize)); map.put("memberCount",dao.getCountAll()); return map; }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return null; } @Override public Map<String, Object> lsit(String column, String keyWord, Integer currenPage, Integer lineSize) throws Exception { try{ IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, dct.getConnection()); Map<String, Object> map = new HashMap<String, Object>(); if(column==null||keyWord==null||"".equals(keyWord)){ map.put("allMembers", dao.findAll(currenPage, lineSize)); map.put("memberCount",dao.getCountAll()); }else{ map.put("allMembers", dao.findAll(column, keyWord, currenPage, lineSize)); map.put("memberCount",dao.getCountAll(column, keyWord)); } return map; }catch(Exception e){ e.printStackTrace(); }finally{ dct.close(); } return null; } }
业务层工厂
public class ServiceFactory { private ServiceFactory(){} public static <T>T getInstance(Class<T> cls){ try { return cls.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } }
添加Junit测试
public class IMemberServiceTest { private static String mid; private static String phone; static { Random ran = new Random(); int temp = ran.nextInt(1000); mid = " 测试ID" + temp; phone = "测试PHONE"+temp; } @Test public void testAdd() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); Member me = new Member(mid,"你好",25,phone,new Date(),"你好呀"); TestCase.assertTrue(im.add(me)); } catch (Exception e) { e.printStackTrace(); } } @Test public void testEdit() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); Member me = new Member(mid,"你好",35,phone,new Date(),"你好你好"); TestCase.assertTrue(im.edit(me)); } catch (Exception e) { e.printStackTrace(); } } @Test public void testRemove() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); Set<String> ids = new HashSet<String>(); ids.add(mid); TestCase.assertTrue(im.remove(ids)); } catch (Exception e) { e.printStackTrace(); } } @Test public void testGet() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); TestCase.assertNotNull(im.get(mid)); } catch (Exception e) { e.printStackTrace(); } } @Test public void testList() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); TestCase.assertNotNull(im.list()); } catch (Exception e) { e.printStackTrace(); } } @Test public void testLsitIntegerInteger() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); Member me = new Member(mid,"你好",25,phone,new Date(),"是个人"); TestCase.assertNotNull(im.lsit(1, 2)); } catch (Exception e) { e.printStackTrace(); } } @Test public void testLsitStringStringIntegerInteger() { try { IMemberService im = ServiceFactory.getInstance(MemberServiceImpl.class); Member me = new Member(mid,"你好",25,phone,new Date(),"你好你好"); TestCase.assertNotNull(im.lsit("mid",mid,1, 2)); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- [设计模式]DAO的实现方式探讨_Part II
- DAO设计模式---实现一个简单的注册(下)
- DAO到底是怎样一种设计模式?EJB是DAO设计模式的一种实现吗?
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
- J2EE之DAO设计模式及简单实现
- DAO设计模式---实现一个简单的注册(上)
- DAO设计模式的介绍与实现
- 实现DAO 设计模式
- Model1方式实现DAO设计模式
- DAO设计模式---实现一个简单的注册(中)
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
- 实现DAO 设计模式
- 实现DAO 设计模式
- jsp+javaBean+jdb 实现DAO设计模式
- 利用工厂设计模式实现业务层和dao层的解耦
- MVC设计中DAO模式实现的目标
- [设计模式]DAO的实现方式探讨_Part I
- DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户
- 使用单例和工厂设计模式实现dao实现层的解耦