简单的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. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  2. python之面向对象(一)

    python编程分为三个阶段: 面向过程编程:根据业务逻辑从上到下垒 函数式编程:将某功能进行函数封装,使用时调用函数即可,减少代码重复量 面向对象编程:对函数进行分类和封装 理论上我们是比较鄙视面向 ...

  3. 转载:android——eclipse如何去除Ctrl+shift+R组合键查找到的.class文件

    转载自:http://blog.csdn.net/virgilli/article/details/22500409 AS里面的build文件下一堆的.class 文件,当你要定位资源文件的时候,有些 ...

  4. asp net 编程问题 实现下一篇 和上一篇效果

    首先是access数据库,有一个名为news的表,里面有三个字段,分别为id,classid 和name 其中id为主键,classid可以重复 现在有以下数据: id classid name 1 ...

  5. Activity-在ListFragment中为ListView增加空白视图

     有两种方法可以实现为ListView添加空白视图.但是原理都一样: 第一种方法是XML+代码添加: 1.定义emptyView视图 2.调用AdapterView的setEmptyView(empt ...

  6. VS2013以管理员身份使用

    Win8系统: 1.将C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe改为以管理员身份运行. 2.将 ...

  7. WebApi实现跨域功能

    在配置文件的system.webServer节点中加入以下配置信息 <httpProtocol> <customHeaders> <add name="Acce ...

  8. TortoiseSVN上次文件显示被锁定

    1.可以使用SVN clean up来清除锁定. 2.如果不是本目录锁定,系统提示上一层目录锁定,需要到上一层或者根目录中清除. 3.如果在根目录下都无法clean的话,一般采取的方法是另外找一个目录 ...

  9. C#之获取本地IP地址

    最近协助一个项目解决了一个获取IP地址的问题,手机客户端与WebService进行通讯,然后WebService通过TCP通讯把指令传递到另一台PC机上.在测试的过程中,总是会出现WebService ...

  10. C# 程序打包

    1:新建安装部署项目打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装项目,然后点击确定.(详细见下图) 此主题相关图片如下: 2:开始打包2.1 确定即可进入项目文件夹:双 ...