• 浅谈DAO智能合约DAPP模式系统开发技术及程序代码分析原理


    什么是dao模式?

    DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。在实际的开发中,应该将所有对数据源的访问操作进行抽象化后封装在一个公共API中。用程序设计语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。DAO模式实际上包含了两个模式,一是Data Accessor(数据访问器),二是Data Object(数据对象),前者要解决如何访问数据的问题,而后者要解决的是如何用对象封装数据。

    一、信息系统的开发架构
    客户层-------显示层-------业务层---------数据层---------数据库
    1.客户层:客户层就是客户端,简单的来说就是浏览器。
    2.显示层:JSP/Servlet,用于给浏览器显示。
    3.业务层:对于数据层的原子操作进行整合。
    4.数据层:对于数据库进行的原子操作,增加、删除等;
    二、DAO(Data Access Object)介绍对接V:StPv888
    DAO应用在数据层那块(对于数据库进行的原子操作,增加、删除等;),用于访问数据库,对数据库进行操作的类。
    在这里插入图片描述

    三、DAO设计模式的结构
    DAO设计模式一般分为几个类:
    1.VO(Value Object):一个用于存放网页的一行数据即一条记录的类,比如网页要显示一个用户的信息,则这个类就是用户的类。
    2.DatabaseConnection:用于打开和关闭数据库。
    3.DAO接口:用于声明对于数据库的操作。
    4.DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,但是不包括数据库的打开和关闭。
    5.DAOProxy:也是实现DAO接口,但是只需要借助DAOImpl即可,但是包括数据库的打开和关闭。
    6.DAOFactory:工厂类,含有getInstance()创建一个Proxy类。
    四、DAO的好处
    DAO的好处就是提供给用户的接口只有DAO的接口,所以如果用户想添加数据,只需要调用create函数即可,不需要数据库的操作。开发V+I8O系2857统8624
    五、DAO包命名
    对于DAO,包的命名和类的命名一定要有层次。
    1.Emp.Java
    package org.vo;
    import java.util.*;
    public class Emp{
    private int empno;
    private String ename;
    private String job;
    private Date hireDate;
    private float sal;
    public Emp(){
    }
    public int getEmpno(){
    return empno;
    }
    public void setEmpno(int empno){
    this.empno = empno;
    }
    public String getEname(){
    return ename;
    }
    public void setEname(String ename){
    this.ename = ename;
    }
    public Date getHireDate(){
    return hireDate;
    }
    public void setHireDate(Date hireDate){
    this.hireDate = hireDate;
    }
    public float getSal(){
    return sal;
    }
    public void setSal(float sal){
    this.sal = sal;
    }
    public String getJob(){
    return job;
    }
    public void setJob(String job){
    this.job = job;
    }
    }
    2.DatabaseConnection.java

    Java技术迷

    package org.dbc;
    import java.sql.*;
    public class DatabaseConnection{
    private Connection con = null;
    private static final String DRIVER = “com.mysql.jdbc.Driver”;
    private static final String USER = “root”;
    private static final String URL = “jdbc:mysql://localhost:3306/mldn”;
    private static final String PASS = “12345”;
    public DatabaseConnection()throws Exception{
    Class.forName(DRIVER);
    con = DriverManager.getConnection(URL,USER,PASS);
    }
    public Connection getConnection()throws Exception{
    return con;
    }
    public void close()throws Exception{
    if(con!=null){
    con.close();
    }
    }
    }
    3.IEmpDAO.java

    package org.dao;
    import java.util.List;
    import org.vo.*;
    public interface IEmpDAO{
    public boolean doCreate(Emp emp)throws Exception;
    public List findAll()throws Exception;
    public Emp findById(int empno)throws Exception;
    }
    4.EmpDAOImpl.java

    package org.dao.impl;
    import org.dao.;
    import java.sql.
    ;
    import org.vo.;
    import java.util.
    ;
    public class EmpDAOImpl implements IEmpDAO{
    private Connection con;
    private PreparedStatement stat = null;
    public EmpDAOImpl(Connection con){
    this.con = con;
    }
    public boolean doCreate(Emp emp)throws Exception{
    String sql = “INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)”;
    stat = con.prepareStatement(sql);
    stat.setInt(1,emp.getEmpno());
    stat.setString(2,emp.getEname());
    stat.setString(3,emp.getJob());
    stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));
    stat.setFloat(5,emp.getSal());
    int update = stat.executeUpdate();
    if(update>0){
    return true;
    }
    else{
    return false;
    }
    }
    public List findAll()throws Exception{
    String sql = “SELECT empno,ename,job,hiredate,sal FROM emp”;
    stat = con.prepareStatement(sql);
    ResultSet rs = stat.executeQuery();
    Emp emp = null;
    List list = new ArrayList();
    while(rs.next()){
    int empno = rs.getInt(1);
    String ename = rs.getString(2);
    String job = rs.getString(3);
    float sal = rs.getFloat(5);
    emp = new Emp();
    emp.setEmpno(empno);
    emp.setEname(ename);
    emp.setJob(job);
    emp.setHireDate(rs.getDate(4));
    emp.setSal(sal);
    list.add(emp);
    }
    return list;
    }
    public Emp findById(int empno)throws Exception{
    String sql = “SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?”;
    stat = con.prepareStatement(sql);
    stat.setInt(1,empno);
    ResultSet rs = stat.executeQuery();
    Emp emp = null;
    if(rs.next()){
    String ename = rs.getString(2);
    String job = rs.getString(3);
    float sal = rs.getFloat(5);
    emp = new Emp();
    emp.setEmpno(empno);
    emp.setEname(ename);
    emp.setJob(job);
    emp.setHireDate(rs.getDate(4));
    emp.setSal(sal);
    }
    return emp;
    }
    }
    5.EmpDAOProxy.java

    package org.dao.impl;
    import org.dao.;
    import java.sql.
    ;
    import org.vo.;
    import java.util.
    ;
    import org.dbc.*;
    public class EmpDAOProxy implements IEmpDAO{
    private DatabaseConnection dbc;
    private IEmpDAO dao = null;
    public EmpDAOProxy()throws Exception{
    dbc = new DatabaseConnection();
    dao = new EmpDAOImpl(dbc.getConnection());
    }
    public boolean doCreate(Emp emp)throws Exception{
    boolean flag = false;
    if(dao.findById(emp.getEmpno())==null){
    flag = dao.doCreate(emp);
    }
    dbc.close();
    return flag;
    }
    public List findAll()throws Exception{
    Listlist = dao.findAll();
    dbc.close();
    return list;
    }
    public Emp findById(int empno)throws Exception{
    Emp emp = dao.findById(empno);
    dbc.close();
    return emp;
    }
    }
    6.DAOFactory.java

    package org.dao.factory;
    import org.dao.;
    import java.sql.
    ;
    import org.vo.;
    import java.util.
    ;
    import org.dbc.;
    import org.dao.impl.
    ;
    public class DAOFactory{
    public static IEmpDAO getInstance(){
    IEmpDAO dao = null;
    try{
    dao = new EmpDAOProxy();
    }
    catch(Exception e){
    e.printStackTrace();
    }
    return dao;
    }
    }
    7.TestDAO.java

    package org.dao.test;
    import org.dao.factory.;
    import org.vo.
    ;
    import org.dao.;
    public class TestDAO{
    public static void main(String args[])throws Exception{
    Emp emp = null;
    for(int i=0;i<5;i++){
    emp = new Emp();
    emp.setEmpno(i);
    emp.setEname(“xiazdong-”+i);
    emp.setJob(“stu-”+i);
    emp.setHireDate(new java.util.Date());
    emp.setSal(500
    i);
    DAOFactory.getInstance().doCreate(emp);
    }
    }
    }
    通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。
    1
    2
    3
    4
    5
    6
    //对应
    String sql = “INSERT INTO emp_table(ename,job,sal,hiredate) VALUES(?,?,?,?)”;
    stat = (PreparedStatement) con.prepareStatement(sql);
    stat.setString(1,emp.getEname());
    stat.setString(2,emp.getJob());
    stat.setFloat(3,emp.getSal());

  • 相关阅读:
    KMP中的BuildConfig
    字节跳动2021首发485道Java岗面试题(含答案)
    京东云开发者| Redis数据结构(二)-List、Hash、Set及Sorted Set的结构实现
    Python综合案例(数据计算)
    SparkStreaming 案例实操 完整使用 (第十七章)
    Spring源码深度解析:九、bean的获取② - createBeanInstance
    bmp图片处理
    让 sdk 包静默升级的 SAO 操作,你见过几种?
    ES6之函数的扩展二
    【OpenCV 例程200篇】210. 绘制直线也会有这么多坑?
  • 原文地址:https://blog.csdn.net/m0_54849806/article/details/126282437