Hibernate简易原生DAO的实现
写在最前:
初学Hibernate,在尝试把JDBC项目移植到Hibernate的过程中,碰到了不少的麻烦,最让人心烦意乱的自然是SQL语句改动造成的代码混乱。其实不难,网上的解决方案有很多, 不过..大都是在Spring中使用封装好的HibernateDaoSupport完成DAO对象的CRUD操作。
不幸的是我的项目中没有用到Spring,狠下心来找了找官方文档,自己写了一个简易的原生DAO,暂时满足了自己项目需要,就把测试代码分享出来。
一 . DAO的实现
1. 左图为项目结构,右图为数据库内容,具体配置文件见源码.
BaseHqlDao和BaseHqlDiy是两个接口,BaseHqlDaoImpl实现了这两个接口,TestCriteria,TestDao,TestDiy是三个测试类.


2. BaseHqlDao : 提供了 HQL / 对象 访问数据库的接口
package com.dao;
import java.util.List;
public interface BaseHqlDao {
/************************* 查询数据 **********************************/
public Object get(Class<?> c,long id);
public List<?> getList(String hql);
public Object getObject(String hql);
public boolean getBoolean(String hql); //为空返回true
public int getCount(String hql);
/************************* 增加数据 **********************************/
public boolean save(Object object);
public boolean saveItem(String hql); //成功返回true
/************************* 删除数据 **********************************/
public boolean delete(Object object);
public boolean deleteItem(String hql); //成功返回true
/************************* 删除数据 **********************************/
public boolean update(Object object);
public boolean updateItem(String hql); //成功返回true
/************************* 数据分页 **********************************/
public int getAllRowCount(String hql); //获取总条数
public List<?> queryByPage(String hql, int offset, int pageSize); //获取当前页数据
}
3. BaseHqlDiy : 自定义方法接口,通过拼接字符串获取HQL
package com.dao;
import java.util.List;
public interface BaseHqlDiy {
/************************* 查询 **********************************/
public Object getUniqueObject(String target, String table, String[] field, Object[] param);// 查询唯一对象
public List<?> getObjects(String[] target, String table, String[] field, Object[] param); // 查询多个对象
public List<?> getItem(String table, String[] field, Object[] param); // 查询一条
public List<?> getItemOrderBy(String[] target, String table, String[] field, Object[] param, String order, String sort); // 多条件查询
public boolean isExist(String table , String[] field, Object[] param); // 查询是否存在,存在返回true
/************************* 增添 **********************************/
public boolean saveItem(String table, String[] field, Object[] param);
/************************* 删除 **********************************/
public boolean deleteItem(String table, String[] field, Object[] param); // 单条/批量删除
public boolean deleteAllItem(String table); // 全部删除
/************************* 更新 **********************************/
public boolean updateItem(String table, String[] field1, Object[] param1, String[] field2, Object[] param2);
}
4. BaseHqlImpl : 接口实现类 (见源码)
5. TestDao : 测试BaseHqlDao接口
6. TestDiy : 测试BaseHqlDiy接口
7. TestCriteria : 测试Hibernate内置的Criteria实例, 简单好用 ![]()
二 .项目相关
源码下载 Hibernate官方文档.chm 如有问题欢迎给我留言 !!
Hibernate简易原生DAO的实现的更多相关文章
- Hibernate执行原生SQL返回List<Map>类型结果集
我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...
- hibernate使用原生SQL查询返回结果集的处理
今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1
第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- hibernate 5原生sql查询测试学习代码
基本查询 import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org. ...
- Hibernate反向工程生成DAO
通过Hibernate反向工程生成个DAO: package dao; import java.util.List; import org.hibernate.LockMode; import org ...
- ORM框架Hibernate (一) 对DAO封装和抽象
说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...
- Hibernate 的原生 SQL 查询
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...
- Hibernate运行原生sql并将查询的结果转化为对象
原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询.标量查询(Scalar queri ...
随机推荐
- [原创]自己动手实现React-Native下拉框控件
因项目需要,自己动手实现了一个下拉框组件,最近得空将控件独立出来开源上传到了Github和npm. Github地址(求Star 求Star 求Star
- python爬虫学习(6) —— 神器 Requests
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...
- 【C】.h头文件的重复包含问题
.h头文件存在的意义就是封装,可以方便多个.c源文件使用,但要防止.h头文件被同一个.c源文件多次包含. 例如, io.h文件 #ifndef _IO_H_ #define _IO_H_ #defin ...
- Handler(二)
1.Handler 实现Handler第二种和第三种 1.1 继承AbstractController 优点:能定制请求方式 package cn.happyl.controller; import ...
- sql
http://www.cnblogs.com/ASPNET2008/archive/2012/06/30/2570737.html
- C#体检套餐项目
使用泛型集合写的一个小项目 1.要实现新建体检套餐,并且如果已经有了该体检套餐就不能再次新建, 2.要实现套餐列表动态更新,没添加一个体检套餐,在套餐列表里就自动添加一项; 3.向当前套餐类表里添加检 ...
- [LeetCode] Bitwise AND of Numbers Range 数字范围位相与
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...
- 理解OAuth 2.0
转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...
- android studio 集成微信登录
参考: 1.http://blog.csdn.net/suma_sun/article/details/50752528 2.这个更全面一点 : http://www.jb51.net/article ...
- javascript-- test() 匹配正则 与 逻辑运算符 “!”
在使用正则表达式验证"时分秒"的时候遇到了一个问题,因为业务需求,需要提供两个input 给用户输入开始时间和结束时间. js 代码: var regtime=/^([0-1]?[ ...