DAO设计模式---初步实现

  1. 简单Java类
  2. 数据库连接支持
  3. 业务层接口、工厂和实现
  4. 数据层接口、工厂和实现
  5. 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();
            }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值