`
dreamoftch
  • 浏览: 498363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

项目中DAO的结构实现

阅读更多

 

 

首先是定义基础DAO接口:

 

 

package com.tch.test.ssh.dao;

import java.io.Serializable;
import java.util.List;

public interface BaseDao<E, PK extends Serializable> {
	/**
	 *  Created on 2013-9-16 
	 * <p>DiscripEion:保存对象</p>
	 * @reEurn void
	 */
	void save(E entity);
	/**
	 *  Created on 2013-9-16 
	 * <p>DiscripEion:更新对象</p>
	 * @reEurn void
	 */
	void update(E entity);
	/**
	 *  Created on 2013-9-16 
	 * <p>DiscripEion:删除对象</p>
	 * @reEurn void
	 */
	void delete(E entity);
	/**
	 *  CreaEed on 2013-9-16 
	 * <p>DiscripEion:根据id查询对象</p>
	 * @reEurn void
	 */
	E get(PK id);
	/**
	 *  Created on 2013-9-16 
	 * <p>DiscripEion:查询全部对象</p>
	 * @reEurn void
	 */
	List<E> getAll();
	
}

 

 

以及配置sessionFactory的基础类:

 

package com.tch.test.ssh.dao;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class CommomDao extends HibernateDaoSupport{

	@Resource(name="sessionFactory")//这里由于父类中的setSessionFactory()方法是final的,不能重写,所以要换个方法名字,在方法里面调用父类的setSessionFactory()方法
	public void setSuperSessionFactory(SessionFactory sessionFactory){
		this.setSessionFactory(sessionFactory);
	}
	
}

 

 实体类以及映射文件:

 

 

package com.tch.test.ssh.entity;
// default package

import java.util.Date;


/**
 * MyTime entity. @author MyEclipse Persistence Tools
 */

public class MyTime  implements java.io.Serializable {


    // Fields    

     private static final long serialVersionUID = 1L;
     private Integer id;
     private Date addTime;


    // Constructors

    /** default constructor */
    public MyTime() {
    }

    
    /** full constructor */
    public MyTime(Date addTime) {
        this.addTime = addTime;
    }

   
    // Property accessors

    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }

    public Date getAddTime() {
        return this.addTime;
    }
    
    public void setAddTime(Date addTime) {
        this.addTime = addTime;
    }

}

 

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.tch.test.ssh.entity.MyTime" table="t_times" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="addTime" type="java.util.Date">
            <column name="addTime" length="8" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

 

然后是基础DAO实现类:

 

 

package com.tch.test.ssh.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

public class BaseDaoImpl<E, PK extends Serializable> extends CommomDao implements BaseDao<E,PK>{

	private Class<E> clazz;
	
	@SuppressWarnings("unchecked")
	public BaseDaoImpl(){
		this.clazz = (Class<E>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];//反射方式获取子类泛型的实际类型
	}
	
	@Override
	public void delete(E entity) {
		getHibernateTemplate().delete(entity);
	}

	@SuppressWarnings("unchecked")
	@Override
	public E get(PK id) {
		return (E)getHibernateTemplate().get(clazz, id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<E> getAll() {
		return getHibernateTemplate().loadAll(clazz);
		/*String hql = "from "+clazz.getName();
		System.out.println("hql: "+hql);
		return getSession().createQuery(hql).list();*/
	}

	@Override
	public void save(E entity) {
		getHibernateTemplate().save(entity);
	}

	@Override
	public void update(E entity) {
		getHibernateTemplate().update(entity);
	}

}

 

接下来是接口演示:

 

 

 

package com.tch.test.ssh.dao;

import com.tch.test.ssh.entity.MyTime;

public interface TimeDao extends BaseDao<MyTime, Integer>{

	
}

 

 

实现类演示(只需要继承BaseDaoImpl类,就含有了基本的增删改查等方法):

 

 

 

package com.tch.test.ssh.dao;

import org.springframework.stereotype.Repository;

import com.tch.test.ssh.entity.MyTime;
@Repository("TimeDao")
public class TimerDaoImpl extends BaseDaoImpl<MyTime, Integer> implements TimeDao{

}

 

 

最近贴上applicationContext.xml的内容:

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<!-- 启动注入功能 -->
	<context:annotation-config />
	<!-- 启动扫描component功能 -->
	<context:component-scan base-package="com.tch.test" />
	<!-- 启动注解实物配置功能 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
	<!-- 数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
	</bean>
	<!-- 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!--读取数据库配置文件  -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mappingLocations">
			 <value>classpath:com/tch/test/ssh/entity/*.hbm.xml</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
	</bean>
</beans>

 

 加上测试类:

 

package test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tch.test.ssh.dao.TimeDao;
import com.tch.test.ssh.entity.MyTime;

public class TestSpring {

	public static void main(String[] args) throws Exception {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		TimeDao dao = (TimeDao) context.getBean("TimeDao");
		List<MyTime> entities = dao.getAll();
		for(MyTime entity:entities){
			System.out.println(entity.getId()+" , "+entity.getAddTime());
		}
	}
	
}

 

 

 

分享到:
评论
2 楼 dreamoftch 2013-11-14  
afeilf1 写道
你好,能把你的工程发给我下吗?我在学这个,我的邮箱是 22449217@qq.com 谢谢你

公司不能上QQ,你去网盘下载吧:http://pan.baidu.com/s/15TKee
1 楼 afeilf1 2013-11-14  
你好,能把你的工程发给我下吗?我在学这个,我的邮箱是 22449217@qq.com 谢谢你

相关推荐

    DAO与三层结构

    - 如何在实际项目中实现DAO和三层结构的结合 - 示例代码展示,如如何创建DAO接口和实现类,以及如何在业务逻辑层中使用DAO - 关于事务管理在三层结构中的处理,如何在DAO中控制事务边界 `Base_DAO.rar`可能包含的...

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

    在实验中,你需要创建一个具体的DAO实现类,该类将包含连接数据库、执行SQL语句、处理结果集等方法。例如,你可以为用户表创建一个UserDAO,包含增删改查等操作。 其次,MVC模式是一种将模型、视图和控制器分离开来...

    Struts + DAO实现基本分页

    总的来说,Struts+DAO实现的分页方案能够有效组织代码结构,提高代码的可读性和可维护性。虽然这种方式可能会增加一定的开发复杂性,但其带来的好处是显而易见的,尤其是在大型项目中,这样的设计模式能够显著提高...

    自己用的DAO实现类

    DAO(Data Access Object)模式是软件工程中一种用于数据库访问的常见设计模式,它将业务逻辑与数据操作分离开来,...实际开发中,DAO实现类的设计和实现会根据项目需求、团队规范以及使用的数据库技术进行适当调整。

    用DAO实现的用户登录系统

    在这个"用DAO实现的用户登录系统"中,我们可以看到以下几个关键知识点: 1. **DAO模式**:DAO模式的核心是提供一个接口或抽象类,定义了对数据库的基本操作,如增删查改。具体的数据库操作由实现了这个接口或继承了...

    工厂模式很DAO模式实现购物车

    本项目“工厂模式很DAO模式实现购物车”是使用Java语言实现的一个购物车系统,旨在帮助初学者理解并运用这两种设计模式。 首先,我们来看**工厂模式**。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳...

    java DAO模式实现 附源码

    在DAO实现中,通常会用到以下JDBC核心步骤: - 加载数据库驱动并建立连接。 - 创建Statement或PreparedStatement对象,用于执行SQL语句。 - 执行SQL,获取ResultSet。 - 处理ResultSet,将数据转化为实体对象。 - ...

    DAO模式实现增加删除修改操作

    DAO(Data Access Object)模式是软件开发中常用的一种设计模式,主要用于数据库操作的抽象...在实际项目中,根据需求,我们还可以进一步优化DAO模式,如使用Spring的JdbcTemplate或MyBatis等工具,以简化数据库操作。

    网上商城项目DAO

    网上商城项目DAO是Java开发中的一个重要组成部分,主要负责数据访问操作。在这个小型项目中,DAO(Data Access Object)层实现了与数据库的交互,遵循了JAVA Bean规范,保证了代码的可读性和可维护性。JAVA Bean是一...

    spring和mybatis整合(原始dao方式实现

    这需要我们在DAO实现类中注入SqlSessionFactory,然后创建SqlSession实例,调用其`openSession()`、`selectOne()`、`insert()`、`update()`、`delete()`等方法来执行SQL。 - 虽然这种方式灵活性较高,但会丢失...

    Dao类实现JAVA连接数据库及相应的增删改查功能

    在Java编程中,DAO(Data Access Object)模式是一种常用的设计...在文件`mytest`中,可能包含了具体的数据库表结构、测试数据以及使用DAO进行操作的示例代码。通过结合这些资源,你可以更深入地理解和实践上述概念。

    在VB中用DAO实现数据库编程.rar

    在这个"在VB中用DAO实现数据库编程"的压缩包中,我们可以学习如何利用DAO在VB环境中进行数据库操作。 首先,DAO提供了几个核心对象,包括Database、Recordset、TableDef、Field等,它们各自扮演着不同的角色: 1. ...

    项目model、Dao层、业务层建模工具类

    在IT行业中,建模是软件开发过程中的一个重要环节,它帮助我们清晰地理解系统的结构和功能,便于设计和实现。本资源提供了一种用于项目model、Dao层、业务层建模的工具类,旨在简化开发流程,提高代码复用性。下面...

    struts+dao实现的登录(连接数据库)

    在这个“struts+dao实现的登录(连接数据库)”项目中,我们将深入探讨这两个概念以及如何将它们应用于Oracle数据库的连接。 **Struts框架** Struts是一个开源的MVC(Model-View-Controller)框架,主要用于构建...

    数据库dao操作jdbc

    在DAO模式中,JDBC常作为底层实现,负责执行SQL语句。 以下是一些关于DAO操作和JDBC的关键知识点: 1. **连接数据库**:使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。需要提供数据库...

    JSP+DAO实现文件上传系统

    本项目“JSP+DAO实现文件上传系统”利用了这两种技术来实现一个文件上传功能,同时结合MVC(Model-View-Controller)设计模式,使得代码结构清晰,易于维护。下面将详细讲解这些知识点。 **1. JSP(JavaServer ...

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

    在给定的项目中,作者尝试简化这个过程,通过仅使用一个Servlet和一个DAO类来构建整个网站。这种方式旨在降低复杂性,提高开发效率。 Servlet在Java Web应用中扮演着服务器端处理程序的角色,它接收HTTP请求并返回...

    使用MVC+DAO完成用户登陆(代码+笔记)

    在IT行业中,MVC(Model-View-Controller)和DAO(Data Access Object)模式是两种常见的软件...文件"项目07_使用MVC+DAO完成用户登陆(代码+笔记)"应该包含了实现这一功能的详细步骤和代码示例,可以进一步学习和参考。

    DAO模式与分页显示

    DAO(Data Access Object)模式是软件开发中常用的一种设计模式,主要用于封装对数据库的操作,将数据访问层与业务逻辑层分离,以实现更清晰的代码结构和更好的可维护性。在DAO模式中,我们通常创建一个接口来定义...

    crm项目jsp+servlet+service+dao

    这个"crm项目jsp+servlet+service+dao"是一个基于Java技术实现的CRM系统实例,旨在帮助学习者理解如何在实际开发中运用这些技术。下面将详细阐述这个项目中涉及的关键知识点。 1. JSP(JavaServer Pages):JSP是...

Global site tag (gtag.js) - Google Analytics