1.动态sql语句

  1. if

  2. if where 配合使用

    <select id="selectByWhere" resultType="com.alibaba.wlq.bean.Users">
    select * from users
    <where>
    <if test="name!=null and name !=''">
    and name = #{name}
    </if>
    <if test="sex!=null and sex!=''">
    and sex = #{sex}
    </if>
    </where>
    </select>

    where的功能是在满足条件的第一个sql语句前面添加where,如果第一个满足条件的sql语句前面有and或者or,那么where标签的功能就是替换掉它

  3. if set配合使用

    <update id="updateUsers">
    update users
    <set>
    <if test="name!=null and name !=''">
    name = #{name},
    </if>
    <if test="age>0">
    age = #{age},
    </if>
    <if test="sex!=null and sex!=''">
    sex = #{sex},
    </if>
    </set>
    where id = #{id}
    </update>

    set标签我理解的功能就是在第一个满足if条件的sql语句前面增加set并且会将最后一个满足if条件的sql语句的逗号给去掉防止sql语句出错

  4. if + trim代替where/set标签

    prefix

    prefixOverrides

    suffix

    suffixOverrides

  5. choose(when otherwise)

    有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为true,就会执行if标签中的条件。MyBatis提供了choose 元素。if标签是与(and)的关系,而choose比傲天是或(or)的关系。

    ​ choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。choose会从上到下选择一个when标签的test为true的sql执行。安全考虑,我们使用where将choose包起来,放置关键字多于错误。

  6. sql字段

    <sql id="selectByAgesColumns">
    id,name,age,sex
    </sql> <select id="selectByAges" resultType="com.alibaba.wlq.bean.Users">
    select <include refid="selectByAgesColumns"/> from users
    <if test="ages.size()>0">
    <where>
    <foreach collection="ages" open="age in(" close=")" separator="," item="age" >
    #{age}
    </foreach>
    </where>
    </if>
    </select>
  7. foreach(同上)

    对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。

    foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。

    注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。

    这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。

2.逆向工程(generator)

由表帮我们生成bean、dao、xml文件

http://www.mybatis.org/generator/index.html

  1. 引入mybatis-generator的jar包

  2. 创建generator的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <!-- generatorjar包的路径 -->
    <generatorConfiguration>
    <classPathEntry location="/E:/generator/mybatis-generator-core-1.3.5.jar" />
    <!-- 加载驱动 -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
    <property name="suppressDate" value="true"/>
    <property name="suppressAllComments" value="true" />
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/mybatis"
    userId="root"
    password="123456">
    </jdbcConnection>
    <!-- 是否允许大数字 -->
    <javaTypeResolver >
    <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
    <!-- 实体类文件配置 -->
    <javaModelGenerator targetPackage="com.alibaba.wlq.bean" targetProject="./src">
    <property name="enableSubPackages" value="true" />
    <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <!-- 映射文件配置 -->
    <sqlMapGenerator targetPackage="com.alibaba.wlq.mapper" targetProject="./resources">
    <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
    <!-- dao接口配置-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.alibaba.wlq.dao" targetProject="./src">
    <property name="enableSubPackages" value="true" />
    </javaClientGenerator>
    <!-- -->
    <table schema="mybatis" tableName="users" domainObjectName="Users" enableCountByExample="false"
    enableDeleteByExample="false" enableSelectByExample="false"
    enableUpdateByExample="false">
    <property name="useActualColumnNames" value="true"/>
    <generatedKey column="ID" sqlStatement="DB2" identity="true" />
    <columnOverride column="DATE_FIELD" property="startDate" />
    <ignoreColumn column="FRED" />
    <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
    </table>
    </context> </generatorConfiguration>
  3. 运行generator

import java.io.File;
import java.util.ArrayList;
import java.util.List; import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback; public class generatormain { public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("resources/generator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
} }

3. PageHelper

https://pagehelper.github.io/

动态sql语句、逆向工程(generator)、分页助手(pagehelper)的更多相关文章

  1. 动态SQL语句:定义(一)

    文章系列 动态SQL语句:定义(一) 静态SQL与动态SQL 静态SQL:程序运行前,具有固定的形式和结构的SQL. 动态SQL:程序运行时,能够动态改变形式或结构的SQL. 一些思考和想法 在实际的 ...

  2. java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件

    前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...

  3. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  4. 分页助手PageHelper学习

    PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能.在 springboot上集成pagehelper ...

  5. MySQL存储过程动态SQL语句的生成

    用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...

  6. 动态sql语句基本语法--Exec与Exec sp_executesql 的区别

    http://www.cnblogs.com/goody9807/archive/2010/10/19/1855697.html 动态sql语句基本语法 1   :普通SQL语句可以用Exec执行   ...

  7. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  8. MyBatis学习(三)、动态SQL语句

    三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Orac ...

  9. 三、动态SQL语句

    //备注:该博客引自:http://limingnihao.iteye.com/blog/106076 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空, ...

随机推荐

  1. K8S构建1台master2台node+Harbor_笔记

    部署环境: master.node:centos7虚拟机 网络使用本地网卡共享到VMnet1(仅主机),虚拟机使用VMnet1. 准备文件: CentOS-7-x86_64-Minimal-1810. ...

  2. .Net Core使用IdentityServer4

    官方文档https://identityserver4.readthedocs.io/en/latest/ 参考https://www.cnblogs.com/i3yuan/p/13843082.ht ...

  3. Barcodex帮助文档

    前言 官方文档及ocx控件下载,下载很慢,直接上传到博客园文件管理中了. http://files.cnblogs.com/files/masonblog/barcodex.zip 帮助文档 Prop ...

  4. web项目报错 无法解析,丢失包 是缺少本地运行jre

    1.通过build path 添加add Library 2.添加jre

  5. OJDBC版本区别

    classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar,ojdbc7.jar的区别与差异 [转 原文:https://yq.aliyun.com/wenji/2 ...

  6. redis 作为 mysql的缓存服务器(读写分离)

    redis 作为 mysql的缓存服务器(读写分离) 一.redis简介 Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会 ...

  7. jpa 主键重复导致查询list的数据总是重复第一条数据

    背境: JPA 读取 Oracle 中的视图,同一条sql, 在数据库 IDE (PLSql)读出 878 条记录并正常显示,代码依然保存了 878 条记录,但所有记录均一样,即数据库中第一条记录. ...

  8. 【ASP.NET Core】Blazor 服务器端的 Base Path

    提到 Blazor,没准就会有人问:选用 Server 端还是 WebAssembly(客户端)?其实这个不用纠结,老周个人的原则是:Server 端优先.理由很单纯:服务器端虽然消耗服务器上的资源, ...

  9. 关于echarts中的noDataLoadingOption——loading动画的问题

    在最近的一个项目中用到echarts这个插件,其中关于noDataLoadingOption配置项的问题让我困惑了好长时间.经过蛋疼的查找下,终于搞明白是版本的原因. 且看官网的介绍:ECharts, ...

  10. 学生成绩管理系统: 统计成绩排序并打印(c++)(内含读取文件.txt及将文件输出excel的方法)

    实验要求:输入30个学生的学号.姓名和5门课程的成绩,计算总分并按照总分排出名次,最后按照学号顺序打印成绩单, 并把成绩单输出为excel文件. txt数据: 2015020981 甲 90 89 9 ...