简单的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. SearchFlight_Joker

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. sql 根据时间获取数据

    获取当月数据 MONTH(时间字段)=MONTH(GETDATE()) and year(时间字段)=year(GETDATE()) 计算两个时间差了多少分钟 DATEDIFF(mi,'7:00',c ...

  3. RAID磁盘阵列原理

    磁盘阵列(Redundant Arrays of independent Disks,RAID),有“价格便宜具有冗余能力的磁盘阵列”之意.原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数 ...

  4. Java并发编程之ConcurrentHashMap

    原文地址:http://www.iteye.com/topic/1103980 ConcurrentHashMap 是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功 ...

  5. C# 如何获取错误所在行数

    两种方法,一种是利用error.StackTrace,另外一种是try-catch找到错误行数,具体如下: 一.error.StackTrace代码 int i = ex.StackTrace.Ind ...

  6. (二)原生JS实现 - 事件类方法

    事件处理 - 添加事件 var addEventHandler = function (oTarget, sEventType, fnHandler) { if (oTarget.addEventLi ...

  7. pygame实现的黑白块游戏

    运行时需要pygame库. 下载地址:http://files.cnblogs.com/files/zzrom/white.zip 程序截图:

  8. JAVA $ JSP

    1. java中数据类型分为两种   基本数据类型:数值型,字符型,布尔型   引用数据类型:类,接口,数组 基本数据类型所占空间固定,有别与C++,java中没有无符号数byte:1字节short: ...

  9. jsp笔记,包括编译指令和动作指令,九大对象等

    jsp基础知识 不包括HTTP协议,只有jsp的基础知识,包括表达式,代码片段,jsp九大对象等. 编译指令是在jsp被转换成selvet时,使用的. 而动作指令,是在每次客户端请求时动态执行.

  10. 【7】用Laravel5.1开发一个简单的博客系统

    声明: 本教程参考Jeffrey way 在laracasts.com上的视频教程,感谢Jeffrey way为大家带来的精彩教程,本教程如有侵权,请及时告知,联系邮箱wanglv93@gmail.c ...