对于后端开发者来说,经常跟数据库打交道,hibernate mybatis是常用是的持久化层,mybatis简单、灵活,易上手,但要写大量的sql;Hibernate太复杂,但对基于对象的操作则方便些,但是对于复杂的查询也是比较麻烦。但在实际项目中,大部分语句是比较简单的,只有部分会比较复杂些,但若简单的语句写多了也是麻烦。此DAO层正是由此而来,基于Hibernate开发,解决小sql的问题,对于复杂的sql,还需要自己手写。
该DAO的功能就是增删改查,以及搜索:
1. Dao类,大部分增删改查都在这里面,只要将实际用到的Dao继承此类就行。
2. QueryObject类,提供查询功能,使查询更加简单。
3. QueryUpdateObject类:提供更新功能,这个比较简单,具体可以参考项目中的实例。
4. QueryDeleteObject类:提供删除功能,这个比较简单,具体可以参考项目中的实例
5. QuerySearchObject类:基于Hibernate Search,实现搜索功能。
使用
使用简单,只需要用一个抽象BaseDao继承此Dao,再用实际用到的Dao类继承Dao,只需要传入SessionFactory:
public abstract class BaseDao
@Autowired
protected SessionFactory sessionFactory;
protected SessionFactory getSessionFactory() {
return sessionFactory;
}
}
先说Dao类,就是常见的dao,有一些增删改查的功能,但由于查询要传入sql,在简单的sql比较多的时候,感觉不是太方便,这个和常用的差不多。但也增加了一些常用功能:比如对单个属性的查询可以直接传入,加了一些统计查询,此处不再赘述,具体内容可以参见Dao类,或者TestDao类。
QueryObject类:这个是此项目的核心,该项目就是为了使查询更加方便。
下面的例子均以相应dao bean已注入或者已传入为前提。
// 查询等于条件,返回单个对象
User user = userDao.getQueryObject().andEqual("name", "125").getOne();
// 查询等于条件,返回list
List
// 查询关联表等于条件,返回list
List
// 查询多个条件
List
// 排序
List
List
// 分组
List
List
// 关联表
List
List
list = addressDao.getQueryObject().leftJoin("user").andEqual("id", 5L).list();
// 关联且抓取
List
.groupBy("address.user.age") .list();
// in
List
// distinct
List
// 只查询需要的字段
List
List
// 获取单个值
Integer age = userDao.getQueryObject().andEqual("name", "125").getSingleValue("age");
// 统计,是否去重
Long num = userDao.getQueryObject().andEqual("name", "bbbb").count(false);
// 聚合函数
String max = userDao.getQueryObject().max("name");
int minAge = userDao.getQueryObject().min("age");
Number num = companyDao.getQueryObject().sum("address.user.age");
采用链式操作,使查询更简单、易读。
QuerySearchObject类:搜索功能,采用Hibernate Search功能,实现全文本搜索,可以针对文本、范围以及距离搜索:
// 查找
List
// 加过滤条件
List
list2 = addressDao.getQuerySearchObject().match("是", "street").sentence("user.name", "工有")./*sentence("user.id", 10).*/list(0, 20);
// 范围
List
List
// 若是使用BigDecimal类的数字,要转换,并且查找时要指定之前转成了什么类型
List
// 排序
List
// 获取附近30公里以内的人
List
// 获取附近30公里,且返回每个user的距离
List
上面列出的是一些常见功能,还有一些其它功能请见相应的实现类,或者测试类。
项目下载地址:https://github.com/yanghf2000/HibernateDAO.git
版权声明:本文为博主原创文章,转发请注明出处: http://blog.csdn.net/baidu_32448463/article/details/79637882