网站建设资讯

NEWS

网站建设资讯

Mybatis中如何实现动态SQL

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

庆安网站建设公司成都创新互联,庆安网站设计制作,有大型网站制作公司丰富经验。已为庆安1000多家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的庆安做网站的公司定做!

二、动态SQL

    1、 IF 标签

        在Product.xml中


	select * from product_
	
		where name like concat('%',#{name},'%')
			 	

        在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 的矛盾

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


	select * from product_
	
		
			and name like concat('%',#{name},'%')
				 	
		
			and price > #{price}
			
		 	

标签会进行自动判断
如果任何条件都不成立,那么就在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中

    
        
              SELECT * FROM product_
              
                
                  
                    and name like concat('%',#{name},'%')
                            
                  
                    and price > #{price}
                                  
                  
                    and id >1
                  
                
              
        
    

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

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

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

            在Product.xml中



    
    
          SELECT * FROM product_
            WHERE ID in
                
                    #{item}
                
    
    

            在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中



    
        



             
        
            
            select * from   product_  where name like #{likename}
        
         
    

        在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了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


文章标题:Mybatis中如何实现动态SQL
网站网址:http://cdweb.net/article/ighjhj.html