`

DAO连接数据库,也很好

 
阅读更多

预备知识:抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

 适用性:1.一个系统要独立于它的产品的创建、组合和表示时。

 

2.一个系统要由多个产品系列中的一个来配置时。

 

3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。

 

 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。

 DAO: Data Access Object.

:a Data Access Object provides the operations to create, delete, update, and find data in a database. (提供了对数据库增删改查的操作的方法. DTO: Data Transfer Objects(数据操作转换的对象,就是操作对象的一个类型的实例) -- ===================================================================================

 

1.连接工厂(Connection Factory):获得数据库的连接

 

2.DAO Factory: 获得不同的DAO

 

3.构建一个抽象工厂(Abstract Factory): 需要进行数据库的判断,根据不同的数据库提供不同的Factory 比如:OracleDaoFactory, SqlDaoFactory 以上的Factory均继承Factory.

 

 4.构建DAO步骤:

(1)需要一个DAO接口,接口;里面定义增删改查方法.

(2)用具体的实现类,实现接口中的方法,对于不同的数据库.创建不同的实现操作类.

 

5.调用步骤: (1)根据不同的数据库,从Connection Factory中获取连接.

(2)从DAO Factory中获得不同的DAO 工厂模式的优化: 将连接工厂封装到数据库工厂里面,对于具体的数据库进行具体的连接操作. 即:指定了数据库,那么我就可以进行指定的数据库连接操作了. -- ====================================================================================

具体实现如下: (仅实现了SQL Server2005 的连接,实现的一个添加的操作.其他的可以按照这个具体实现) 首先,定义一个DTO,我这里定义一个Student类: 属性为:学生姓名,密码和学号.代码如下:

 

public class Student {

 //学生姓名

    private String stuName;

 //密码

    private String stuPwd;

 //学生学号

   private int stuId;

  //get和set方法

 

  public String getStuName()

    {

        return stuName;

    }

 

 public void setStuName(String stuName)

{

    this.stuName = stuName;

  }

 

 public String getStuPwd() {

     return stuPwd;

    }

 

public void setStuPwd(String stuPwd)    {

   this.stuPwd = stuPwd;

 }

 

public int getStuId() {

       return stuId;

}

 

public void setStuId(int stuId) {

       this.stuId = stuId;

}

 }

/*------------------------------------------------------------------------------*/

现在,我们建立一个DAO的接口,定义对数据库student的增删改查操作具体的实现由确定数据库后进行操作.具体代码如下:

 

public interface IStuOperDao {

   /** * 添加学生 * @param stu 学生对象 */

 

public int addStu(Student stu);

 

 /** * 按照学号删除学生信息 * @param stuId 学生学号 */

 

 public int delStu(int stuId);

 

/** * 根据学生学号来获取学生信息 * @param stuId 学生学号 */

 

 public Student getStu(int stuId);

 

/** * 根据学号 修改学生信息 * @param stuId 学生学号 * @return 影响行数 */

 

 public int updateStu(int stuId); }

 

 /*--------------------------------------------------------------------*/

 

在这个接口的实现类中,对每个数据库我们都应该定义一个实现类,因为每种数据库的操作是不同的这也是我们在这里定义接口的好处,可以很方便地添加新的数据库实现. 这里具体实现的为SQL Server 2005的实现类.具体代码如下:

 

 public class SqlStuOperDAOImp implements IStuOperDao {

 

private Connection conn;

 

/** * 利用构造函数对conn进行初始化 * * @param conn */

 

 public SqlStuOperDAOImp(Connection conn) {

 

           this.conn = conn;

  }

 

@Override

 

 public int addStu(Student stu) {

       

       Statement stmt = null;

 

     //执行的SQL语句

 

    String sql = "insert into student values('" + stu.getStuName() + "','" + stu.getStuPwd() + "')";

 

    int num = 0;

 

    try {

 

   //获取连接的Statement对象

 

stmt = conn.createStatement();

 

 //执行SQL语句,返回影响的行数

 

num = stmt.executeUpdate(sql);

 } catch (SQLException e) {

e.printStackTrace(); }

 

finally{ //关闭资源.

 try { if (stmt != null) { stmt.close(); }

if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return num; }

 

@Override

 

public int delStu(int stuId) {

 // TODO Auto-generated method stub return 0;

 }

 

@Override

 

public Student getStu(int stuId) {

 

// TODO Auto-generated method stub return null;

}

 

@Override

 

 public int updateStu(int stuId) {

// TODO Auto-generated method stub return 0;

} }

 

/*--------------------------------------------------------------------*/

 

现在,开始创建一个抽象工厂,判断不同的数据库,对不同的数据库,实例化不同的子类. 同时定义一个抽象方法,让其子类实现具体的操作.具体代码如下: /** * 构建抽象DAO工厂 * 此工厂根据不同的数据库产品得到对应数据库工厂

* @author Mc * */

 

public abstract class DaoFactory {

 

//SQL Server数据库的标识 private static final int sqlFlag =1;

 

//Oracle数据库的标识 private static final int oracleFlag = 2;

 

/** * 根据数据库的不同,获得不同的DAO工厂 * @param flag * @return */

 

public static DaoFactory getDaoFactory (int flag){

 

switch (flag) {

 

 case sqlFlag: return new SqlDaoFactory();

 

 case oracleFlag: return new OracleDaoFactory();

 

  default: return null;

 

} }

 

//抽象方法,子类具体实现,不同的数据库子类实现其对应的方法

public abstract IStuOperDao getStuOperDao();

}

 

/*--------------------------------------------------------------------*/

 

其子类的实现类为对应的不同的数据库,我这里实现的是对SQL Server 2005数据库. 具体代码如下:

 

public class SqlDaoFactory extends DaoFactory {

 

//数据库名称 private static String url = "jdbc:sqlserver://127.0.0.1:1433;databasename=J1106";

 

 //数据库驱动 private static String driveName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

 

//数据库帐号 private static String userName = "sa";

 

//数据库密码 private static String userPwd = "123";

 

@Override public IStuOperDao getStuOperDao() {

 

//先建立连接 Connection conn =null; try {

 

 //第一步,加载驱动 Class.forName(driveName);

 if (conn == null) {

 

 conn = DriverManager.getConnection(url,userName,userPwd);

 

 } } catch (ClassNotFoundException e) {

 e.printStackTrace(); } catch (SQLException e)

 { e.printStackTrace(); }

 

 //返回对应的操作实现类

 

return new SqlStuOperDAOImp(conn);

 

} }

 

 /*------------------------------------------------------------------------------------*/

 

到这里,工厂模式已经基本实现了,那么我们用一个类来测试一下

 

public class Client { public static void main(String[] args) {

 

 //获得SqlServerDaoFactory

DaoFactory factory = DaoFactory.getDaoFactory(1);

 

 //获得StuOperDao

 

IStuOperDao iod = factory .getStuOperDao();

 

//示例化一个学生

 

 Student stu = new Student(); stu.setStuName("Mc"); stu.setStuPwd("123520");

 

 //添加用户 int num = iod.addStu(stu);

 

if (num > 0) {

System.out.println("添加成功~"); }

else {

System.out.println("添加失败");

} } }

/*------------------------------------------------------------------------------------*/ 最后打印出: 添加成功~ 然后在数据库中查询到已经添加成功了.

分享到:
评论

相关推荐

    C#编写的集dao+dbUtil+分页+自定义验证+自定义控件的asp.net网站实例

    本案例优势突出,简单通俗,移植性非常好(相对路径数据库技术),主要有以下特色: 1、相对数据库路径,通过db的数据库连接文件可用直接连接相对路径数据库,所以本人案例支持外部IIS的支持asp.net的动态服务器空间...

    dao设计模式DAO 设计模式之事务界定疯.pdf

    DAO 不负责处理事务、会话或连接,而把这交给一个工具类,封装所有关于数据库的操作。 把Session的获取,语句的关闭等放在这个类更好。通常的设计把数据 库的代码放到DAO的实现类中,这样如 果某个DAO实现类设计不良...

    支持多数据库的ORM框架ef-orm.zip

    大部分OLTP应用系统到最后都不免要使用SQL/JPQL,然而没有一个很好的方法解决SQL在多种数据库下兼容性的问题。 EF-ORM中采用了独特的SQL解析和改写技术,能够主动检查并确保SQL语句或者SQL片段在各个数据库上的兼容...

    DbConnectionManager.java

    数据库连接 ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象...

    Javaweb仓库管理系统项目源码+数据库+毕业设计

    2.采用C3P0连接数据库,配置文件、代码、jar包,均已就位,无需二次操作。 3.代码采用Service、Dao分层逻辑,清晰实用,代码简单易懂。 前端: 1.Jsp也是Java语法,无需学习新东西,直接写Java代码。 2.HTML仅仅只需...

    Servelt留言代码

    chm格式,代码一目了然,用到servlet,DAO模式 还用到了过滤器,是一个很好的留言本。有不明之处 请联系我哦,里面有我的QQ:

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    NHibernate实现了纯对象化的ORMap,在屏蔽数据库差异、面向对象方面做的非常好,但在访问与操作海量数据时其性能表现较差,也不易实现复杂的查询统计功能。NHibernate适合那些数据量不大、性能要求不高、复杂度不高...

    一个空的SSH框架,同时也支持servlet。扩展性能强,灵活度高。

    自己为一个汽车MIS系统架构的一个框架,主框架为SSH,同时根据需要...比如,仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。 此框架可能存在诸多不足,还希望大家多提提宝贵意见。

    基于java的保险业务管理系统的设计与实现.zip

    基于java的保险业务管理系统的设计与实现 本管理软件的开发工具为Myeclipse,前台页面使用JSP技术,后台数据库为...通过使用SSH框架,配合数据库的连接,使此系统里的每个模块都能很好的实现。因此在技术上是可行的。

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    SQL Server也可以很好地与Microsoft BackOffice产品集成。  5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。  6.对Web技术的支持,使用户能够很...

    SSH蓝龙OA易办系统

    Spring框架的依赖IoC(即依赖注入)很好的实现了控制反转。运用了业务代理模式使表示层与业务逻辑层分离,运用Spring框架提的DAO抽象,使业务逻辑层与持久化层分离,还使用了MyEclipse集成的CVS进行版本控制。

    Java swing实现学生信息管理系统源码+文档

    这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限,是Java学习者学习参考非常好的一个小项目,下面我们来看看...

    java-swing管理系统毕业设计源码-学生信息管理(文档+视频+源码)-计算机毕业设计源代码.rar

    这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限,是Java学习者学习参考非常好的一个小项目,下面我们来看看...

    java毕业设计之学生信息管理系统源码(视频+文档+源码).zip

    这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限,是Java学习者学习参考非常好的一个小项目,下面我们来看看...

    java课程设计之学生信息管理系统源码.zip

    这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限,是Java学习者学习参考非常好的一个小项目,下面我们来看看...

    JAVA课程设计-基于mysql的学生信息管理系统(1).doc

    程序结构设计培养 15 二、 书写习惯养成 15 三、 注意程序简洁 15 总结 16 参考文献 17 附录:项目源代码 18 一、 数据库连接(DbConnection.java) 18 二、 学生信息数据库管理(Student_Dao.java) 18 三、 欢迎...

    AppFramework_V1.0

    NHibernate实现了纯对象化的ORMap,在屏蔽数据库差异、面向对象方面做的非常好,但在访问与操作海量数据时其性能表现较差,也不易实现复杂的查询统计功能。NHibernate适合那些数据量不大、性能要求不高、复杂度不高...

    AppFramework_V1.0_New

    NHibernate实现了纯对象化的ORMap,在屏蔽数据库差异、面向对象方面做的非常好,但在访问与操作海量数据时其性能表现较差,也不易实现复杂的查询统计功能。NHibernate适合那些数据量不大、性能要求不高、复杂度不高...

    ewcms_v3:SpringMVC 和 Shiro

    Tomcat从6.X升级到7.X(8.X对异步消息支持不是很好) 把所有JS放到页面底部 修改所有Dao,并使Dao继承PagingAndSortingRepository接口,简化代码 使用动态组合进行查询 引入Logback,能打印详细SQL语句(包括传入的参数...

    sshLearnV5.0--2020年1月16日.zip

    ssh的基本框架,开发工具idear,使用maven管理包,实现了基本的页面跳转,可以成功运行,拥有完整的一条demo线,使用数据库mysql8.0,tomcat7.09版本;通过jap发送去请求,...在学习java底层基础来源的时候很好的demo

Global site tag (gtag.js) - Google Analytics