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 ...
随机推荐
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- [LeetCode] Ternary Expression Parser 三元表达式解析器
Given a string representing arbitrarily nested ternary expressions, calculate the result of the expr ...
- [LeetCode] Missing Number 丢失的数字
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- 为什么要在游戏开发中使用ECS模式
http://www.richardlord.net/blog/why-use-an-entity-framework Why use an entity system framework for g ...
- VS2013快捷键及技巧
VS2013快捷键很多,灵活使用常用快捷键及各项技巧可以让你事半功倍.下面的visual studio 2013快捷键和操作技巧你知道多少? 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一 ...
- nodeJs 5.0.0 安装配置与nodeJs入门例子学习
新手学习笔记,高手请自动略过 安装可以先看这篇:http://blog.csdn.net/bushizhuanjia/article/details/7915017 1.首先到官网去下载exe,或者m ...
- Oracle视图时间戳转为Date
CREATE OR REPLACE VIEW PDAORDER AS SELECT po.id id, po.order_no AS order_no, po.money AS money, (SEL ...
- 【bzoj1415】 Noi2005—聪聪和可可
http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...
- java中HashMap重要性质和优化总结
原文: http://www.cnblogs.com/junyuhuang/p/4519257.html
- AJAX应用小案例
此案例在XAMPP本地服务器上运行,需要应用jquery3.1.1的版本,应用JSON传递数据 代码如下: html代码: <!DOCTYPE html><html lang=&qu ...