您的位置:首页 > 编程语言 > Java开发

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

2016-09-01 17:21 459 查看
简单Java类

数据库连接支持

业务层接口、工厂和实现

数据层接口、工厂和实现

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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 设计模式