亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中如何實現動態SQL

發布時間:2021-07-30 14:04:11 來源:億速云 閱讀:130 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關Mybatis中如何實現動態SQL,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

二、動態SQL

    1、 IF 標簽

        在Product.xml中

<select id="listProduct" resultType="Product">
	select * from product_
	<if test="name!=null">
		where name like concat('%',#{name},'%')
	</if>		 	
</select>

        在TestIF.java中

        System.out.println("查詢所有的");
        List<Product> ps = session.selectList("listProduct");
        for (Product p : ps) {
            System.out.println(p);
        }
         
        System.out.println("模糊查詢");
        Map<String,Object> params = new HashMap<>();
        params.put("name","a");
        List<Product> ps2 = session.selectList("listProductByName",params);
        for (Product p : ps2) {
            System.out.println(p);
        }

    2、WHERE SET TRIM 標簽

        (1)WHERE標簽

        如果要進行多條件判斷,可能會出現select * from product_ and price > 10 的矛盾

        這個問題可以通過<where>標簽來解決

<select id="listProduct" resultType="Product">
	select * from product_
	<where>
		<if test="name!=null">
			and name like concat('%',#{name},'%')
		</if>		 	
		<if test="price!=null and price!=0">
			and price > #{price}
		</if>	
	</where>	 	
</select>

<where>標簽會進行自動判斷
如果任何條件都不成立,那么就在sql語句里就不會出現where關鍵字
如果有任何條件成立,會自動去掉多出來的 and 或者 or。
        (2)SET標簽

        與where標簽類似的,在update語句里也會碰到多個字段相關的問題。 在這種情況下,就可以使用set標簽

   <set>
     	<if test="name != null">name=#{name},</if>
     	<if test="price != null">price=#{price}</if>
    </set>

        (3)TRIM標簽,用來定制想要的功能

        比如:替換where標簽

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ... 
</trim>

                    替換set標簽

<trim prefix="SET" suffixOverrides=",">
  ...
</trim>

     3、CHOOSE WHEN OTHERWISE 標簽

        (1)Mybatis里面沒有else標簽,但是可以使用when otherwise標簽來達到這樣的效果。

            在Product.xml中

    <mapper namespace="com.how2java.pojo">
        <select id="listProduct" resultType="Product">
              SELECT * FROM product_
              <where>
                <choose>
                  <when test="name != null">
                    and name like concat('%',#{name},'%')
                  </when>          
                  <when test="price !=null and price != 0">
                    and price > #{price}
                  </when>                
                  <otherwise>
                    and id >1
                  </otherwise>
                </choose>
              </where>
        </select>
    </mapper>

        其作用是: 提供了任何條件,就進行條件查詢,否則就使用id>1這個條件。

    4、FOREACH 標簽,通常用于in 這樣的語法里.

          如例,如圖查詢出id等于1,3,5的數據出來。

            在Product.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.how2java.pojo">
    <select id="listProduct" resultType="Product">
          SELECT * FROM product_
            WHERE ID in
                <foreach item="item" index="index" collection="list"
                    open="(" separator="," close=")">
                    #{item}
                </foreach>
    </select>
    </mapper>

            在TestForeach.java中

package com.how2java;
  
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
 
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 com.how2java.pojo.Product;
  
public class TestMybatis {
  
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
 
        List<Integer> ids = new ArrayList();
        ids.add(1);
        ids.add(3);
        ids.add(5);
         
      List<Product> ps = session.selectList("listProduct",ids);
      for (Product p : ps) {
          System.out.println(p);
      }
 
        session.commit();
        session.close();
  
    }
}

    5、bind標簽

        bind標簽就像是再做一次字符串拼接,方便后續使用
        如本例,在模糊查詢的基礎上,把模糊查詢改為bind標簽。

          在Product.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.how2java.pojo">
        <!-- 本來的模糊查詢方式 -->
<!--         <select id="listProduct" resultType="Product"> -->
<!--             select * from   product_  where name like concat('%',#{0},'%') -->
<!--         </select> -->
             
        <select id="listProduct" resultType="Product">
            <bind name="likename" value="'%' + name + '%'" />
            select * from   product_  where name like #{likename}
        </select>
         
    </mapper>

        在TestMybatis.java中

package com.how2java;
  
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
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 com.how2java.pojo.Product;
  
public class TestMybatis {
  
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
 
        Map<String, String> params =new HashMap();
        params.put("name", "product");    
     
          List<Product> ps = session.selectList("listProduct",params);
          for (Product p : ps) {
              System.out.println(p);
          }
        session.commit();
        session.close();
    }
}

上述就是小編為大家分享的Mybatis中如何實現動態SQL了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸城市| 博罗县| 宁蒗| 射洪县| 汝阳县| 宣武区| 长泰县| 万山特区| 阳春市| 阿勒泰市| 长白| 焉耆| 库尔勒市| 承德市| 吕梁市| 洛南县| 浮山县| 岐山县| 德州市| 河津市| 渭源县| 莱芜市| 石嘴山市| 平原县| 南郑县| 涟水县| 石屏县| 萝北县| 济宁市| 突泉县| 建湖县| 丰城市| 华安县| 上栗县| 江都市| 进贤县| 南昌市| 东台市| 大安市| 肥西县| 微博|