国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

2019-11-26 13:52:24
字體:
來源:轉載
供稿:網友

動態SQL就是動態的生成SQL。

if標記

假設有這樣一種需求:查詢用戶,當用戶名不等于“admin”的時候,我們還需要密碼為123456。

數據庫中的數據為:

這里寫圖片描述

MyBatisConfig.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--定義別名 注意typeAliases一定要在environments之前--><typeAliases><typeAlias type="jike.book.pojo.JiKeUser" alias="JiKeUser"/><typeAlias type="jike.book.pojo.Author" alias="Author"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/jikebook"/><property name="username" value="root"/><property name="password" value="*****"/></dataSource></environment></environments><mappers><mapper resource="jike/book/map/jikeUser.xml"/></mappers></configuration>

JiKeUser.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="/"><select id="selectSQL" resultType="JiKeUser" parameterType="JiKeUser">SELECT * FROM jikebook.jikeuserWHERE 1=1<if test="userName!='admin'">AND password=#{password}</if></select></mapper>

測試類:

package jike.book.test;import jike.book.pojo.JiKeUser;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.Reader;import java.util.List;/*** DateTime: 2016/9/6 13:36* 功能:* 思路:*/public class TestSQL {public static void main(String[] args) {// 資源路徑String resource="jike/book/map/MyBatisConfig.xml";Reader reader=null;SqlSession session;try {reader= Resources.getResourceAsReader(resource);} catch ( IOException e ) {e.printStackTrace();}SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);session=sqlMapper.openSession();JiKeUser jiKeUser=new JiKeUser();jiKeUser.setPassword("123456");List<JiKeUser> userList=session.selectList("selectSQL",jiKeUser);for ( JiKeUser user:userList ) {System.out.println("userName:"+user.getUserName());}session.close();}}

運行結果為:

這里寫圖片描述

choose標記

假設我們當前有這么一個需求:查詢用戶,如果用戶名不為空就加上用戶名這個條件,如果id不為空也加上id這個條件,否則的話就是設置密碼不為空,這就是一個多路選擇。

MyBatisConfig.xml不改變,在JikeUser.xml中加上:

<select id="selectJiKeUserChoose" resultType="JiKeUser" parameterType="JiKeUser">select * from jikeuser where 1=1<choose><when test="userName!=null">and userName like #{userName}</when><when test="id!=0">and id =#{id}</when><otherwise>and password is not null</otherwise></choose></select>

測試類:假設用戶名不為空:

package jike.book.test;import jike.book.pojo.JiKeUser;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.Reader;import java.util.List;/*** DateTime: 2016/9/6 13:36* 功能:* 思路:*/public class TestSQL {public static void main(String[] args) {// 資源路徑String resource="jike/book/map/MyBatisConfig.xml";Reader reader=null;SqlSession session;try {reader= Resources.getResourceAsReader(resource);} catch ( IOException e ) {e.printStackTrace();}SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);session=sqlMapper.openSession();JiKeUser jiKeUser=new JiKeUser();jiKeUser.setUserName("YEN");List<JiKeUser> userList=session.selectList("selectJiKeUserChoose",jiKeUser);for ( JiKeUser user:userList ) {System.out.println("userName:"+user.getUserName());}session.close();}}

結果為:

這里寫圖片描述

假設不設置用戶名這個條件,即注釋掉jiKeUser.setUserName("YEN");:

這里寫圖片描述

where標記、set標記

上面我們在choose中查詢是不能確定子連接條件中的and是寫還是不寫,因此加了一個1=1.而where會只能的去判斷該不該加。

<select id="selectJiKeUserWhere" resultType="JiKeUser" parameterType="JiKeUser">select * from jikeuser<where><if test="userName!=null">and userName like #{userName}</if><if test="id!=null">and id =#{id}</if></where></select>

這里寫圖片描述 

set標記智能賦值,會自動去掉多余的”,”。

<update id="updateJiKeUserSet" parameterType="JiKeUser">update JiKeUser<set><if test="userName != null">userName=#{userName},</if><if test="password != null">password=#{password},</if></set>where id=#{id}</update>

操作之前的數據:

這里寫圖片描述

操作:

這里寫圖片描述

操作結果:

這里寫圖片描述

<update id="updateUserTrim" parameterType="JiKeUser">UPDATE JiKeUser<trim prefix="SET" suffixOverrides="," suffix="WHERE id = #{id}" ><if test="userName != null and userName != '' ">userName = #{userName},</if><if test="password != null and password != '' ">password=#{password},</if></trim></update>

這里寫圖片描述

foreach標記

通常用于循環查詢或循環賦值

<select id="selectJiKeUserForeach" resultType="JiKeUser" parameterType="list">select * from jikeuser<where>id in<foreach item="item" index="index" collection="list"open="(" separator="," close=")">#{item}</foreach></where></select>

測試:

這里寫圖片描述

以上所述是小編給大家介紹的Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海兴县| 名山县| 阳泉市| 长葛市| 拉萨市| 保定市| 白银市| 鹤庆县| 万源市| 临泉县| 宁海县| 佛教| 板桥市| 修水县| 广东省| 克拉玛依市| 雷山县| 平安县| 商洛市| 莆田市| 苍南县| 绥滨县| 韩城市| 阿尔山市| 博罗县| 肥乡县| 汕头市| 托里县| 长治市| 玉树县| 时尚| 闽侯县| 巢湖市| 全州县| 阿克苏市| 通海县| 甘德县| 沙雅县| 夹江县| 尼玛县| 平塘县|