Hibernate简易原生DAO的实现

时间:2022-03-12 17:49:54

写在最前:

初学Hibernate,在尝试把JDBC项目移植到Hibernate的过程中,碰到了不少的麻烦,最让人心烦意乱的自然是SQL语句改动造成的代码混乱。其实不难,网上的解决方案有很多, 不过..大都是在Spring中使用封装好的HibernateDaoSupport完成DAO对象的CRUD操作。

不幸的是我的项目中没有用到Spring,狠下心来找了找官方文档,自己写了一个简易的原生DAO,暂时满足了自己项目需要,就把测试代码分享出来。

回到顶部

 一 . DAO的实现 

1. 左图为项目结构,右图为数据库内容,具体配置文件见源码.

 BaseHqlDao和BaseHqlDiy是两个接口,BaseHqlDaoImpl实现了这两个接口,TestCriteria,TestDao,TestDiy是三个测试类.

Hibernate简易原生DAO的实现Hibernate简易原生DAO的实现

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简易原生DAO的实现

 二 .项目相关

   源码下载       Hibernate官方文档.chm      如有问题欢迎给我留言 !!

回到顶部