1.动态sql语句 2.逆向工程(generator) 3.分页助手(pagehelper)

  

2019-8-30 大纲

1.动态sql语句

2.逆向工程(generator)

3.分页助手(pagehelper)

1.动态sql语句(即sql语句的拼接)

1.1  if标签(属性:test(判断条件))

缺点:如果仅仅是第二个条件满足导致sql语句出错(使用if+where)

<select id="select1" resultType="com.zhiyou.clg.bean.User">

select *from user

<if test="name!=null">

where name=#{name}

</if>

<if test="age!=null and age!=‘‘">

and age=#{age}

</if>

</select>

1.2  if+where ( where标签会知道如果它包含的标签中有返回值的话,就会插入where 若其以and或or开头会将and或or剔除)

<select id="select2" resultType="com.zhiyou.clg.bean.User">

select *from user

<where>

<if test="name!=null">

and name=#{name}

</if>

<if test="sex!=null">

and sex=#{sex}

</if>

<if test="age!=null and age!=‘‘">

and age=#{age}

</if>

</where>

</select>

1.3 if+set( set标签会知道如果它包含的标签中有返回值的话,就会插入set并且剔除最后一个满足条件的逗号“,”)

<update id="update1" parameterType="com.zhiyou.clg.bean.User">

update user

<set>

<if test="name!=null">

name=#{name},

</if>

<if test="sex!=null">

sex=#{sex},

</if>

<if test="age!=null and age!=‘‘">

age=#{age},

</if>

</set>

<where>

<if test="id!=null">

id=#{id}

</if>

</where>

</update>

1.4 choose(标签when+标签otherwise)----类似于switch语句,有且仅有一个条件会满足

<sql id="usercolumn" >

id,name,age,sex

</sql>

<select id="select3" resultType="com.zhiyou.clg.bean.User">

select

<include refid="usercolumn"></include>

from user

<where>

<choose>

<when test="name!=null">

and name=#{name}

</when>

<when test="age!=null and age!=‘‘">

and age=#{age}

</when>

<otherwise>

and sex=#{sex}

</otherwise>

</choose>

</where>

</select>

1.5 trim(trim标记是一个格式化的标记,可以完成set或者是where标记的功能;)

属性:prefix:前缀      

    prefixoverrides:去掉前缀

suffix:后缀      

    suffixoverrides:去掉后缀

<update id="update2" parameterType="com.zhiyou.clg.bean.User">

update user

<trim prefix="set" suffixOverrides=",">

<if test="name!=null">

name=#{name},

</if>

<if test="sex!=null">

sex=#{sex},

</if>

<if test="age!=null and age!=‘‘">

age=#{age},

</if>

</trim>

<where>

<if test="id!=null">

id=#{id}

</if>

</where>

</update>

1.6 sql片段------使用sql标签定义(属性:id);引用片段时用include标签(属性:refid)

1.7foreach

属性:      collection:指定输入对象中的集合属性

item:每次遍历生成的对象

open:开始遍历时的拼接字符串

close:结束时拼接的字符串

separator:遍历对象之间需要拼接的字符串

<sql id="namecolumn" >

name

</sql>

<select id="select4" resultType="com.zhiyou.clg.bean.User">

select

<include refid="namecolumn"></include>

from user where id in

<foreach collection="ids" open="(" close=")" separator="," item="id">

#{id}

</foreach>

</select>

1.8模糊查询-----like后使用concat函数拼接(‘%’,#{name},’%’)

name  like  concat(‘%’,#{name},’%’)

2逆向工程(generator)---由表帮我们来生成dao、bean、xml

*引入mybatis-generator的jar包

*在工程目录下新建generator.xml文件(复制官网内容)

<?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">

<generatorConfiguration>

<!-- 数据库驱动jar包所在的位置 -->

<classPathEntry location="D:\\mybatis\\generator830\\lib\\mysql-connector-java-5.1.47.jar" />

<context id="DB2Tables" targetRuntime="MyBatis3">

<!--  去除注释 -->

<commentGenerator>

<property name="suppressAllComments" value="true" />

</commentGenerator>

<!--  数据源信息 -->

<jdbcConnection driverClass="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/mybatis"

userId="root"

password="root">

</jdbcConnection>

<javaTypeResolver >

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

<!-- 生成的实体类所在的位置 -->

<javaModelGenerator targetPackage="com.zhiyou.clg.bean" targetProject="./src">

<property name="enableSubPackages" value="true" />

<property name="trimStrings" value="true" />

</javaModelGenerator>

<!-- 生成的映射文件所在的位置 -->

<sqlMapGenerator targetPackage="com.zhiyou.clg.mapper"  targetProject="./resource">

<property name="enableSubPackages" value="true" />

</sqlMapGenerator>

<!-- 生成的dao所在的位置 -->

<javaClientGenerator type="XMLMAPPER" targetPackage="com.zhiyou.clg.dao"  targetProject="./src">

<property name="enableSubPackages" value="true" />

</javaClientGenerator>

<!-- 表和实体类的对象关系

schema:该表所在的数据库

tableName:表名

domainObjectName:实体类名

-->

<table schema="DB2ADMIN" tableName="user" domainObjectName="User"

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>

*在src目录下新建test包,再新建Test类,在main下复制官网内容,导包后运行

package com.zhiyou.clg.test;

import java.io.File;

import java.io.IOException;

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.exception.XMLParserException;

import org.mybatis.generator.internal.DefaultShellCallback;

public class TestGenerator {

public static void main(String[] args) throws Exception{

List<String> warnings = new ArrayList<String>();

boolean overwrite = true;

File configFile = new File("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)

*引入jar包 jsqlparser-2.0.jar和pagehelper-5.1.10.jar

*测试时:(参考官网)

@Test

void testselectall() {

//1.使用PageHelper类设置起始页和每页显示的条数

int pageNum=1;//当前页码   从网页中可以获取

int pageSize=2;//pageSize:自定义

PageHelper.startPage(pageNum,pageSize);

//2调用查询所有的方法

List<User> list=userMapper.selectall();

//3.把查询的结果封装到Pageinfo中

PageInfo<User> pageinfo=new PageInfo<>(list);

System.out.println(pageinfo);

}

原文地址:https://www.cnblogs.com/jingmochen/p/11437698.html

时间: 2024-11-08 22:38:44

1.动态sql语句 2.逆向工程(generator) 3.分页助手(pagehelper)的相关文章

MyBatis 源码分析——动态SQL语句

有几年开发经验的程序员应该都有暗骂过原生的SQL语句吧.因为他们不能一句就搞定一个业务,往往还要通过代码来拼接相关的SQL语句.相信大家会理解SQL里面的永真(1=1),永假(1=2)的意义吧.所以mybatis动态SQL功能在笔者看来是最引吸人的.为了更好的区别XML映射文件上的SQL语句.mybatis把SQL语句分为四类.那么这个笔者已经在前面的章节里面讲过了.但是我们在开发过程中常常用到的也就俩种:静态和动态. 关于静态和动态的定义,笔者是这样子理解的--静态SQL语句显示就是里面没有相

动态SQL语句:定义(一)

文章系列 动态SQL语句:定义(一) 静态SQL与动态SQL 静态SQL:程序运行前,具有固定的形式和结构的SQL. 动态SQL:程序运行时,能够动态改变形式或结构的SQL. 一些思考和想法 在实际的项目中,很多时候无法简单地用一条静态的SQL语句实现复杂的业务逻辑,往往需要通过程序语言动态地生成SQL语句.然而,在代码中通过条件判断语句拼接产生SQL语句,存在诸多缺点,简单列举如下: 代码杂乱和重复,编码的工作量大,而且容易产生错误. 拼接SQL语句的过程中,容易引起SQL注入. 代码与SQL

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

mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似.3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)4. where (主要是用来简化sql语句中where条件判断的,能智能的处理 a

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

三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysql的函数生成Id.这时我们可以使用动态sql. 下文均采用mysql语法和函数(例如字符串链接函数CONCAT). 3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使

Mybatis使用之动态SQL语句

Mybatis使用之动态SQL语句 一:简介 Mybatis动态SQL语句可帮助我们根据需要动态拼接SQL语句.主要在配置文件中使用<where> <if><choose><when><otherwise> <set> <trim><foreach>标签来实现. 二:具体使用方式 2.1 where 2.1.1 功能 语句的作用主要是简化SQL语句中where中的条件判断,where元素的作用是会在写入wher

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

Oracle基础 动态SQL语句

一.静态SQL和动态SQL的概念. 1.静态SQL 静态SQL是我们常用的使用SQL语句的方式,就是编写PL/SQL时,SQL语句已经编写好了.因为静态SQL是在编写程序时就确定了,我们只能使用SQL中的DML和事务控制语句,但是DDL语句,以及会话控制语句却不能再PL/SQL中直接使用,如动态创建表或者某个不确定的操作时,这就需要动态SQL来实现. 2.动态SQL 动态SQL是指在PL/SQL编译时SQL语句是不确定的,如根据用户输入的参数的不同来执行不同的操作.编译程序对动态语句部分不进行处

MyBatis动态Sql语句

林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   MyBatis中对数据库的操作.有时要带一些条件.因此动态SQL语句很有必要.以下就主要来讲讲几个经常使用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(when.otherwise) trim where set foreach 1.if 对属性进行推断.假设不为空则运行推断条件 <select id="selectByCriter

MyBatis学习总结_11_MyBatis动态Sql语句

MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) trim where set foreach 1.if 对属性进行判断,如果不为空则执行判断条件 [html] view plaincopy <select id="selectByCriteria" parameterType="com.mu