简单的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. javascript定时器:setTimeout与setInterval

    概述: setTimeout:在指定的延迟时间之后调用一个函数或者执行一个代码片段,只执行一次: setInterval:周期性地调用一个函数(function)或者执行一段代码,重复执行: 语法格式 ...

  2. 【hoj】1604 cable master

    简单,二分法,可是在oj上交的时候会有精度的限制,所以仅仅能把数扩得大一点,并且在扩的时候为防止尾数会自己主动生成一些非零数,所以还是自己吧扩到的位置设置为0,还有输出时由于%.2lf会自己有4设5入 ...

  3. 带中文索引的ListView 仿微信联系人列表

    因为各种原因,项目经理和产品经理把我做的东西给否定了,所以决定分享出去. 主要功能: 1 .带中文索引的ListView 2.自己定义顶部搜索视图,能够对返回button,搜索button加入事件监听 ...

  4. [Redux] Extracting Presentational Components -- AddTodo

    The code to be refactored: let nextTodoId = 0; class TodoApp extends Component { render() { const { ...

  5. OC教程10-NSNumber具体

    NSNumber简单介绍 NSNumber是数字的对象形式,由于在OC的数组和字典中仅仅同意存放对象,所以我们有时候须要转化 我们普通的类型是   123 那么 NSNumber类型的是  @123, ...

  6. Sybase自增字段跳号的解决方法

    Sybase自增字段跳号原因及影响: 在Sybase数据库中如果数据库在开启的情况下,因为非正常的原因(死机.断电)而导致数据库服务进程强制结束. 那么自动增长的字段将会产生跳号的情况,再往数据表里面 ...

  7. 使用Xcode和Instruments调试解决iOS内存泄露【转】

    转载自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露 ...

  8. 安卓状态栏通知Status Bar Notification

    安卓系统通知用户三种方式: 1.Toast Notification 2.Dialog Notification 3.Status Bar Notification Status Bar Notifi ...

  9. bug调试大全

    http://www.jianshu.com/p/9fc9fd89bfee http://www.cocoachina.com/ios/20150929/13598.html

  10. sublime快捷键保存

    快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...