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 ...
随机推荐
- NopCommerce 在Category 显示 Store List列表
实现效果如下: 1.在前台Web的Category Menu显示 Store; 2.点击 Store 显示 Store List列表: 3.点击 列表Store 的 Company Name 进入该S ...
- My first win32 application program
#include<afxwin.h>#include<afx.h>#define _AFXDLLclass CHelloApp :public CWinApp{public: ...
- linux-关机出现Telling INIT to go to single user mode.无法关机
运行/sbin/shutdown now最后显示:Telling INIT to go to single user mode.INIT:Going single userINIT:Sending g ...
- JAVA设计模式之2-简单工厂模式
今天来介绍简单工厂模式,工厂模式包括简单工厂模式和抽象工厂模式,今天先讲简单工厂模式,然后引申到抽象工厂模式 在没有工厂模式前,我们创建类是直接new一个对象,比如下面所示,北汽有两个小型SUV,分别 ...
- [LeetCode] Path Sum 二叉树的路径和
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- [LeetCode] Reverse Linked List II 倒置链表之二
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- Maven学习笔记
1.Maven安装 Maven和ant同为apache出版的构建工具,与gradle是一类东西,与C语言中的make是同一类产品.从apache官网上下载maven的zip安装包,解压即可使用,需要把 ...
- Mysql字符串字段判断是否包含某个字符串的3种方法
方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用MySQL 字符串函数 find_in_set ...
- django -model
Model 属性 STATUS=( (0,"正常"), (-1 ,"删除") ) Choices =STATUS //是用户处理数据返回参数做处理 如果增加了 ...