简单的DAO设计模式

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

下面是简单DAO模式的代码

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

  1. public interface BaseDao {
  2.  
  3. public int executeUpdate(String sql,Object[] prame);
  4. }

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

  1. public class master implements Serializable {
  2.  
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = 1L;
  7. private int id;
  8. private String loginid;
  9. private String passWord;
  10. public int getId() {
  11. return id;
  12. }
  13. public void setId(int id) {
  14. this.id = id;
  15. }
  16. public String getLoginid() {
  17. return loginid;
  18. }
  19. public void setLoginid(String loginid) {
  20. this.loginid = loginid;
  21. }
  22. public String getPassWord() {
  23. return passWord;
  24. }
  25. public void setPassWord(String passWord) {
  26. this.passWord = passWord;
  27. }
  28. }

用户

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

  1. public interface MaterDao {
  2.  
  3. /**
  4. * 根据对象进行查询*/
  5. public master findMaster(master master);
  6. }

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

  1. public interface MasterServer {
  2. //用于访问Dao的实现类
  3. public boolean login(master ma);
  4. }
  1. public class MasterServerImpl implements MasterServer{
  2.  
  3. @Override
  4. public boolean login(master ma) {
  5. boolean isLoginid=false;
  6. MaterDao md=new MasterDaoMysqlImpl();
  7. master ma2=md.findMaster(ma);
  8. // System.out.println(ma2);
  9. if(null!=ma2){
  10. isLoginid=true;
  11. }
  12. return isLoginid;
  13. }
  14. }

服务公共接口的实现

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

  1. public class Dbutils {
  2.  
  3. //帮助类
  4. private static String driverClass="com.mysql.jdbc.Driver";
  5. private static String url="jdbc:mysql:///day02";
  6. private static String user="root";
  7. private static String password="root";
  8.  
  9. static{
  10. //加载驱动
  11. try {
  12. Class.forName(driverClass);
  13. } catch (ClassNotFoundException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. //获得connection对象
  18. public static Connection getConn() throws SQLException{
  19.  
  20. return DriverManager.getConnection(url, user, password);
  21. }
  22. //关闭资源
  23. public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
  24. if(null!=rs){
  25. try {
  26. rs.close();
  27. } catch (SQLException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. if(null!=stmt){
  32. try {
  33. stmt.close();
  34. } catch (SQLException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. if(null!=conn){
  39. try {
  40. conn.close();
  41. } catch (SQLException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }

访问数据库的帮助类

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

  1. public class MasterDaoMysqlImpl extends BaseDaoImpl implements MaterDao{
  2.  
  3. @Override
  4. public master findMaster(master master) {
  5.  
  6. Connection conn=null;
  7. PreparedStatement pstmt=null;
  8. ResultSet rs=null;
  9. master ma2=null;
  10. String sql="SELECT * FROM master WHERE loginid=? AND passWord=?";
  11.  
  12. try {
  13. conn=Dbutils.getConn();
  14. pstmt=conn.prepareStatement(sql);
  15. pstmt.setString(1,master.getLoginid());
  16. pstmt.setString(2,master.getPassWord());
  17. rs=pstmt.executeQuery();
  18.  
  19. if(rs.next()){
  20. ma2=new master();
  21. ma2.setId(rs.getInt("id"));
  22. ma2.setLoginid(rs.getString("loginid"));
  23. ma2.setPassWord(rs.getString("passWord"));
  24. }
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }finally{
  28. Dbutils.closeAll(rs, pstmt, conn);
  29. }
  30. return ma2;
  31. }
  32. }

用户Dao的实现

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

  1. public class TestMaster {
  2.  
  3. @Test
  4. public void testLoginid(){
  5. Scanner scanner = new Scanner(System.in,"UTF-8");
  6.  
  7. // 1.输入用户名
  8. System.out.println("请输入用户名:");
  9. String loginid = scanner.next();
  10.  
  11. // 2.输入密码
  12. System.out.println("请输入密码:");
  13. String password = scanner.next();
  14.  
  15. MasterServer ms=new MasterServerImpl();
  16.  
  17. master ma=new master();
  18. ma.setLoginid(loginid);
  19. ma.setPassWord(password);
  20. boolean isLoginid=ms.login(ma);
  21.  
  22. if(isLoginid){
  23. System.out.println("登录成功!");
  24. }else{
  25. System.out.println("账号或密码错误!");
  26. }
  27. }
  28. }

测试用户登录类

这只是本人这两天对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. android 开发随笔 - 开发环境搭建

    1.1 问题: 'tools.jar' seems to be not in Android Studio classpath. Please ensure JAVA_HOME points to J ...

  2. C#基础:集合

        C#中的数组实现为 System.Array 类的实例,它们只是集合类(Collection Classes)中的一种类型.集合类一般用于处理对象列表,其功能比简单数组要多,功能大多是通过实现 ...

  3. html5图片标签与属性

    标记:  标 记  说 明 <lmg> 图像 <Map> 图像映射 <Area> 图像映射中定义区域 <lmg>标记属性:  属 性  说 明 Src ...

  4. html中行内元素与块级元素的区别。

    在标准文档流里面,块级元素具有以下特点 1.总是在新行上开始,占据一整行: 2.高度,行高以及外边框和内边距都可以控制: 3.宽度始终是与游览器宽度一样,与内容无关: 4.它可以容纳内联元素和其他块级 ...

  5. SqlDbType与DbType这间的转换关系

    SqlDbType => DbType SqlDbType.BigInt DbType.Int64 SqlDbType.Binary DbType.Binary SqlDbType.Bit Db ...

  6. ios面试汇总

    http://www.360doc.com/content/15/0707/01/26281448_483232245.shtml

  7. 关于局域网内IIS部署网站,本机可访问,而网内其他用户无法访问问题的解决方法

    在Window7操作系统中安装配置好IIS后,在本地IIS上部署网站程序没有问题,但是局域网等远程用户不能正常访问网站程序,提示“Internet Explorer 无法显示该网页”. 问题解决思路如 ...

  8. (搬运工)国内顺利使用Google的另类技巧

    在特殊的地方和特殊的时间,流畅顺利使用Google的方法也会变得很特殊.分享一些奇葩的Google使用方法,通过下列网址也可以使用Google来搜索:http://www.GoogleStable.c ...

  9. java 时区处理机制(0时区转换到服务器时区)

    package com.globalroam.util; import java.util.Calendar; import java.util.Date; import java.util.Time ...

  10. phpMyAdmin中mysql的创建数据库时的编码的问题

    转载自新浪博客    Sean 一. mysql中utf8编码的utf8_bin,utf8_general_cs,utf8_general_ci的区别 utf8_general_ci 不区分大小写,这 ...