`

一个的DAO数据访问层的实现

 
阅读更多

 

 

DAO数据库操作类实现在配置文件中的工厂化管理

一、搭建 Hibernate 环境

 

二、创建数据库操作接口和实现类

 

<!--[if !supportLists]-->1、  <!--[endif]-->接口

基类接口(所有接口都继承该接口):

package fr.itris.glips.dbconn.module.dao;

 

import java.io.Serializable;

import java.util.*;

 

import fr.itris.glips.dbconn.util.HibernateUtil;

 

public interface DAO {

 

       public void save(Object obj);

       public void saveOrUpdate(Object obj);

       public List<Object[]> listBySql(String sql);

       public List listAll();

       public List listAll(Class c);

       public List list(String hql);

       public List list(  String hql,   Object[] values);

       public   Class getEntiryClass();

       public Object get( Serializable id);

       public Object load( Serializable id);

      

       public Object get(Class c, Serializable id);

       public Object load(Class c,Serializable id);

}

实体类接口:

package fr.itris.glips.dbconn.module.dao;

 

public interface StationDAO extends DAO{

 

}

<!--[if !supportLists]-->2、  <!--[endif]-->实现类:

 

基类抽象实现类(所有实现类都继承该类):

package fr.itris.glips.dbconn.module.dao.impl;

 

import java.io.Serializable;

import java.util.List;

 

import fr.itris.glips.dbconn.module.dao.DAO;

import fr.itris.glips.dbconn.util.HibernateUtil;

 

public abstract class AbstractDAO implements DAO{

 

       @Override

       public void save(Object entity) {

              // TODO Auto-generated method stub

              HibernateUtil.save(entity);

       }

       @Override

       public void saveOrUpdate(Object entity) {

              // TODO Auto-generated method stub

              HibernateUtil.saveOrUpdate(entity);

       }

       @Override

       public List  listBySql(String sql) {

              // TODO Auto-generated method stub

              return HibernateUtil.listBySql(sql);

       }

 

       @Override

       public java.util.List listAll() {

              // TODO Auto-generated method stub

              return  listAll(getEntiryClass());

       }

      

       public java.util.List listAll(Class c) {

              // TODO Auto-generated method stub

              return HibernateUtil.listAll(c);

       }

      

 

       @Override

       public List list(String hql) {

              // TODO Auto-generated method stub

              return HibernateUtil.list(hql);

       };

      

       @Override

       public List list(String hql, Object[] values) {

              // TODO Auto-generated method stub

              return HibernateUtil.list(hql,values);

       }

      

       public Object get( Serializable id){

              return get(getEntiryClass(), id);

       }

       public Object load( Serializable id){

              return  load(getEntiryClass(), id);

       }

       public Object get(Class c, Serializable id){

              return HibernateUtil.get(c, id);

       }

       public Object load(Class c,Serializable id){

              return HibernateUtil.load(c, id);

       }

      

      

       abstract public Class getEntiryClass();

}

 

基类实现类:

package fr.itris.glips.dbconn.module.dao.impl;

 

import java.io.Serializable;

import java.util.List;

 

import fr.itris.glips.dbconn.module.dao.DAO;

import fr.itris.glips.dbconn.util.*;

 

public class BaseDAO extends AbstractDAO{

 

       @Override

       public Class getEntiryClass() {

              // TODO Auto-generated method stub

              return null;

       }

 

 

}

实体类实现类:

package fr.itris.glips.dbconn.module.dao.impl;

 

 

import fr.itris.glips.dbconn.module.bean.SVGConfigure;

import fr.itris.glips.dbconn.module.bean.SVGElement;

import fr.itris.glips.dbconn.module.bean.Station;

import fr.itris.glips.dbconn.module.dao.SVGConfigureDAO;

import fr.itris.glips.dbconn.module.dao.SVGElementDAO;

import fr.itris.glips.dbconn.module.dao.StationDAO;

 

public class StationDAOImpl extends AbstractDAO implements StationDAO{

 

    public Class getEntiryClass(){return Station.class;};

}

 

 

三、创建工厂管理 DAO 数据库操作类

 

1 创建 dao.xml key 代表接口, value 代表实现类

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <section name="DAO">

       <entry key="fr.itris.glips.dbconn.module.dao.DAO" value="fr.itris.glips.dbconn.module.dao.impl.BaseDAO"/>

       <entry key="fr.itris.glips.dbconn.module.dao.SVGElementDAO" value="fr.itris.glips.dbconn.module.dao.impl.SVGElementDAOImpl"/>

       <entry key="fr.itris.glips.dbconn.module.dao.SVGConfigureDAO" value="fr.itris.glips.dbconn.module.dao.impl.SVGConfigureDAOImpl"/>

       <entry key="fr.itris.glips.dbconn.module.dao.StationDAO" value="fr.itris.glips.dbconn.module.dao.impl.StationDAOImpl"/>

       <entry key="fr.itris.glips.dbconn.module.dao.SVGElementTypeDAO" value="fr.itris.glips.dbconn.module.dao.impl.SVGElementTypeDAOImpl"/>

   

   

    </section>

</configuration>

<!--[if !supportLists]-->2、  <!--[endif]-->创建 ResourcesManager (管理资源文件的类)

 

 

package fr.itris.glips.dbconn.resources;

 

import fr.itris.glips.library.*;

import fr.itris.glips.svgeditor.*;

import org.apache.batik.dom.svg.*;

import org.w3c.dom.*;

 

import javax.xml.parsers.*;

 

import java.util.*;

import java.io.*;

import javax.swing.*;

import java.net.*;

import java.awt.*;

import java.util.prefs.*;

 

/**

  * @author ITRIS, Jordi SUC

  *

  * The class managing the resources

  */

public class ResourcesManager {

      /**

     * the map associating the name of a xml document to this document

     */

    private final static HashMap<String, Document> cachedXMLDocuments=

    new HashMap<String, Document>();

      /**

     * create a document from tthe given file in the resource files

     * @param name the name of the xml file

     * @return the document

     */

    public static Document getXMLDocument(String name){

       

        Document doc=null;

       

        if(name!=null && ! name.equals("")){

           

            if(cachedXMLDocuments.containsKey(name)){

               

                doc=cachedXMLDocuments.get(name);

               

            }else{

               

                DocumentBuilderFactory docBuildFactory=

                  DocumentBuilderFactory.newInstance();

                

                String path="";

               

                try{

                    //parses the XML file

                    DocumentBuilder docBuild=docBuildFactory.newDocumentBuilder();

                    path=getPath("xml/"+name);

                     doc=docBuild.parse(path);

                }catch (Exception ex){ex.printStackTrace();}

               

                if(doc!=null){

                   

                    cachedXMLDocuments.put(name, doc);

                }

            }

        }

       

        return doc;

    }

   

    public static String getPath(String resource){

       

        String path="";

//System.out.println("resource="+resource);

        try{

            path=ResourcesManager.class.getResource(resource).toExternalForm();

        }catch (Exception ex){

        ex.printStackTrace();

        path="";

        }

//System.out.println("path="+path);

        return path;

    }

}

<!--[if !supportLists]-->3、  <!--[endif]-->创建 DAOConfig 类(解析 dao.xml 文件的类)

package  fr.itris.glips.dbconn.resources;

 

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Properties;

 

import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

 

import fr.itris.glips.dbconn.util.*;

import fr.itris.glips.svgeditor.NodeIterator;

 

 

public class DAOConfig {

     

    private static final String DAO_CONFIG_FILE="dao.xml";

    private static final String DAO_CONFIG_SECTION="DAO";

    public static synchronized HashMap load(){

       Document doc=ResourcesManager.getXMLDocument(DAO_CONFIG_FILE);

       Element root=doc.getDocumentElement();

       HashMap<Class,Class> map=new HashMap<Class,Class> ();

       if(root!=null){

 

           Node current=null;

           for(current=root.getFirstChild(); current!=null; current=current.getNextSibling()){

               

              String attr_name;

              if(current!=null && current instanceof Element){

//System.out.println(current.getNodeName());

                  if(current.getNodeName()!=null &&current.getNodeName().equals("section")){

                     attr_name=((Element)current).getAttribute("name");

                     Node current2;

                     if(attr_name!=null &&   attr_name.equals(DAO_CONFIG_SECTION)){

                        

                         for(NodeIterator it2=new NodeIterator(current); it2.hasNext();){

                            current2=it2.next();

                            if(current2!=null && current2 instanceof Element){  

                                if(current2.getNodeName()!=null&&current2.getNodeName().equals("entry")){

                                   String daoIface=((Element)current2).getAttribute("key");

//System.out.println("daoIface=="+daoIface);

                                   String daoImpl=((Element)current2).getAttribute("value");

                                   try{

                                       Class iface=ClassToolKit.loadClass(daoIface);

                                       Class impl=ClassToolKit.loadClass(daoImpl);

                                       map.put(iface, impl);

                                   }catch(ClassNotFoundException e){

                                       e.printStackTrace();

                                   }

                                }

                            }

                         }

                     }

                  }

              }

           }

       }

      

      

       return map;

    }

   

    public static void main(String[] args){

       load();

    }

}

 

<!--[if !supportLists]-->4、  <!--[endif]-->创建 DAO 工厂类

package fr.itris.glips.dbconn.factory;

 

import java.util.*;

 

import fr.itris.glips.dbconn.exception.DataAccessException;

import fr.itris.glips.dbconn.module.dao.*;

import fr.itris.glips.dbconn.module.dao.impl.BaseDAO;

import fr.itris.glips.dbconn.resources.DAOConfig;

 

public class DaoFactory {

    private static HashMap<Class,Class> daoClassMap =null;

    static Map<String,DAO> daoMap=new HashMap<String,DAO>();

     

    static {

       initial();

    }

    public static synchronized void initial(){

       if(null==daoClassMap){

           daoClassMap=DAOConfig.load();

       }

       System.out.println("daoMap.size="+daoClassMap.size());

    }

   

    /**

      *  获取 DAO 数据库操作类

      * @param daoInterface  DAO 接口

      * @return 实现类

      */

    public static DAO getDAO(Class daoInterface){

       DAO dao=daoMap.get(daoInterface.getName());

       if(dao==null){

           try {

              Class daoCl=getDAOClass(daoInterface);

              dao=(DAO) daoCl.newInstance();

              daoMap.put(daoInterface.getName(), dao);

           } catch ( Exception e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

              return null;

           }

            

          

       }

       return dao;

    }

   

   

    public static Class getDAOClass(Class daoInterface)  {

        

       Class dao=daoClassMap.get(daoInterface);

       if(null==dao){

           System.out.println("No Implementation found of DAO interface=?"+daoInterface.getName());

       }

       return dao;

    }

    public static void main(String[] args){

       System.out.println("getClass="+DaoFactory.getDAO( DAO.class));

       String sql="select name,aliasname from svgconfigure";

       DAO dao=new BaseDAO();

       List list=dao.listBySql(sql);

       for(Object arr:list){

           //System.out.println(arr[0]+","+arr[1]);

       }

    }

}

 

四、辅助类

1 、工具类

HibernateUtil 类( Hibernate 数据库操作类用到得工具类)

package fr.itris.glips.dbconn.util;

import java.io.Serializable;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Type;

import java.util.Collection;

import java.util.Iterator;

import java.util.List;

 

import org.apache.commons.beanutils.BeanUtils;

import org.hibernate.*;

import org.hibernate.cfg.*;

 

 

import fr.itris.glips.dbconn.page.PageInfo;

 

 

public class HibernateUtil {

 

       private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();

       private static   SessionFactory sessionFactory=null;

       static {

              initial();

       }

       public static void initial(){

              if(sessionFactory==null){

                     try{

                            sessionFactory=new Configuration().configure().buildSessionFactory();

                            /*Configuration cfg=new Configuration()

                            .addClass(events.Event.class)

                            .setProperty("hibernate.dialect","org.hibernate.dialect.MySQLInnoDBDialect")

                            .setProperty("hibernate.connection.datasource","java:com/env/jdbc/sample")

                            .setProperty("hibernate.order_update","true");

                            sessionFactory=cfg.buildSessionFactory();*/

                     }catch(Throwable ex)

                     {

                            ex.printStackTrace();

                     }    

              }

             

       }

       public static SessionFactory getSessionFactory(){

              return sessionFactory;

       }

       public static  Session getSession(){

              //String f="sd/df";

              return sessionFactory.openSession();

       }

       public static  Session getCurrentSession(){

              Session s=threadLocal.get();

              if(s==null  ){

                      

                     s=sessionFactory.openSession();

                     threadLocal.set(s);

              }

              return s;

       }

      

       public  static void closeCurrentSession(){

              Session s=threadLocal.get();

              if(s!=null){

                     s.close();

                     //s=null;

                     threadLocal.set(null);

              }

       }

      

        

      

       //----------- 保存 --------

       /**

         * save 后数据进入一级缓存,不会进入二级缓存

         * @param entity

         */

       public static  synchronized void save(Object entity){

              Session session=getCurrentSession();

              //Transaction tran=session.beginTransaction();

              session.save(entity);

              //tran.commit();

               

       }

       public static  synchronized void saveOrUpdate(Object entity){

              Session session=getCurrentSession();

              //Transaction tran=session.beginTransaction();

              session.saveOrUpdate (entity);

       //     tran.commit();

               

       }

      

       public void saveOrUpdateAll(final Collection entities){

              Session session=getCurrentSession();

              for (Iterator it = entities.iterator(); it.hasNext();) {

                     session.saveOrUpdate(it.next());

              }

       }

      

       public void persist(  final Object entity)   {

              Session session=getCurrentSession();

              session.persist(  entity);

       }

       public Object merge(final Object entity) {

              Session session=getCurrentSession();

              return session.merge(  entity);

       }

      

      

       //---------------- 修改 --------

       public void update(final Object entity ) {

              Session session=getCurrentSession();

              session.update(entity);

       }

       /**

         *

         * @param hql 也可用于删除,如: sql="delete TUser"

         * @return

         */

       public static int executeUpdate(String hql){

              Session session=getCurrentSession();

              //Transaction tran=session.beginTransaction();

              Query query=session.createQuery(hql);

              int n= query.executeUpdate();

              //tran.commit();

              return n;

       }

      

      

      

       public static void  delete(Object obj){

              Session session=getCurrentSession();

              //Transaction tran=session.beginTransaction();

              session.delete(obj);

              //tran.commit();

       }

      

      

       /**

         * @param sql 例如: sql="from TUser"

         */

       public static void delete(String hql){

              Session session=getCurrentSession();

              //Transaction tran=session.beginTransaction();

              session.delete(hql);

              //tran.commit();

       }

       public void deleteAll(final Collection entities){

              Session session=getCurrentSession();

              for (Iterator it = entities.iterator(); it.hasNext();) {

                     session.delete(it.next());

              }

       }

       public static void deleteById(Class cl,Serializable id){

              Object obj=load(cl,id);

              delete(obj);

       }

       public static int deleteAsScroll(String hql){

              Session session=getCurrentSession();

              Query query=session.createQuery(hql);

              ScrollableResults scRes=query.scroll();

              int i=0;

              //Transaction tran=session.beginTransaction();

              while(scRes.next()){

                     session.delete(scRes.get(i++));

              }

              //tran.commit();

              return i;

       }

      

       //------------- 查询

       /**

         * 内部缓存和二级缓存查找

         * 可返回代理类实例

         * @param cl

         * @param serializable

         * @return

         */

       public static Object load(Class cl,Serializable serializable){

              Session session=getCurrentSession();

              return session.load(cl, serializable);

       }

       /**

         * 内部缓存查找

         * 返回实体类

         * @param cl

         * @param serializable

         * @return

         */

       public static Object get(Class cl,Serializable serializable){

              Session session=getCurrentSession();

              return session.get(cl, serializable);

       }

      

       /**

         * 一次取出所有数据

         * 如果   hibernate.cache.use_query_cache FALSE (系统默认),则不会利用缓存

         * 否则,如果满足( 1 、完全相同的 SQL 重复执行, 2 、两次查询期间,对应的表没有发生过改变),利用缓存, key sql 语句

         * @param sql

         * @return

         */

       public static List list(String hql){

              Session session=getCurrentSession();

              Query query=session.createQuery(hql);

              // 设置二级缓存

              query.setCacheable(true);

              return query.list();

       }

       /**

         * Execute an HQL query, binding one value to a "?" parameter in the query string.

         * @param queryString

         * @param values

         * @return

         */

       public static List list(final String queryString, final Object[] values){

              Session session=getCurrentSession();

              Query queryObject = session.createQuery(queryString);

               

              if (values != null) {

                     for (int i = 0; i < values.length; i++) {

                            queryObject.setParameter(i, values[i]);

                     }

              }

              return queryObject.list();

       }

       /**

         * 一次取出一条数据

         * *iterate 可充分利用缓存( key 为主键 Id ),但是如果缓存中查询不到,会出现 N+1 次查询 **

         *

         * * 首先执行一条 Select SQL 以获得所有符合条件的数据 id( 先在缓存中查找,如果查找不到就到数据库中查找 )

         * 随即, iterate 方法首先在本地缓存中根据 id 查找对应的实体对象是否存在(类似 Session.load() 方法),

         * 如果缓存已经存在对应的数据,则直接以此数据对象作为查询结果,

         * 如果没找到,再执行相应的 Select 语句获得对应的库表记录

         * */

       public static Iterator iterate(String sql){

              Session session=getCurrentSession();

              Query query=session.createQuery(sql);

              // 设置二级缓存

              query.setCacheable(true);

              return query.iterate();

       }

      

       public static List listAll(Class c){

              Session session=getCurrentSession();

              Criteria criteria=session.createCriteria(c);

              // 设置二级缓存

              criteria.setCacheable(true);

              return criteria.list();

       }

       /**

         * 基于游标的数据遍历

         * @param sql

         * @return

         */

       public static  ScrollableResults  scroll(String hql){

              Session session=getCurrentSession();

              Query query=session.createQuery(hql);

              return query.scroll();

       }

      

       /**

         *

         * @param sql

         * @return

         */

       public static List listBySql (String sql){

              Session session=getCurrentSession();

              SQLQuery query=session.createSQLQuery(sql );

              // 设置二级缓存

              //query.setCacheable(true);

              return query.list();

       }

       public static PageInfo pageQuery(Class c,PageInfo page){

             

              Session session=getCurrentSession();

              Criteria criteria=session.createCriteria(c);

              // 设置二级缓存

              criteria.setCacheable(true);

              // 总数

              page.setTotalRows(criteria.list().size());

             

              int startIndex=(page.getPageNo()-1)*page.getPageSize();

              criteria.setFirstResult(startIndex);

              criteria.setMaxResults(page.getPageSize());

             

              page.setPageContent(criteria.list());

               

              return  page;

       }

        

      

       public static PageInfo pageQuery(String hql,PageInfo page){

              Session session=getCurrentSession();

              Query query=session.createQuery(hql);

              // 设置二级缓存

              query.setCacheable(true);

             

              page.setTotalRows(query.list().size());

              int startIndex=(page.getPageNo()-1)*page.getPageSize();

              query.setFirstResult(startIndex);

              query.setMaxResults(page.getPageSize());

             

              page.setPageContent(query.list());

              return  page;

       }

      

 

       public static void main(String[] args){

              System.out.println("session=="+HibernateUtil.getSession());

       }

      

 

}

 

 

ClassToolKit 类(根据类名生成类的类):

package fr.itris.glips.dbconn.util;

 

public class ClassToolKit{

 

       public static Class loadClass(String className)throws ClassNotFoundException{

              Class cls=null;

              try{

                     cls=Thread.currentThread().getContextClassLoader().loadClass(className);

              }catch(Exception e){

                     e.printStackTrace();

              }

              if(cls==null){

                     cls=Class.forName(className);

              }

              return cls;

       }

}

 

 

<!--[if !supportLists]-->3、  <!--[endif]-->异常类

package  fr.itris.glips.dbconn.exception;

 

public class DAOException extends RuntimeException{

 

    private Throwable throwable;

    public DAOException(String errorMassage){

       super(errorMassage);

    }

    public DAOException(Throwable throwable){

       this.throwable=throwable;

    }

    public DAOException(String errorMassage,Throwable throwable){

        super(errorMassage);

       this.throwable=throwable;

    }

    @Override

      public void printStackTrace() {

         if(throwable!=null){

             System.err.println("A dao   error has occured:");

             throwable.printStackTrace();

         }

      }

}

 

类图:

 

  • 大小: 7.9 KB
分享到:
评论

相关推荐

    基于泛型的通用Dao接口和hibernate的实现

    Hibernate 是一个流行的持久层框架,可以与泛型Dao接口集成,实现数据访问的持久化。 Hibernate 对泛型Dao接口的实现主要通过继承泛型Dao接口,使用 Hibernate 的 Session 对象来实现数据访问。 Hibernate 对泛型...

    java数据访问层的基本实现

    利用org.springframework.orm.hibernate3.support.HibernateDaoSupport 实现对java数据访问层的基本实现,包含增删改查分页方法。

    如何重构DAO模式

    可以降低商业逻辑层和数据访问层的耦合度,提高应用的可维护性和可移植性。 由于底层数据源实现变化时,DAO向客户端提供的接口不会变化,所有该模式允许DAO调整到不同的存储模式,而不会影响其客户端或者业务组件。...

    jdbc在DAO层实现事务

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    SpringBoot使用Spring-data-jpa简化数据访问层

    对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写...Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。

    JSP+DAO实现登陆模块

    用DAO的方式处理登陆模块的数据库连接和数据的处理等部分,使得jsp页面中不再有复杂的用户名和密码等的验证代码,实现了视图(界面设计)与业务逻辑的分离,使程序清晰明朗,具有更高的可读性。

    java-web_学生管理系统(完成实现三成架构)

    具体步骤如下: 1,设计数据表 2,在项目的JavaBean包中增加.上面数据表对应的类 3,在Dao层创建***dao接口,并设计关于数据表数据...(3)数据访问层(DAL,即Data Access Layer):Dao层     直接访问数据库的操作

    使用jdbc在DAO层实现了各DAO之间共享事务的示例

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    SSM框架下基本的mapper,dao,service,controller等相关文件的整理

    Dao层是SSM框架中的数据访问层,负责将业务逻辑与数据库之间的交互。Dao层通常使用MyBatis框架来实现数据访问。在上面的示例代码中,我们可以看到一个名为UserDao的Dao接口,该接口定义了多个方法,用于查询用户信息...

    SpringBoot实现动态切换数据源(含源码)

    在数据源切换的场景中,我们通常将数据源信息存储在 `ThreadLocal` 中,然后在数据访问层(如 DAO)中通过 `ThreadLocal` 来获取当前线程的数据源信息,从而动态地切换数据源。 `AbstractRoutingDataSource` 是 ...

    使用JDBC实现数据访问对象层(DAO)代码示例

    主要介绍了使用JDBC实现数据访问对象层(DAO)代码示例,具有一定参考价值,需要的朋友可以了解下。

    JSP+JavaBean+DAO+面向接口编程+工厂模式实现对数据增删改查

    一、项目前准备工作 1、eclipse 或者myeclipse 都可以 2、数据库(Oracle或者mysql或者其他也可以) 3、了解Javaweb相关知识 ...在dao下新建一个DBConn类用来处理对数据进行连接。 我使用的是Oracle数据

    课程信息管理JavaWeb三层架构+增删改查+Tomcat,servlet

    课程信息管理JavaWeb三层架构+增删改查+Tomcat,servlet,jsp是一个基于Java ...数据访问层(DAO):负责与数据库进行交互,实现对课程信息的存储和查询。 Tomcat:作为Web服务器,负责部署和运行该课程信息管理系统。

    JAVA DAO模式浅析.pdf

    DAO(数据访问对象)模式在java项目开发中的应用非常广泛,它能够实现数据库层和业务层的分离及跨数据库平台的移植。本文介绍了DAO模式的功能和实现方法。

    学生信息管理源码

    1.(持久层)数据访问层(dao) 2.(业务层)业务逻辑层(biz 或者services) 3.(表示层)表现层(view) entity:实体层,与数据库的某个表相关联。【modal,一般都是对象】 dao:数据访问层(data access ...

    毕业设计基于JavaWeb实现的一个备忘录系统项目源码.zip

    毕业设计基于JavaWeb实现的一个备忘录系统项目源码。难度适中,新手自己可操作 备忘录 介绍 后端部分基于Servlet、Jdbc实现. 前端部分基于Layui、jqury实现。 一个简单的前后端分离Demo,前后端交互JSON数据格式 ...

    JavaEE期末答辩总结.zip

    数据访问层(DAO层)是JavaEE项目中的一个重要组件,主要负责数据的访问。该层由若干DAO接口和MyBatis映射文件组成。接口的名称统一以Dao结尾,且MyBatis的映射文件名称要与接口的名称相同。 四、业务逻辑层 业务...

    java设计模式:DAO模式.doc

    一个典型的" " "'DAO实现有下列几个组件: " " " " "3 " " " "1 " " ". 一个DAO工厂类; " "4 " " " " " " "2 " "5 ". 一个DAO接口; " " " " " " " "6 "3 " " ". 一个实现DAO接口的具体类; " " " " " " " " "4 " ...

    购物商场实现

    org.fkjava.ec.mapper|dao: 数据访问层 org.fkjava.ec.domain|dto|pojo|vo: 数据传输层 org.fkjava.ec.exception: 异常 org.fkjava.ec.common: 工具类 第四步:mybaits-config.xml 第五步:写domain(类型别名)...

Global site tag (gtag.js) - Google Analytics