写在最前:

初学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的实现的更多相关文章

  1. Hibernate执行原生SQL返回List<Map>类型结果集

    我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...

  2. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  3. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

  4. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  5. hibernate 5原生sql查询测试学习代码

    基本查询 import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org. ...

  6. Hibernate反向工程生成DAO

    通过Hibernate反向工程生成个DAO: package dao; import java.util.List; import org.hibernate.LockMode; import org ...

  7. ORM框架Hibernate (一) 对DAO封装和抽象

    说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...

  8. Hibernate 的原生 SQL 查询

    Hibernate除了支持HQL查询外,还支持原生SQL查询.         对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...

  9. Hibernate运行原生sql并将查询的结果转化为对象

    原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询.标量查询(Scalar queri ...

随机推荐

  1. Linux下安装jdk1.7、Apache-tomcat7

    首先说明下我的主机环境:主机:32位win7 虚拟机:VMware Workstation10.0.1 linux:红帽子centos6.4 jdk1.7 Apache-tomcat7 java环境需 ...

  2. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  3. c# MongoDB 经纬度应用示例

    class Program      {          static string mongodb = "mongodb://127.0.0.1:27017";        ...

  4. 数据库 数据库SQL语句二

    单行函数 --操作数据对象 --接受参数返回一个结果 --只对一行进行变换 --每行返回一个结果 --可以转换数据类型 --可以嵌套 --参数可以是一列或一个值 字符函数 SQL> select ...

  5. 查看mysql语句运行时间的2种方法

    网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的.平时做项目的时候,我也会注意sql语句的书写,写出一些高效的sql来,所以我 ...

  6. 滤镜 filter:gray 变灰色

    .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); ...

  7. Django ORM、一对一、一对多、多对多、详解

    上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...

  8. C#笔记

    关键字: 1.internal 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 注意事项: 1.解决c#代码引用c/c++代码出现的unsafe code错误警告提示 Unsaf ...

  9. C# 在数组中判断是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  10. Android 和 H5 通信

    有需要与h5通信的需求,写了一个helper类,处理与h5通信. import android.content.Context; import android.os.Handler; import a ...