天天看點

【MyBatis架構】動态SQL之IF詳解

概念:

根據不同的狀況生成不同的SQL語句。

關鍵字:

if,choose(when,otherwise),trim(where,set),foreach

.

搭建環境:

  • 資料庫:
CREATE TABLE book(id INT(10) PRIMARY KEY COMMENT '書id',
NAME VARCHAR(50) NOT NULL COMMENT '書名',
author VARCHAR(20) NOT NULL COMMENT '作者',
TIME DATETIME NOT NULL COMMENT '釋出時間',
seal INT(30) NOT NULL COMMENT '銷量'
 )ENGINE=INNODB DEFAULT CHARSET=utf8;
           
  • 建立一個子產品:

    實體類:

import lombok.Data;

import java.util.Date;

/**
 * @author jitwxs
 * @date 2021年04月06日 14:46
 */
@Data
public class Book {
    private int id;
    private String name;
    private String author;
    private Date time;
    private int seal;
}

           

接口:

import pojo.Book;


public interface BookMapper {
    //插入資料
   int addBook(Book book);

}

           

編寫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">
<!--namespace=綁定一個對應的dao借口/mapper接口-->
<mapper namespace="dao.BookMapper">
 <insert id="addBook" parameterType="Book">
     insert into book(id,name,author,time,seal) values (#{id},#{name},#{author},#{time},#{seal})
 </insert>
</mapper>

           

編寫IDUtils:

public class IdUtils {
    public static String getId(){
        return UUID.randomUUID().toString().replaceAll("-",".");
    }}
           

插入資料:

import org.apache.ibatis.session.SqlSession;

import pojo.Book;
import utils.IdUtils;
import utils.MyBatisUtils;

import java.util.Date;


/**
 * @author jitwxs
 * @date 2021年04月05日 20:04
 */
public class Test {

 @org.junit.Test
    public  void test(){
     SqlSession sqlSession=MyBatisUtils.getSqlSession();
     BookMapper bookMapper=sqlSession.getMapper(BookMapper.class);
     Book book=new Book();
     book.setId(IdUtils.getId());
     book.setName("三國");
     book.setAuthor("羅貫中");
     book.setTime(new Date());
     book.setSeal(999);
     bookMapper.addBook(book);

     book.setId(IdUtils.getId());
     book.setName("C++");
     bookMapper.addBook(book);

     book.setId(IdUtils.getId());
     book.setName("Java");
     bookMapper.addBook(book);

     book.setId(IdUtils.getId());
     book.setName("微服務");
     bookMapper.addBook(book);
     sqlSession.close();

 }
}

           
【MyBatis架構】動态SQL之IF詳解

IF判斷:

  • 需求

    :查詢書籍 如果輸入書名,則根據書名查詢,如果輸入作者則根據作者查詢,如果什麼都沒有輸入,則查詢所有。
  • 編寫接口

  • 編寫xml配置檔案

<select id="queryBookByIf" parameterType="map" resultType="Book">
        select * from book
        <where>
            <if test="name!=null">
                and name=#{name}
            </if>
            <if test="author!=null">
                and author=#{author}
            </if>
        </where>
           

測試:

1、

什麼都不輸入

@org.junit.Test
       public  void testIf(){
            SqlSession sqlSession=MyBatisUtils.getSqlSession();
            BookMapper bookMapper=sqlSession.getMapper(BookMapper.class);
            HashMap map=new HashMap();
          
          List<Book> bookList= bookMapper.queryBookByIf(map);
     for (Book book : bookList) {
         System.out.println(book);
     }
            sqlSession.close();
       }
           

測試結果:

【MyBatis架構】動态SQL之IF詳解

2、

輸入作者

【MyBatis架構】動态SQL之IF詳解