封装Freemarker实现类似MyBatais

项目名称:DynamicHibernate
项目Gitee开源链接:DynamicHibernate

该项目由作者“汉源魂”在Gitee上开源,其核心价值在于提供一个非商业性的学习资源,旨在帮助广大开发者更加便捷地整合并优化Hibernate的使用体验。该项目通过一种基于FreeMarker技术的创新方式,对Hibernate的传统查询方式进行扩展和封装,主要特点如下:

  1. 灵活查询:提供了不同于Hibernate原生查询方式的灵活查询机制,用户可以根据需求自定义和管理QL(SQL或HQL)语句。

  2. 语句管理:采用类似MyBatis的配置文件样式,利用Freemarker模板技术,支持包含if、for等标签的复杂逻辑编写,简化了SQL/HQL语句的组织与维护。

  3. 动态执行:项目会动态读取模板缓存文件中的SQL或HQL语句,并交由Hibernate引擎执行,从而避免了硬编码SQL/HQL带来的维护难题。

  4. 泛型应用:项目广泛运用了泛型技术,特别是在数据结果集的封装方面,确保了查询操作的通用性和可扩展性。

  5. CRUD支持:实现了基础的创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)功能,降低了编码复杂度,使得代码更易于管理和维护。

总结来说,DynamicHibernate通过结合Freemarker模板引擎和Hibernate ORM框架,提升了数据库操作的灵活性和代码整洁度,有助于提升开发效率和降低后期维护成本。

QQ:1099532501

职业:JAVA DEVELOPER

ArrayList conditions = new ArrayList ();

普通字段筛选条件
String id = "06f8f0ef-0916-40c7-a354-2457e628293f";
        conditions.add(new Condition("id",id, Op.EQ, OpType.AND));
关联对象字段筛选条件
String deptName = "研发部2";
        conditions.add(new Condition("dept.name",deptName, Op.EQ, OpType.AND));
多字段组合条件 column ="xxx,xxx,xxx" 中间用英文逗号隔开即可。 意思为需要满足当前where 1=1 and (name='wstv' and sex='wstv')
//如果是 GROUP_AND_OR   = where 1=1 or (name='wstv' or sex='wstv')
conditions.add(new Condition("name,sex","1", Op.EQ, OpType.GROUP_AND_AND));
        List<Employee> list = employeeService.findList(conditions, null);
        System.out.println(JSON.toJSONString(list));
order by 用法
conditions.add(new Condition("name","1", Op.EQ, OpType.AND));
        LinkedHashMap<String, OrderType> orderby = new LinkedHashMap<String, OrderType>();
        orderby.put("name",OrderType.ASC);
        List<Employee> list = employeeService.findList(null, orderby);
        System.out.println(JSON.toJSONString(list));
分页用法
conditions.add(new Condition("dept.name","研发部2", Op.EQ, OpType.AND));
        LinkedHashMap<String, OrderType> orderby = new LinkedHashMap<String, OrderType>();
        orderby.put("name",OrderType.ASC);
        //pageIndex 第几页   pageSize = 每页要显示多少条
        PageBean<Employee> page = employeeService.findPage(conditions, orderby, 1, 10);
        System.out.println(JSON.toJSONString(page));
动态模板的用法 hql方式
String queryName = "emp.findById";
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("id","06f8f0ef-0916-40c7-a354-2457e628293f");
        PageBean<Employee> pageBean =  baseDao.queryByDynamicName(queryName, 1,10, Employee.class,null, parameters);
        List<Employee> data = pageBean.getData();
        if (data!=null && !data.isEmpty()){
            System.out.println(JSON.toJSONString(data));
        }
动态模板的用法 sql 方式
//动态模板语句返回的字段,需要和模板的sql字段顺序保持一致
        String[] fields = new String[]{
                "id",
                "name"
        };
        String queryName = "emp.findByName";
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("id","06f8f0ef-0916-40c7-a354-2457e628293f");
        PageBean<Map<String, Object>> pageBean = employeeService.findByNamedQuery(queryName, 1, 10, fields, parameters);
        List<Map<String, Object>> data = pageBean.getData();
        if (data!=null && !data.isEmpty()){
           for(Map map : data){
               System.out.println(map.get("id"));
           }
        }
<?xml version="1.0" encoding="utf-8"?>
<!--
<!DOCTYPE dynamic-statement SYSTEM "http://localhost:8080/dynamic-statement-1.0.dtd">
 -->
<dynamic-statement>
	<sql-query name="emp.findByName">
		<![CDATA[
			select
				id as id,
				name as name
			from
				oa.employee
			where 1=1
			<#if name != "">
				and name like '${name}%'
			</#if>
			group by
				id
		 ]]>
	</sql-query>

	 <sql-query name="emp.deleteEmp">
		 <![CDATA[
			delete from oa.employee where id=${id}
		 ]]>
	</sql-query>

    <hql-query name="emp.findById">
        <![CDATA[
        	 from com.hyaroma.domain.Employee where 1=1
			<#if id !="" && id!="0">
				and id='${id}'
			</#if>
        ]]>
    </hql-query>
</dynamic-statement>

个人网站:https://www.hanyuanhun.cn

个人摄影:https://tuchong.com/1649042/Description

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值