`

一个的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 数据访问对象

    这样的设计允许使用不同的数据库技术(如JDBC、Hibernate、MyBatis等)实现相同的业务逻辑,只需更换DAO的实现即可,这就是所谓的"数据访问层的抽象"。 DAO模式在Java开发中非常常见,特别是在企业级应用和Web应用...

    Asp.Net C# 数据访问层代码(源码)

    在数据访问层中,返回 DataSet 是一种常见的数据交换方式。下面是返回 DataSet 的代码实现: ```csharp public DataSet MySqlDataSet(string Sql, string tableName) { OpenConn(); //打开连接 SqlDataAdapter da...

    084集-数据访问层实现类的创建

    总的来说,“084集-数据访问层实现类的创建”这个教程将深入讲解如何在Android应用中构建高效的数据访问层,包括SQLite的使用、DAO设计、LiveData和Room的集成,这些都是Android开发中的核心技能。通过学习这部分...

    一个经典的数据库访问层实现

    在本案例中,我们讨论的是一个经典的数据库访问层实现,这通常涉及到面向对象的设计模式,如工厂模式、单例模式以及数据访问对象(DAO)模式。以下是对这个主题的详细解释: 1. 数据访问对象(DAO)模式:DAO模式是...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    DAO与三层结构

    业务逻辑层调用数据访问层的DAO对象来操作数据,然后对结果进行处理,最终返回给表现层。`Chapter2_DAO与三层结构.ppt`可能会详细讲解这部分内容。 3. 数据访问层:这一层包含DAO对象,负责与数据库的交互,执行SQL...

    使用DAO模式实现宠物数据更新

    DAO(Data Access Object)模式是一种常见的软件设计模式,主要用于数据库操作的封装,使得业务逻辑层与数据访问层解耦,提高代码的可复用性和可维护性。在本例中,我们将探讨如何使用DAO模式来实现宠物数据的更新...

    通用数据库访问模块,通用DAO类

    通用数据库访问模块(通常称为 DAO,Data Access Object)是一种软件设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO 类的主要目标是隔离业务逻辑层与数据存储层,使得应用程序可以独立于特定的数据库实现...

    Java Web实验六 采用 DAO 模式实现对数据库的访问方法, 利用 Servlet 实现 MVC 模式

    首先,DAO模式是一种用于分离业务逻辑层与数据访问层的模式。在该模式中,DAO类作为数据存取的接口,负责处理与数据库的所有交互。这样做的好处在于,业务逻辑层不必直接与数据库进行通信,而是通过调用DAO的方法,...

    简单DAO层示例

    在给定的`TestDao`中,我们可以猜测这是一个用于测试DAO层实现的类。它可能包含了对DAO方法的调用,用于验证DAO功能的正确性。在单元测试中,我们通常会使用Mock框架(如Mockito)来模拟数据库操作,避免实际访问...

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

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

    重构DAO

    在上面的代码中,我们可以看到,DAO模式与Abstract Factory模式结合使用,形成了一个完整的数据访问层。Abstract Factory模式用于创建DAO工厂,DAO工厂用于创建DAO对象,DAO对象用于访问数据源。 6. DAO模式的优缺 ...

    基于DAO工厂模式的三层架构示例项目源码

    4. 数据访问层的DAO接口和实现,每个DAO对应一个数据库表,包含增删改查等操作。 5. 相关配置文件,如数据库连接配置。 6. 可能还会有单元测试代码,用于验证各个层的正确性。 这个项目源码可以作为一个学习和参考...

    让java网站开发从此简单起来[一个项目只用一个Servlet和一个Dao类]demo

    Java网站开发通常涉及多个组件,如Servlet、DAO(数据访问对象)层以及前端Ajax交互。在给定的项目中,作者尝试简化这个过程,通过仅使用一个Servlet和一个DAO类来构建整个网站。这种方式旨在降低复杂性,提高开发...

    Service层和DAO层解析

    Service层和DAO层是软件开发中常见的两种设计模式,主要用于分离业务逻辑和数据访问操作。在Java Web开发中,它们通常被应用于三层架构或MVC(Model-View-Controller)模型中。 DAO(Data Access Object)层是负责...

    JSP的DAO模式留言板

    3. **数据访问层**:DAO实现,直接与数据库进行读写操作,为业务逻辑层提供数据服务。 **三、数据库设计** 首先,我们需要设计一个简单的数据库表,如`message_board`,包含`id`(主键,自增)、`username`...

    一个DAO通用模型

    DAO模式是一种数据访问层的设计模式,它定义了接口来对数据库或其他持久化存储进行操作,而具体的实现则封装在实现了该接口的类中。这样做的好处在于,业务逻辑层可以完全通过DAO接口进行数据操作,而不必关心底层的...

    Hibernate_通用DAO模式,一个写好的dao层

    总的来说,这个资源为开发者提供了一个高效的工具,通过使用Hibernate和通用DAO模式,可以快速构建数据访问层,同时保持代码的整洁和可维护性。在开发Java Web应用程序时,正确理解和运用这种模式,能大大提高开发...

    java数据访问层的基本实现

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

Global site tag (gtag.js) - Google Analytics