千家信息网

Mybatis中如何实现动态SQL

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,这期内容当中小编将会给大家带来有关Mybatis中如何实现动态SQL,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。二、动态SQL1、 IF 标签在Product.x
千家信息网最后更新 2024年09月25日Mybatis中如何实现动态SQL

这期内容当中小编将会给大家带来有关Mybatis中如何实现动态SQL,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

二、动态SQL

1、 IF 标签

在Product.xml中

在TestIF.java中

        System.out.println("查询所有的");        List ps = session.selectList("listProduct");        for (Product p : ps) {            System.out.println(p);        }                 System.out.println("模糊查询");        Map params = new HashMap<>();        params.put("name","a");        List 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 的矛盾

这个问题可以通过标签来解决

标签会进行自动判断
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字
如果有任何条件成立,会自动去掉多出来的 and 或者 or。
(2)SET标签

与where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签

          name=#{name},       price=#{price}    

(3)TRIM标签,用来定制想要的功能

比如:替换where标签

  ... 

替换set标签

  ...

3、CHOOSE WHEN OTHERWISE 标签

(1)Mybatis里面没有else标签,但是可以使用when otherwise标签来达到这样的效果。

在Product.xml中

                

其作用是: 提供了任何条件,就进行条件查询,否则就使用id>1这个条件。

4、FOREACH 标签,通常用于in 这样的语法里.

如例,如图查询出id等于1,3,5的数据出来。

在Product.xml中

            

在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 ids = new ArrayList();        ids.add(1);        ids.add(3);        ids.add(5);               List ps = session.selectList("listProduct",ids);      for (Product p : ps) {          System.out.println(p);      }         session.commit();        session.close();      }}

5、bind标签

bind标签就像是再做一次字符串拼接,方便后续使用
如本例,在模糊查询的基础上,把模糊查询改为bind标签。

在Product.xml中

                                              

在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 params =new HashMap();        params.put("name", "product");                   List ps = session.selectList("listProduct",params);          for (Product p : ps) {              System.out.println(p);          }        session.commit();        session.close();    }}

上述就是小编为大家分享的Mybatis中如何实现动态SQL了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0