DAO设计模式的理解

为了降低耦合性,提出了DAO封装数据库操作的设计模式。

它可以实现业务逻辑与数据库访问相分离。相对来说,数据库是比较稳定的,其中DAO组件依赖于数据库系统,提供数据库访问的接口。

一般的DAO的封装由以下另个原则:

  •   一个表对应一个表,相应地封装一个DAO类。
  •   对于DAO接口,必须由具体的类型定义。这样可以避免被错误地调用。

 在DAO模式中,将对数据的持久化抽取到DAO层,暴露出Service层让程序员使用,这样,一方面避免了业务代码中混杂JDBC调用语句,使得业务落实实现更加清晰。

 通常我们创建一个包,用于保存DAO接口,再创建一个包,用于保存DAO接口的实现类即可。

 下面展示一个DAO接口实例Manage:

public interface Manage {
    /*插入(insert)操作--->方法名(插入的数据1,插入的数据2,……)-->返回T|F*/
    public boolean insert(String name,String classes,String score);
    /*获取全表(select *)操作-->利用Bean,一行对应一个Bean-->返回一个承载Bean的Collection*/
    public Collection select();
    /*删除(delete)操作-->方法名(where处需要的数据)--->返回T|F*/
    public boolean delete(String id);
    /*获取指定行对象---->方法名(where处需要的数据)---->返回一个承载Bean的List*/
    public List up_select(String id);
    /*修改指定行对象---->方法名(修改数据1,修改数据2,……,where处需要的数据)---->返回T|F*/
    public boolean update(String name,String classes,String id);
}

 下面我们针对一张具体的表对Manage创建实现类,比如表名为test,数据库名为bean。

public class ManageInfo implements Manage {
    final private String url="jdbc:mysql://localhost:3306/bean";
    final private String user="root";
    final private String password="root";
    @Override
    public boolean insert(String name, String classes, String score) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url, user, password);
        String sql="insert into test(name,classes,score) Values(?,?,?)";
        PreparedStatement st=conn.prepareStatement(sql);
        st.setString(1,name);
        st.setString(2,classes);
        st.setString(3,score);
        int count=st.executeUpdate();
        if(count<=1){
            return  true;
        }else {
            return false;
        }
    }

其余实现近乎相同,若返回Bean类型的Collection,则从ResultSet里读取出每一行的数据。

将一行的数据,存入一个Java Bean中(为Bean 创建对应类型的成员变量),并将Set好的Bean存入Add入Collection。

再读取下一行的数据,重复操作,最后返回Collection即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

apt-get update更新源时,出现“Hash Sum mismatch”问题

当使用apt-get update更新源时,出现下面“Hash Sum mismatch”的报错,具体如下: root@localhost:~# apt-get...

42250
来自专栏程序猿DD

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射: /error,当处理中抛出异常之后,会转到该请求...

31460
来自专栏技术碎碎念

Jsp语法、指令及动作元素

一、JSP的语法 1、JSP的模板元素:(先写HTML)    就是JSP中的那些HTML标记    作用:页面布局和美化 2、JSP的Java脚本表达式:  ...

45360
来自专栏运维

kvm 虚拟机 转换成vmware虚拟机

# qemu-img convert Monitor.img –O vmdk ./Monitor.vmdk

50010
来自专栏小灰灰

SpringMVC返回图片的几种方式

主要借助的是 HttpServletResponse这个对象,实现case如下

28070
来自专栏javathings

Spring 中的自动装配,如果遇到多个实例如何处理?

标记了@Autowired 注解的字段/方法,会由 Spring 容器自动的赋值一个实例化的对象。@Autowired 总是采用 byType 的方式实现自动装...

1K10
来自专栏JackieZheng

照虎画猫写自己的Spring——依赖注入

前言 上篇《照虎画猫写自己的Spring》从无到有讲述并实现了下面几点 声明配置文件,用于声明需要加载使用的类 加载配置文件,读取配置文件 解析配置文件,需要将...

21680
来自专栏闻道于事

Spring框架(二)反射机制, 注入, 单例模式, 自动装载, 延迟加载

 Spring反射机制: 1, 通过spring来获取一个对象的实例 1 <bean id="user" class="com.model.User">...

80380
来自专栏Android 研究

Android跨进程通信IPC之4——AndroidIPC基础1

这里强烈建议把前面两篇文章看一遍,因为前面两篇文章对后面大家对android的IPC的理解帮助很大,本片文章主要内容如下

14630
来自专栏玩转JavaEE

SpringBoot中自定义参数绑定

本文是vhr系列的第十篇,vhr项目地址https://github.com/lenve/vhr 正常情况下,前端传递来的参数都能直接被SpringMVC接...

48750

扫码关注云+社区

领取腾讯云代金券