DAO运用实例

原创 2005年05月31日 15:54:00

=============Student.java==========
import java.sql.*;
public class Student implements java.io.Serializable{
private String id;
private String name;
private Date birthday;

public Student(){}
public Student(String id, String name, Date birthday){
this.id = id;
this.name = name;
this.birthday = birthday;
}

public String getId() { return id; }
public void setId(String id) { this.id = id; }

public String getName() { return name; }
public void setName(String name) { this.name = name; }

public Date getBirthday() { return birthday; }
public void setBirthday(Date birthday) { this.birthday = birthday; }
}

=================Course.java======================
public class Course implements java.io.Serializable{
private String id;
private String name;
private String description;

public Course() {}
public Course(String id, String name, String description){
this.id = id;
this.name = name;
this.description = description;
}

public String getId() { return id; }
public void setId(String id) { this.id = id; }

public String getName() { return name; }
public void setName(String name ) { this.name = name; }

public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
}

==============SMdao.java==================
import java.sql.*;
public interface SMdao {
public Student createStudent(String id, String name, Date birthday);
publc Course createCourse(String id, String name, String description);

public Student findStudent(String id);
public Course findCourse(String id);

public void clean();
}

==============FileSMdaoImpl.java==============
import java.util.Properties;
import java.sql.*;
import java.io.*;

public class FileSMdaoImpl implements SMdao {
private Properties pro;
private final static String SFILE_URL = "student.file.url";
private final static String CFILE_URL = "course.file.url";
public FileSMdaoImpl(Properties pro){
this.pro = pro;
}

public Student createStudent(String id, String name, Date birthday) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
Student stu = null;

try {
fos = new FileOutputStream(pro.getProperty(FILE_URL), true);
oos = new ObjectOutputStream(fos);
stu = new Student(id, name, birthday);
oos.writeObject(stu);
} catch(Exception e) { stu = null; }
finally{
try { if(oos != null) oos.close(); } catch(Exception e){}
try { if(fos != null) oos.close(); } catch(Exception e) {}
}

return stu;
}

public Course createCourse(String id, String name, String description){
return null;
}

public Student findStudent(String id) {
return null;
}

public Course findCourse(String id) {
return null;
}

public void clean() {}
}
==============DBSMdaoImpl.java==============
import java.sql.*;
import java.util.Properties;

public class DBSMdaoImpl implements SMDao {
private Connection con;
private final static String DBDRV = "db.driver";
private final static String DBURL = "db.url";
private final static String DBUSER = "db.user";
private final static String DBPASSWD = "db.password";

public DBSMdaoImpl(Properties pro) {
try {
Class.forName(pro.getProperty(DBDRV));
String user = pro.getProperty(DBUSER);
String passwd = pro.getProperty(DBPASSWD);
if(user != null)
con = DriverManager.getConnection(pro.getProperty(DBURL),
user, passwd);
else
con = DriverManager.getConnection(pro.getProperty(DBURL));
} catch(Exception e){}
}

public Student createStudent(String id, String name, Date birtyday) {
if(con == null) return null;
Student stu = null;
PreparedStatement stm = null;

try {
stm = con.prepareStatement("insert into student(id, name, birthday) " +
                                                            "values(?, ?, ?)");
stm.setString(1, id);
stm.setString(2, name);
stm.setDate(3, birthday);

if(stm.executeUpdate() > 0)
stu = new Student(id, name, birthday);
}catch(Exception e){}
finally{
try {if(stm != null) stm.close();}
catch(Exception e) {}
}

return stu;
}

public Course createCourse(String id, String name, String desc) { return null; }
public Student findStudent(String id) { return null; }
public Course findCourse(String id) { return null; }

public void clean() {
try {
if(con != null) con.close();
}catch(Exception e) {}
}
}

===============SMdaoFactory.java===============
import java.util.*;

public class SMdaoFactory {
Properties pro;
public static final String TYPE_FILE = "file";
public static final String TYPE_DB = "database";
private String type;
      private static SMdaoFactory factory;
    static{  factory = new SMdaoFactory();}

private SMdaoFactory() {

}

public static SMdaoFactory newInstance() { return factory; }

public void setType(String type) { this.type = type; }

public void setProperties(Properties pro) { this.pro = pro; }

public SMdao createSMdao() {
if(type.equals(TYPE_FILE))
return new FileSMdaoImpl(pro);
else
return new DBSMdaoImpl(pro);
}
}


=================Main.java=========================================
import java.io.*;
import java.util.*;
import java.sql.*;
public class Main{
public static void main(String args[]){
Properties pro = new Properites();
try {
pro.load(Main.class.getResourceAsStream("conf.properties");
}catch(Exception e) {
e.printStackTrace();
System.exit(1);
}

SMdaoFactory factory = SMdaoFactory.newInstance();
factory.setType(SMdaoFactory.TYPE_DB);
factory.setProperties(pro);
SMdao dao = factory.createSMdao();
GregorainCalendar calendar = new GregorainCalendar();
calendar.set(Calendar.YEAR, 1975);
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 21);
java.sql.Date birthday = new java.sql.Date(calendar.getTimeInMills());
Student stu = dao.createStudent("12345", "George", birthday);
}
}
==============conf.properties===================
db.driver=COM.pointbase.jdbc.jdbcUniversalDriver
db.url=jdbc:pointbase:server://george/sample
db.user=pbpulic
db.password=pbpublic

student.file.url=student
course.file.url=course

DAO: Data Access Object,数据访问对象,通常定义成接口(interface)。由于所要访问的数据保存在不同的数据源中,但商业逻辑相同,所以通过实现相同的接口达到访问不同数据源的目的。

由于访问的数据的实现依赖于不同的数据源,因此构造这些实现的类的实例会不同。为了屏蔽构造的复杂性,我们可以创建一个工厂类(factory)构造不同的实例来返回一个DAO的引用。

对应于每一个实体(eg:SmisStudent),可以有一个DAO的具体实现(eg:SmisStudentManager,最好还有对应表的处理eg:SmisStudentTab有空我会给出样本代码)
同时为了实现数据库无关,SmisStudentManager须含有一个带数据库连接Connection con的参数的构造函数,该Manager内部所有的操作均用这个连接作为数据库连接的唯一途径,数据库操作都封装在该Manager中,包含add(..,con),update(..,con),delete(..,con),findByWhere(String[] where,Connection con)(根据条件查询,辅助方法),
public SmisStudent findByPK(String stuId,Connection con);
public Connection findByName(String stuName,Connection con);
...更多findByXXX方法

jsp,javaBean,DAO之间的简单混合运用实例

jsp代码 Login.jsp String path = request.getContextPath(); String basePath = request.getScheme...

小结:实例解析DAO设计模式工作流程(无框架)

昨儿学Spring感觉对DAO设计模式一知半解,就扒了框架自己写了一个实例。花了一整天时间,不过收获很大,趁着没忘赶紧记录一下,希望以后有时间再来改进。 一:概述:     概念就不赘述...

Spring DAO入门实例

  • 2010年03月11日 16:42
  • 43KB
  • 下载

ibatis-dao框架中相关实例域存在原因总结

有关ibatis-dao组件部分的框架剖析和业务流程在《iBATIS 框架源码剖析》一书中写的已经比较详细。具体内容就不在这里写出来了,今天就把自己看过之后的几条心得和分析跟大家分享一下。写的不是很全...

J2EE之DAO设计模式简介与实例

在JAVA编程的时候, 有时候看起来非常直接的实现却非要用设计模式转若干个弯去实现他, 这似乎显的很多余,但是采用一些成熟的设计模式,会使程序更加的健壮,松耦合以及好维护和扩展.  DAO 设计模式...
  • Dancen
  • Dancen
  • 2012年02月19日 23:53
  • 2246

Spring的DAO模块数据库操作实例

Spring的DAO模块提供了对了JDBC、Hibernate、JDO等DAO层支持。DAO模块依赖于 ,MyEclipse自带的Spring DAO类库没有这两个类库,需要自己添加。 下面以保存...

maven2之m2eclipse使用手册之四编写通用Dao实例(二)

由于msn有字数限制所以只能分批贴,请见谅 公共Dao层部分: BasicDaoIf:通用dao层接口,由于是基于1.0版本难免有点bug还没修正,请勉强参考,这里只是贴出测试部分的代码与所调用的...
  • anfly25
  • anfly25
  • 2011年12月21日 13:53
  • 454

Mybatis 接口编程中dao 层接口没有注解和<bean> 为什么能被实例化为bean??

Mybatis 接口编程中dao 层接口没有注解和 为什么能被实例化为bean??相信不少人有过这个疑问,我自己带着这个疑问好久了!我自己写dao 层接口都是自己加上@Repository这个注解,但...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DAO运用实例
举报原因:
原因补充:

(最多只允许输入30个字)