`
badqiu
  • 浏览: 674447 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

基于Freemarker动态SQL构造工具

 
阅读更多

一.目的

将sql语句编写的xml中,然后在java代码中,传入参数,经过freemarker处理,得到处理完的SQL. 好处:

  • sql编写在xml中,便于阅读
  • 可以使用freemarker语法,动态构建SQL
  • 可以使用freemarker的include语句,提取公用SQL

 

 

 

三.使用指南

 

maven

 

        <groupId>com.duowan.common</groupId>
        <artifactId>duowan-common-util</artifactId>
        <version>1.0.11</version>       

 

spring配置

 

        <bean id="sqlFreeMarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean" >
        <property name="preTemplateLoaders" >
                <bean id="templateLoader" class="com.duowan.common.freemarker.loader.MapTemplateLoader">
                                <property name="templateMap" ref="sqlTemplateProperties"></property>
                </bean>
        </property>
        </bean>
        
    <bean id="sqlTemplateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="ignoreResourceNotFound" value="true" />
                <property name="locations">
                        <list>
                                <value>classpath*:/freemarker_sql/**/*.xml</value>
                        </list>
                </property>
    </bean>

 

xml配置中编写SQL

user.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>

        <entry key="user.delete">
                <![CDATA[
                delete from user where id=:id
                ]]>
        </entry>
        
        <entry key="user.select">
                <![CDATA[
                select * from user
                <#include "userWhere">
                ]]>
        </entry>
        
        <entry key="userWhere">
                <![CDATA[
                1=1
                ]]>
        </entry>
        
</properties>

 

java代码

 

 

        @Test
        public void test() throws IOException, TemplateException {
                Map model = new HashMap();
                model.put("name", "badqiu");
                model.put("sex", 1);
                model.put("age", 100);
                
                ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-freemarker-sql.xml");
                Configuration conf = (Configuration)ac.getBean("sqlFreeMarkerConfiguration");
                String sql = FreeMarkerTemplateUtils.processTemplateIntoString(conf.getTemplate("user.select"), model);
                System.out.println(sql);
        }
分享到:
评论

相关推荐

    基于Freemarker模板的代码生成器后台代码(controller,service,dao)模板文件

    这个压缩包提供的就是一套基于Freemarker模板的代码生成器模板文件,分别对应控制器(Controller)、实体类(Bean)、服务接口(Service)和服务实现(ServiceImpl)、数据访问对象(Dao)。 1. **Controller.ftl**...

    freemarker+struts2+ibatis入门学习摘要

    它可以动态构造SQL,处理复杂的查询条件。iBatis通过SqlSession对象执行SQL,获取ResultMap中的结果,与实体对象进行映射,便于进行数据操作。 4. **整合使用**: 在Struts2中,可以配置Action来调用iBatis的...

    SpringBoot+Spring data JPA+FreeMarker+shiro+log4jdbc

    SpringBoot是基于Spring框架的轻量级开发工具,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如JPA、Thymeleaf、Freemarker等,使得开发者可以“零配置”快速构建项目。SpringBoot...

    maven+springboot+mybatis-plus+freemarker+log4j小样例

    2. Spring Boot:Spring Boot是基于Spring框架的快速开发工具,简化了Spring应用的初始搭建以及开发过程。它内置了Tomcat服务器,提供了一种“开箱即用”的体验。在本项目中,Spring Boot负责初始化应用、配置自动...

    基于注解的Spring+Struts2+Mybatis

    3. **动态SQL**:Mybatis支持条件判断、循环等动态SQL构造,使SQL更灵活。 4. **事务管理**:Mybatis可以与Spring集成,实现声明式事务管理,简化事务控制。 **Maven**: 1. **项目管理**:Maven通过pom.xml文件...

    mybatis学生信息管理

    动态SQL可以让开发者在XML配置文件中根据条件动态生成SQL,比如根据传入的页码和每页大小来构造LIMIT语句。PageHelper是Mybatis的一个分页插件,它可以自动完成分页查询,提供方便的API来获取当前页、总页数、总记录...

    springboot+mybatisplus+逆向工程+jsp/freemarker/thymeleaf+bootstrap+layer整合

    SpringBoot 基于 Spring 平台构建,它通过内嵌的 Tomcat 或 Jetty 服务器,自动配置 Spring 和其他第三方库,从而极大地减少了项目的设置工作。 Mybatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及...

    一个基于Springboot和MybatisPlus以及Angular8的在线刷题系统(后端).zip

    同时,它还提供了条件构造器,可以方便地进行复杂的动态SQL操作。 **Angular8** Angular8是Google维护的一款前端JavaScript框架,用于构建单页应用程序(SPA)。Angular8采用组件化的开发方式,每个页面或UI元素都...

    基于Springboot的新能源充电系统(有报告) Javaee项目,springboot项目

    3. **Spring Data JPA**:这是Spring的一个模块,简化了对数据库的访问,支持CRUD操作以及复杂的查询构造。通过定义Repository接口,Spring Data JPA能够自动实现数据存取功能。 4. **Spring Security**:为了保护...

    推荐几个使用javaSpringBoot开发的cms系统

    - **Freemarker**: 一个基于Java的模板引擎,用于生成动态HTML或其他格式的文本。 - **Maven**: 项目管理工具,自动化构建、依赖管理和项目信息管理。 项目地址:[https://gitee.com/mingSoft/MCMS]...

    MyBatis-06 逆向工程

    "MyBatis-06 逆向工程"这一主题是关于MyBatis的一个核心特性,即代码生成器(Generator),它能极大地提高开发效率,帮助开发者自动生成基于数据表的JavaBean、Mapper接口以及SQL映射文件。 逆向工程,也称为反向...

    GUI 的 JavaWeb 鸡肋代码生成器 确定不了解了解?.pdf

    该工具的核心依赖于 Mybatis-plus,这是一个强大的 Mybatis 扩展,提供了更多的自动化功能,如 CRUD 操作、动态 SQL 等。Mybatis-plus 代码生成器是其一部分,可以自动生成实体类、Mapper 接口及实现、Service 及 ...

    abator源码

    这个工具基于MyBatis框架,能够自动生成Java Bean类和对应的iBatis SQL Map文件,大大减轻了开发者手动编写这些重复性工作的负担。通过深入学习Abator的源码,我们可以了解其实现原理,提升在数据库驱动应用开发中的...

    springMVC+Spring+MyBatis集成

    MyBatis支持动态SQL,可以灵活地构造复杂的查询条件,避免了大量硬编码SQL的情况。 4. SSM集成 SSM集成主要包括以下步骤: - 配置Spring MVC:定义DispatcherServlet,配置扫描的Controller包,以及视图解析器。 ...

    代码生成器,非常好用的,自己用!!

    Mybatis-Plus是一款基于Mybatis框架的扩展工具,它在Mybatis的基础上提供了更方便的代码生成器、自动CRUD操作等功能,极大地简化了开发过程,提高了开发效率。在这个压缩包中,我们很可能会找到用于生成Mybatis-Plus...

    自动生成代码

    1. **代码生成器工具**:许多IDE(集成开发环境)如Visual Studio、Eclipse、IntelliJ IDEA等都内置了代码生成功能,例如自动生成getter和setter方法、构造函数、重写equals和hashCode等。此外,还有专门的代码生成...

    SSM框架基于Bootstrap商品价格比价网可升级SpringBoot毕业源码案例设计.zip

    2. **MyBatis-Plus**:MyBatis的增强工具,简化了CRUD操作,提供了丰富的API,如分页查询、条件构造器等,使得数据库操作更加便捷。 3. **Thymeleaf**或**FreeMarker**:可能作为视图模板引擎,将后台数据渲染成...

    黑马面试宝典知识点复习

    - **动态SQL**:支持在XML映射文件中编写动态SQL语句。 #### Struts2框架 - **拦截器**:通过拦截器处理请求、响应等过程。 - **结果类型**:定义不同的结果类型来控制请求处理后的行为。 #### Hibernate框架 - **...

    基于SpringBoot的教务管理系统源码+数据库脚本+毕业设计.zip

    【标题】中的“基于SpringBoot的教务管理系统源码+数据库脚本+毕业设计”表明这是一个使用SpringBoot框架开发的教育管理系统的完整项目,包含了源代码、数据库脚本以及可能的毕业设计文档或报告。这样的项目对于学习...

    Mybatis-plus-CodeGenetator:Mybatis-pluse实现逆向工程

    它还提供了条件构造器,使得动态 SQL 编写变得更加简单。 2. **逆向工程(Reverse Engineering)**: 在软件工程中,逆向工程通常指的是从已有的程序或数据结构中提取设计信息的过程。在 Mybatis-plus-CodeGenetator...

Global site tag (gtag.js) - Google Analytics