DAO运用实例

=============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方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhw79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值