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. vue实现点击样式高亮

    •在data中定义即将渲染的数据,及active data() {     return {       active:'',//选中样式     };   }, 1 2 3 4 5 6 7 8 9 ...

  2. kvm环境部署及常用指令

    Linux下通过kvm创建虚拟机,通过vnc连接,做好配置后,通过ssh登录,并开启iptables Kvm虚拟化搭建教程参考链接:https://jingyan.baidu.com/article/ ...

  3. C# 托管与非托管类型 堆和栈 值类型与引用类型 装箱与拆箱

    一.托管类型与非托管类型 1.托管类型 托管类型包括 引用类型 以及 包含有引用类型或托管类型成员的结构. 引用类型 含引用类型或托管类型成员(字段.自动实现 get 访问器的属性)的结构 // 托管 ...

  4. 深度学习论文翻译解析(十六):Squeeze-and-Excitation Networks

    论文标题:Squeeze-and-Excitation Networks 论文作者:Jie Hu  Li Shen Gang Sun 论文地址:https://openaccess.thecvf.co ...

  5. idea run dashbord使用

    idea 中使用dashbord可以迅速开启多个服务方便进行本地测试 开启步骤 1. 打开idea菜单 view-> toolWindows ->service 选项 2. 打开底部的se ...

  6. 将.Net Core发布至Docker,并连接 Redis、上传文件到本机、连接sqlserver数据库

    此片文章目标是将 .Net Core 发布到 Docker 上,并且连接到在 Docker上的 Redis .上传文件到本机文件夹和连接 sqlserver 数据库. 创建项目 创建项目就不用说了,我 ...

  7. 利用Comparable接口实现对对象数组的排序

    Arrays 类中的sort方法承诺可以对对象数组进行排序,但是需要对象所属的类实现Comparable接口 任何实现Comparable接口的对象都需要实现该方法 并且在Java SE 5.0之前该 ...

  8. Mac苹果电脑单片机开发

    1.安装虚拟机 可以阅读往期文章:Mac苹果电脑安装虚拟机 2.在虚拟机上安装CH340驱动,keil4,PZ-ISP, 下载 CH340驱动安装  下载keil4破解及汉化  下载普中科技烧录软件

  9. VNC使用及其常见问题解决方法

    博主之前在博文(https://www.cnblogs.com/kangbazi666/p/14153604.html)中已经介绍了多人VNC的配置方法,下面将简单介绍其使用方法及常见问题的解决方法. ...

  10. Linux操作系统的文件目录结构

    一 --- 导读 首先记住一句经典的话:"linux世界中,万事万物皆为文件" 二---linux的目录结构示意图和windows下的目录结构示意图(本图需要背诵) 三---各目录 ...