简单的Dao设计模式

时间:2022-12-06 08:48:31

简单的DAO设计模式

这两天学习到了DAO(Data Access Object 数据存取对象)设计模式。想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很好的把它们结合起来运用。我个人比较喜欢有挑战的东西,比如项目,在学iOS阶段做了个项目感觉那段时间自己的思维和逻辑提升很快。我个人认为遇到困难不要怕,而应该感到高兴,因为只有遇到了困难才知道自己的不足,当困难解决的时候你必定会收获不少,困难解决时一阵欣喜必会涌上心头。也许是很久没遇到逻辑性很强的东西了,所以刚接触到DAO模式感觉还是有点懵,但是当我花时间好好梳理的时候,其实发现也并没有想象的那么难,虽然也遇到了困难,但是困难解决时感觉一阵欣喜涌上心头。DAO模式主要是分层原理,主要有数据库访问层、DAO层(主要是转换器的作用)、服务层、客户层(用户的操作等功能);每一层各司其职互不干涉,当维护或者新增功能时会比较方便,不需要更改很多的代码,只需要实现公共的接口方法,如果需要实现特有的方法,就定义一个接口继承公共的接口在里面定义特有的方法然后实现即可。这是我个人对DAO模式的理解,如果有不恰当的地方希望大神不要喷,希望多指教。

下面是简单DAO模式的代码

定义一个公共的接口实现增、删、改

public interface BaseDao {

   public int executeUpdate(String sql,Object[] prame);
}

定义一个用户类,里面实现了封装,会了序列化,还实现了Serializable接口,这是一个特殊的接口,里面没有方法,只是标记作用,在数据库建表就靠自己了。

public class master implements Serializable {

    /**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String loginid;
private String passWord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginid() {
return loginid;
}
public void setLoginid(String loginid) {
this.loginid = loginid;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}

用户

用户特有的方法:只实现了登录功能用到查找的方法,其他没实现,所以上面的接口方法并没有用到,只是为了更好的理解而已

public interface MaterDao {

    /**
* 根据对象进行查询*/
public master findMaster(master master);
}

服务层的公共接口类对它的实现

public interface MasterServer {
//用于访问Dao的实现类
public boolean login(master ma);
}
public class MasterServerImpl implements MasterServer{

    @Override
public boolean login(master ma) {
boolean isLoginid=false;
MaterDao md=new MasterDaoMysqlImpl();
master ma2=md.findMaster(ma);
// System.out.println(ma2);
if(null!=ma2){
isLoginid=true;
}
return isLoginid;
}
}

服务公共接口的实现

访问数据库的帮助类,里面实现了访问数据库和关闭

public class Dbutils {

    //帮助类
private static String driverClass="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql:///day02";
private static String user="root";
private static String password="root"; static{
//加载驱动
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获得connection对象
public static Connection getConn() throws SQLException{ return DriverManager.getConnection(url, user, password);
}
//关闭资源
public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
if(null!=rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=stmt){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=conn){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

访问数据库的帮助类

用户DAO的实现,主要是访问数据库

public class MasterDaoMysqlImpl extends BaseDaoImpl implements MaterDao{

    @Override
public master findMaster(master master) { Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
master ma2=null;
String sql="SELECT * FROM master WHERE loginid=? AND passWord=?"; try {
conn=Dbutils.getConn();
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,master.getLoginid());
pstmt.setString(2,master.getPassWord());
rs=pstmt.executeQuery(); if(rs.next()){
ma2=new master();
ma2.setId(rs.getInt("id"));
ma2.setLoginid(rs.getString("loginid"));
ma2.setPassWord(rs.getString("passWord"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
Dbutils.closeAll(rs, pstmt, conn);
}
return ma2;
}
}

用户Dao的实现

最后就可以实现用户的登录功能,用一个测试类

public class TestMaster {

    @Test
public void testLoginid(){
Scanner scanner = new Scanner(System.in,"UTF-8"); // 1.输入用户名
System.out.println("请输入用户名:");
String loginid = scanner.next(); // 2.输入密码
System.out.println("请输入密码:");
String password = scanner.next(); MasterServer ms=new MasterServerImpl(); master ma=new master();
ma.setLoginid(loginid);
ma.setPassWord(password);
boolean isLoginid=ms.login(ma); if(isLoginid){
System.out.println("登录成功!");
}else{
System.out.println("账号或密码错误!");
}
}
}

测试用户登录类

这只是本人这两天对DAO模式的理解,其实理解并不深刻,希望大家多多指教。

简单的Dao设计模式的更多相关文章

  1. Dao设计模式简单实现

    一.什么是Dao设计模式 Dao设计模式封装了操作具体数据库的细节,对业务层提供操作数据库的接口,因此降低了业务层代码与具体数据库之间的耦合,有利于人员分工,增加了程序的可移植性. Dao设计模式中主 ...

  2. Java Dao设计模式

    一.信息系统的开发架构   客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...

  3. JavaBean中DAO设计模式介绍(转)

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  4. JavaBean在DAO设计模式简介

    一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Se ...

  5. JavaBean中DAO设计模式介绍

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是client,简单的来说就是浏览器. 2.显示层:JSP/ ...

  6. DAO设计模式(转)

    J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码. 我们先来回顾一下DAO设计模式和数据访问对象. DAO基础  ...

  7. JavaBean中DAO设计模式简介

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  8. DAO设计模式

    DAO设计模式 DAO设计模式简介: DAO设计模式可以减少代码量,增强程序的可移植性,提高代码的可读性. DAO(数据库操作对象)设计模式是 JavaEE 数据层的操作.主要由五部分组成: 1.数据 ...

  9. JavaWeb技术(二):DAO设计模式

    1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...

随机推荐

  1. 常用的一些复杂SQL语句

    1.根据表中的birthday统计年龄段人数: //以下代码表示查询出来后的结果集添加一列字段 cast('20以下' as char) as age SELECT COUNT((DATE_FORMA ...

  2. Bootstrap 模态框(Modal)插件

    原文链接:http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html Bootstrap 模态框(Modal)插件 模态框(Modal)是覆 ...

  3. Python3基础 casefold 将字符串中的所有字符变成小写

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. Emgu CV的一个异常的解决方法

    今年组里有大项目落我头上了,并不能像去年一样回家还能搞搞Cocos2dX,一把老泪流了下来... 回到正题,由于组里需要做一个显示板的自动测试项目,涉及到Computer Vision.不得不说,这才 ...

  5. requests库下载图片的方法

    方法: 传入图片url,requests.get()方法请求一下,将源码以二进制的形式写在本地即可. 以前一直以为requests库中有特定的方法获取图片,类似urllib.request.urlre ...

  6. ORM基础之ORM介绍和基础操作

    一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...

  7. hdu-2147-博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  8. Windows和linux通过命令互传文件

    下载pscp https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 放在Windows的c:windows/system32下 ...

  9. DB2 移动数据总结一

    数据移动参考的连接 IMPORT http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cm ...

  10. AR资料汇总学习

    ARKit 从入门到精通 http://www.chinaar.com/ARKit/5210.html ARKit 框架的学习 http://blog.csdn.net/biang*g/art ...