泛型于Dao中的应用案例一
2014-04-19 15:33
330 查看
泛型于Dao中的应用案例一
获取泛型类型方法:public Class<T> getCls() { Class<T> cls = (Class<T>) ((ParameterizedType) this.getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; return cls; }
案例代码:
项目图:
jar包:
IBaseDao.java:
package com.iw.dao; import java.util.List; public interface IBaseDao<T> { public void add(T t); public void delete(int id); public void update(T t); public T load(int id); public List<T> list(String hql,Object[] args); }
BaseDao.java:
package com.iw.dao; import java.lang.reflect.ParameterizedType; import java.util.List; import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.stereotype.Repository; @Repository("baseDao") public class BaseDao<T> implements IBaseDao<T> { private SessionFactory sessionFactory; protected Session session; private Class<T> cls; /** * 获取泛型class * * @return */ @SuppressWarnings("unchecked") public Class<T> getCls() { cls = (Class<T>) ((ParameterizedType) this.getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; return cls; } /** * 添加数据 */ @Override public void add(T t) { getSession().save(t); } /** * 删除数据 */ @Override public void delete(int id) { getSession().delete(this.load(id)); } /** * 更新数据 */ @Override public void update(T t) { getSession().update(t); } /** * 查询某用户 */ @Override public T load(int id) { return (T) getSession().get(getCls(), id); } /** * 查询一组数据 */ @Override public List<T> list(String hql, Object[] args) { org.hibernate.Query q = getSession().createQuery(hql); if (args != null) { for (int i = 0; i < args.length; i++) { q.setParameter(i, args[i]); } } return (List<T>) q.list(); } public SessionFactory getSessionFactory() { return sessionFactory; } /** * 通过spring注入sessionFactory * * @param sessionFactory */ @Resource(name = "sessionFactory") public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } /** * 获取session * * @return */ public Session getSession() { return this.getSessionFactory().getCurrentSession(); } }
IGroupDao.java:
package com.iw.dao; import com.iw.model.Group; public interface IGroupDao extends IBaseDao<Group> { }
GroupDao.java:
package com.iw.dao; import org.springframework.stereotype.Repository; import com.iw.model.Group; @Repository("groupDao") public class GroupDao extends BaseDao<Group> implements IGroupDao { }
Group.java:
package com.iw.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="t_group") public class Group { public Group() { } public Group(String name) { super(); this.name = name; } private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Group [id=" + id + ", name=" + name + "]"; } }
GroupDaoTest.java:
package com.iw.test; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.iw.dao.IGroupDao; import com.iw.model.Group; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/beans.xml") public class GroupDaoTest { private IGroupDao groupDao; @Resource public void setGroupDao(IGroupDao groupDao) { this.groupDao = groupDao; } @Test public void testAdd(){ Group g = new Group("天地一号"); groupDao.add(g); } @Test public void testUpdate(){ Group g = new Group(); g.setId(1); g.setName("中国英雄"); groupDao.update(g); } @Test public void testLoad(){ Group g = groupDao.load(1); System.out.println(g.getId()+"-->"+g.getName()); } @Test public void testList(){ List<Group> list =groupDao.list("from Group g", null); for(Group g : list){ System.out.println(g.getId()+"-->"+g.getName()); } } }
beans.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <context:annotation-config /> <context:component-scan base-package="com.iw" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!--配置连接池初始值 --> <property name="initialSize" value="1"></property> <!--当最少空闲连接时,连接数小于该值,就会自动申请一些连接 --> <property name="minIdle" value="1"></property> <property name="maxActive" value="100"></property> <property name="maxIdle" value="20"></property> <property name="maxWait" value="1000"></property> </bean> <context:property-placeholder location="/jdbc.properties" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <!--设置数据源 --> <property name="dataSource" ref="dataSource" /> <!--设置spring去哪个包中查找实体类 --> <property name="packagesToScan"> <list> <value>com.iw.model</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">false</prop> <prop key="hbm2ddl.auto">update</prop> </props> </property> </bean> <!--创建spring事务管理 --> <!--配置事务管理器 --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--配置AOP ,spring是通过AOP来管理事务 --> <aop:config> <!--设置pointcut,表明那些方法中加入事务 --> <aop:pointcut id="methods" expression="execution(* com.iw.dao.*.*(..))" /> <!--通过advisor来确定具体要加入事务处理的方法 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="methods" /> </aop:config> <!--配置那些方法要加入事务控制 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!--表示所有方法都加入事务控制 --> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> </beans>
jdbc.properties:
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_jdbctemplate jdbc.username=root jdbc.password=039815
log4j.properties:
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=warn, stdout log4j.logger.org.hibernate.tool.hbm2ddl=debug
相关文章推荐
- 框架学习前基础加强 泛型高级,注解,反射(泛型&注解)应用案例,IOC,Servlet3.0,动态代理,类加载器
- 39_泛型集合的综合应用案例
- 泛型简介,自定义泛型的应用及泛型在Dao层的应用
- 38 泛型的通配符扩展应用39 泛型集合的综合应用案例
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之三:hibernate4泛型dao的应用
- 动态加载用户控件应用案例
- JdbcDaoSupport应用
- [置顶] 最新Arcgis API for JS 展示WebGIS实际生产生活应用案例
- 公用文件夹应用案例
- 企业中squid+iptables多模块的综合应用案例
- (project)利用接口,继承,泛型封装dao数据访问层
- Samba 企业应用案例
- [应用案例]移动短信平台的推广建议
- MongoDB 应用案例
- 浅谈java的IO流及应用案例
- Zookeeper应用案例-实现分布式应用的(主节点HA)及客户端动态更新主节点状态
- 40_自定义泛型方法及其应用
- Zookeeper应用案例-分布式共享锁的简单实现
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- Devexpress 在(BI)的应用案例:raindrops