- 浏览: 3367756 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
Model:
公共接口:
公共实现:
使用接口定义:
最终使用实现:
package com.pandy.model; import com.pandy.common.BaseObject; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import javax.persistence.*; import java.io.Serializable; import java.util.Date; @Entity @Table(name = "rh_sys_user") @NamedQueries( value = { @NamedQuery(name = "getAllByNamedQuery1", query = "from RhSysUser"), @NamedQuery(name = "getAllByNamedQuery2", query = "from RhSysUser") } ) public class RhSysUser extends BaseObject implements Serializable { private static final long serialVersionUID = 9812345L; private Long userId; private String code; private String loginName; private String userName; //...... @Id @Column(name = "user_id", unique = true, nullable = false) @GeneratedValue(strategy = GenerationType.AUTO) public Long getUserId() { return this.userId; } public void setUserId(Long userId) { this.userId = userId; } @Column(name = "code", length = 50) public String getCode() { return this.code; } public void setCode(String code) { this.code = code; } //...... }
公共接口:
package com.pandy.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Order; import java.io.Serializable; import java.util.List; import java.util.Map; public interface BaseDAO <T, PK extends Serializable>{ public void setSessionFactoryOverride(SessionFactory sessionFactory); public Session getSession(); T get(PK id); boolean exists(PK id); T save(T object); void remove(T object); void remove(PK id); void delete(T object); public int delete(Map<String,Object> map); List<T> getAll(); public List<T> getAll(List<Order> orderList); List<T> searchByField(String field,Object value, String orderField) throws RuntimeException; List<T> searchByFields(Map fields) throws RuntimeException; List<T> searchByFields(Map fields,Map<String,String> order) throws RuntimeException; T searchFirstByFields(Map fields) throws RuntimeException; T getFirstByCode(String code); List<T> findByNamedQuery(String queryName, Map<String, Object> queryParams); T findFirstByNamedQuery(String queryName, Map<String, Object> queryParams); }
公共实现:
package com.pandy.dao.impl; import com.pandy.dao.BaseDAO; import org.hibernate.*; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.ObjectRetrievalFailureException; import org.springframework.orm.hibernate4.support.HibernateDaoSupport; import javax.annotation.Resource; import javax.persistence.EntityManagerFactory; import java.io.Serializable; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class BaseDAOImpl<T, PK extends Serializable> extends HibernateDaoSupport implements BaseDAO<T, PK> { protected EntityManagerFactory entityManagerFactory; private Class<T> persistentClass; @Resource private SessionFactory sessionFactory; public BaseDAOImpl(final Class<T> persistentClass) { this.persistentClass = persistentClass; } public BaseDAOImpl(final Class<T> persistentClass, SessionFactory sessionFactory) { this.persistentClass = persistentClass; this.sessionFactory = sessionFactory; } @Autowired public void setSessionFactoryOverride(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); this.sessionFactory=sessionFactory; } public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { this.entityManagerFactory = entityManagerFactory; } public Session getSession() throws HibernateException { Session sess = getSessionFactory().getCurrentSession(); if (sess == null) { sess = getSessionFactory().openSession(); } return sess; } @SuppressWarnings("unchecked") public List<T> getAll() { Session sess = getSession(); return sess.createCriteria(persistentClass).list(); } public List<T> getAll(List<Order> orderList) { Session sess = getSession(); Criteria criteria = sess.createCriteria(persistentClass); criteria.setCacheable(true); if (orderList != null) { for (Order order : orderList) { criteria.addOrder(order); } } return criteria.list(); } public List<T> searchByField(String field, Object value, String orderField) throws RuntimeException { Session sess = getSession(); Criteria criteria = sess.createCriteria(persistentClass); criteria.setCacheable(true); if (field != null && field.trim().length() > 0) { criteria.add(Restrictions.eq(field, value)); } if (orderField != null && orderField.trim().length() > 0) { criteria.addOrder(Order.asc(orderField)); } return criteria.list(); } public List<T> searchByFields(Map fields) throws RuntimeException { Session sess = getSession(); Criteria criteria = sess.createCriteria(persistentClass); criteria.setCacheable(true); for (Object field : fields.keySet()) { String fieldName = field != null ? field.toString() : ""; if (!fieldName.equals("")) { Object fieldValue = fields.get(field); criteria.add(Restrictions.eq(fieldName, fieldValue)); if (fieldName.equals("orderField")) { criteria.addOrder(Order.asc(fieldValue.toString())); } } } return criteria.list(); } @Override public T getFirstByCode(String code) { Map<String, Object> param = new HashMap<String, Object>(); param.put("code", code); return searchFirstByFields(param); } @Override public T searchFirstByFields(Map fields) throws RuntimeException { List<T> list = searchByFields(fields); if (list != null && list.size() > 0) return list.get(0); return null; } @SuppressWarnings("unchecked") public T get(PK id) { Session sess = getSession(); IdentifierLoadAccess byId = sess.byId(persistentClass); T entity = (T) byId.load(id); if (entity == null) { throw new ObjectRetrievalFailureException(this.persistentClass, id); } return entity; } @SuppressWarnings("unchecked") public boolean exists(PK id) { Session sess = getSession(); IdentifierLoadAccess byId = sess.byId(persistentClass); T entity = (T) byId.load(id); return entity != null; } @SuppressWarnings("unchecked") public T save(T object) { Session sess = getSession(); return (T) sess.merge(object); } public void remove(T object) { Session sess = getSession(); sess.delete(object); } public void remove(PK id) { Session sess = getSession(); IdentifierLoadAccess byId = sess.byId(persistentClass); T entity = (T) byId.load(id); sess.delete(entity); } @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName, Map<String, Object> queryParams) { Session sess = getSession(); Query namedQuery = sess.getNamedQuery(queryName); namedQuery.setCacheable(true); for (String s : queryParams.keySet()) { namedQuery.setParameter(s, queryParams.get(s)); } return namedQuery.list(); } @SuppressWarnings("unchecked") public T findFirstByNamedQuery(String queryName, Map<String, Object> queryParams) { List<T> list = findByNamedQuery(queryName, queryParams); if (list != null && list.size() > 0) return list.get(0); return null; } @Override public void delete(T object) { getSession().delete(object); } @Override public int delete(Map<String, Object> map) { // TODO Auto-generated method stub if (map == null || map.size() == 0) { throw new RuntimeException("参数map不能为空或者size=0"); } String className = this.persistentClass.getName(); String name = className.substring(className.lastIndexOf(".") + 1); //System.out.println(name); String hql = "delete from " + name + " a where 1=1 "; for (String key : map.keySet()) { hql += " and a." + key + "=:" + key.replace(".", "_"); } Query query = getSession().createQuery(hql); for (String key : map.keySet()) { //TODO: add by Pandy: 这里可能会有问题,比如int的类型经过instanceof会是Integer么? Object value = map.get(key); key = key.replace(".", "_"); if (value instanceof Integer) { query.setInteger(key, (Integer) value); } else if (value instanceof Double) { query.setDouble(key, (Double) value); } else if (value instanceof Boolean) { query.setBoolean(key, (Boolean) value); } else if (value instanceof Date) { query.setDate(key, (Date) value); } else if (value instanceof Long) { query.setLong(key, (Long) value); } else { query.setString(key, value.toString()); } } return query.executeUpdate(); } @SuppressWarnings({"rawtypes", "unchecked"}) @Override public List<T> searchByFields(Map fields, Map<String, String> orders) throws RuntimeException { Session sess = getSession(); Criteria criteria = sess.createCriteria(persistentClass); criteria.setCacheable(true); for (Object field : fields.keySet()) { String fieldName = field != null ? field.toString() : ""; if (!fieldName.equals("")) { Object fieldValue = fields.get(field); criteria.add(Restrictions.eq(fieldName, fieldValue)); } } for (String field : orders.keySet()) { String order = orders.get(field); if ("desc".equalsIgnoreCase(order)) { criteria.addOrder(Order.desc(field)); } else { criteria.addOrder(Order.asc(field)); } } return criteria.list(); } }
使用接口定义:
package com.pandy.dao; import com.pandy.model.RhSysUser; public interface RhSysUserDao extends BaseDAO<RhSysUser, Integer> { public void test(); }
最终使用实现:
package com.pandy.dao.impl; import com.pandy.dao.RhSysUserDao; import com.pandy.model.RhSysUser; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.List; @Repository(value="rhSysUserDao") public class RhSysUserDaoImpl extends BaseDAOImpl<RhSysUser, Integer> implements RhSysUserDao{ public RhSysUserDaoImpl() { super(RhSysUser.class); } @Override public void test() { Session session = getSessionFactory().getCurrentSession(); Query query = session.createQuery("from RhSysUser"); List<RhSysUser> list = query.list(); if(list!=null && list.size()>0){ for(RhSysUser rhSysUser :list){ System.out.println(rhSysUser.getUserName()); } } } }
发表评论
-
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4065参考: Spring AOP中pointcut express ... -
写个mybatis的拦截插件,实现将所有执行的sql写入文件里
2016-05-12 15:59 5064原文 http://3131854.blog.51cto.co ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1589http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5476sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
ibatis扩展支持主键生成的方法(非数据库方式)
2016-04-13 22:01 945http://blog.csdn.net/warison200 ... -
ibatis 动态 Mapped Statement
2016-03-31 17:02 824http://www.cnblogs.com/lcngu/p/ ... -
分布式事务管理
2016-03-31 16:43 999http://my.oschina.net/pingpangk ... -
ibatis中动态查询表返回用resultClass="java.util.HashMap" 的问题
2016-03-11 10:49 1084http://blog.csdn.net/dyllove98/ ... -
Mybatis传多个参数(三种解决方案)
2016-03-07 17:46 1403http://my.oschina.net/ydsakyclg ... -
mybatis --mapper配置文件中大于小于怎么处理
2016-03-04 14:21 2328http://blog.csdn.net/nich002/ar ... -
Mybatis 数据库物理分页插件 PageHelper
2015-11-28 01:09 2748http://www.cnblogs.com/digdeep/ ... -
Druid 的SQL翻译功能如何使用
2015-11-27 21:40 1929Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接 ... -
[MyBatis]mapperLocations属性通配符的使用
2015-11-26 10:49 6166http://blog.csdn.net/szwangdf/a ... -
Hibernate Validation使用示例及讲解
2015-11-22 21:06 2708http://wdmcygah.iteye.com/blog/ ... -
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
2015-11-17 17:54 20023http://blog.csdn.net/weibing_hu ... -
SpringMVC + Mybatis + Shiro 权限整合
2015-11-14 14:06 8702详细见参考文章: 基于Spring + Spring MVC ... -
MyBatis3 的Mapper XML 文件详解
2015-11-13 11:54 1316MyBatis3 的Mapper XML 文件http://m ... -
HibernateDao.java
2015-11-10 15:55 1132http://my.oschina.net/lizy/blog ... -
Hibernate envers开发指南
2015-10-24 00:44 1197http://www.blogjava.net/xmatthe ... -
Spring+Ibatis数据库水平分库
2015-09-13 21:15 1263Spring+Ibatis数据库水平分库 http://blo ...
相关推荐
hibernate dao 操作(一个basedao全部搞定) 两种配置:oracle mysql,切换数据库只要把SessionFactory的配置文件改成对应就可以了 c3p0配置:mysql调试通过,oracle由于存在问题,未配置 spring配置式事务管理...
NULL 博文链接:https://zhaoshijie.iteye.com/blog/982232
实例,完整的一套简单的j2ee开发的模板
根据自定义的模板生成java代码. (vc6.0下编译通过)
BeetSql是一个全功能DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。 在开发效率上,无需注解,自动使用大量内置SQL,轻易完成增删...
利用eclipse的JET模板自动生成java文件来生成DAO,生成的DAO继承了一个通用的GenenicDao,GenenicDao用到了spring和hibernate. 提供源代码
b 编写实体类,加入hibernate注解,编写方法类测试类,在applicationContext.xml中添加hibernate模板类配置以及包扫描语句 。在类中添加spring bean注解。 c 测试类中 主动解析applicationContext.xml ,获取bean ...
一个用java相关技术搭建的后台服务端模板,目前仅仅包括基础模块和权限模块,用户可以结合自身业务进行相应扩展。 技术选型:Spring Data JPA、Hibernate、 Spring MVC、Layer等。 项目结构: tianti-common:...
HibernateCallback是一个接口,位于org.springframework.orm.hibernate3中。 该接口中只有一个方法doInHibernate(Session session)。 通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的...
MyEclipse的Hibernate配置的模板。 可以自定义反向工程策略,中的实体类,dao,和hbm文件
为了解决抽象各个Java实体基本的“增删改查”操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现。...
作为一个软件公司,开发团队非常重要,作为一个开发团队,人员配备、开发效率等都非常重要,但是开发效率包含很多,如:代码质量(扩展性、重构性等),但是这些都是建立在规范的代码之上来进行,在一个团队中,每个开发者都有...
16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 17-Hibernate实体映射笔记 18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1...
16-留言管理程序_使用Struts + DAO + Hibernate完成笔记.pdf 17-Hibernate实体映射笔记.pdf 18-Hibernate复合主键笔记.pdf 19-Hibernate实体层设计笔记.pdf 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记.pdf 20-22...
第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值...
16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 17-Hibernate实体映射笔记 18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1...
16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 17-Hibernate实体映射笔记 18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1...
这是一个工作模板项目,它展示了一个示例多层 J2EE Web 应用程序,其中包含Apache Wicket 、 Spring IoC 、 JPA/Hibernate集成和基于Bootstrap的前端。 它演示了MvC 、 SoC 、 IoC 、 DAO 、 Service layer和Open ...
一个最简单的SSH框架Struts 、 spring 、 Hibernate 在各层的作用 1 ) struts 负责 web 层 . ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。 在 struts-config...
租房系统软件,比较老的技术,采用jsp和struts2和hibernate技术