真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL動態(tài)SQL拼接怎么實現(xiàn)

這篇“MySQL動態(tài)SQL拼接怎么實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL動態(tài)SQL拼接怎么實現(xiàn)”文章吧。

創(chuàng)新互聯(lián)建站是專業(yè)的禹州網(wǎng)站建設(shè)公司,禹州接單;提供成都網(wǎng)站設(shè)計、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行禹州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

一、動態(tài)sql拼接

目標(biāo)

  • 能夠使用mybatis的標(biāo)簽實現(xiàn)動態(tài)SQL拼接

分析

我們在前邊的學(xué)習(xí)過程中,使用的SQL語句都非常簡單。而在實際業(yè)務(wù)開發(fā)中,我們的SQL語句通常是動態(tài)拼接而成的,比如:條件搜索功能的SQL語句。

# 提供了一個功能:用戶可以在頁面上根據(jù)username、sex、address進(jìn)行搜索
# 用戶輸入的搜索條件:可以是一個條件,也可能是兩個、三個

# 只輸入一個條件:姓名是"王"
SELECT * FROM USER WHERE username LIKE '%王%'
# 只輸入一個條件:性別是“男”
SELECT * FROM USER WHERE sex = '男'
# 輸入兩個條件:姓名“王”,性別“男”
SELECT * FROM USER WHERE username LIKE '%王%' AND sex = '男'
# 輸入三個條件:姓名“王”,性別“男”,地址“北京”
SELECT * FROM USER WHERE username LIKE '%王%' AND sex = '男' AND address LIKE '%北京%';

在Mybatis中,SQL語句是寫在映射配置的XML文件中的。Mybatis提供了一些XML的標(biāo)簽,用來實現(xiàn)動態(tài)SQL的拼接。

常用的標(biāo)簽有:

  • :用來進(jìn)行判斷,相當(dāng)于Java里的if判斷

  • :通常和if配合,用來代替SQL語句中的where 1=1

  • :用來遍歷一個集合,把集合里的內(nèi)容拼接到SQL語句中。例如拼接:in (value1, value2, ...)

  • :用于定義sql片段,達(dá)到重復(fù)使用的目的

講解

1. 準(zhǔn)備Mybatis環(huán)境
  • 創(chuàng)建java項目,導(dǎo)入jar包;準(zhǔn)備JavaBean

  • 創(chuàng)建映射器接口UserDao

  • 創(chuàng)建映射配置文件UserDao.xml

  • 創(chuàng)建全局配置文件SqlMapConfig.xml

  • 創(chuàng)建日志配置文件log4j.properties

2. 標(biāo)簽:
語法介紹


	SQL語句內(nèi)容, 如果判斷為true,這里的SQL語句就會進(jìn)行拼接

使用示例
  • 根據(jù)用戶的名稱和性別搜索用戶信息。把搜索條件放到User對象里,傳遞給SQL語句

  • 映射器接口UserDao上加方法

package com.demo.dao;import com.demo.domain.User;import java.util.List;public interface UserDao {
    /**
     * 根據(jù)username和sex搜索用戶
     * @param user 封裝了搜索條件的User對象
     * @return 搜索的結(jié)果
     */
    List search2(User user);}

  • 映射文件UserDao.xml里配置statement



    
    
        select * from user where 1=1        0">
            and username like "%"#{username}"%"        
        0">
            and sex = #{sex}        
    

  • 功能測試,在測試類里加測試方法

package com.demo;import com.demo.dao.UserDao;import com.demo.domain.User;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 org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;public class SqlTest {

    private UserDao userDao;
    private SqlSession session;
    private InputStream is;

    /**
     * 要求:根據(jù)username和sex搜索用戶
     *      搜索條件放到user對象里
     */
    @Test
    public void testSearch(){
        User user = new User();
        // user.setUsername("王");
        // user.setSex("男");

        List userList = userDao.search2(user);
        userList.forEach(System.out::println);
    }


    @Before
    public void init() throws IOException {
        //1. 讀取全局配置文件
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2. 得到一個SqlSession對象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        session = factory.openSession();
        userDao = session.getMapper(UserDao.class);
    }

    @After
    public void destroy() throws IOException {
        session.close();
        is.close();
    }}

3. 標(biāo)簽
語法介紹

在剛剛的練習(xí)的SQL語句中,我們寫了where 1=1。如果不寫的話,SQL語句會出現(xiàn)語法錯誤。Mybatis提供了一種代替where 1=1的技術(shù):標(biāo)簽。

代碼示例

把上一章節(jié)的實現(xiàn)代碼進(jìn)行優(yōu)化,使用標(biāo)簽代替where 1=1

  • 映射器UserDao的search2方法:已有,不用修改

/**
 * 根據(jù)username和sex搜索用戶
 * @param user 封裝了搜索條件的User對象
 * @return 搜索的結(jié)果
 */List search2(User user);

  • 在映射文件UserDao.xml里修改SQL語句


    select * from user    
        0">
            and username like "%"#{username}"%"        
        0">
            and sex = #{sex}        
    

  • 在測試類里進(jìn)行功能測試:測試方法不需要修改

@Testpublic void testSearch(){
    User user = new User();
    // user.setUsername("王");
    // user.setSex("男");

    List userList = userDao.search2(user);
    userList.forEach(System.out::println);}

4. 標(biāo)簽
語法介紹

foreach標(biāo)簽,通常用于循環(huán)遍歷一個集合,把集合的內(nèi)容拼接到SQL語句中。例如,我們要根據(jù)多個id查詢用戶信息,SQL語句:

select * from user where id = 1 or id = 2 or id = 3;select * from user where id in (1, 2, 3);

假如我們傳參了id的集合,那么在映射文件中,如何遍歷集合拼接SQL語句呢?可以使用foreach標(biāo)簽實現(xiàn)。


    #{id}

使用示例
  • 有搜索條件類QueryVO如下:

package com.itheima.domain;public class QueryVO {
    private Integer[] ids;

    public Integer[] getIds() {
        return ids;
    }

    public void setIds(Integer[] ids) {
        this.ids = ids;
    }}

  • 在映射器UserDao里加方法

/**
     * QueryVO里有一個Integer[] ids
     * 要求:根據(jù)ids查詢對應(yīng)的用戶列表
     */List search3(QueryVO vo);

  • 在映射文件UserDao.xml里配置statement

    
    
        
        select * from user where        
            #{id}        
    

  • 功能測試

    @Test
    public void testSearch3(){
        QueryVO vo = new QueryVO();
        vo.setIds(new Integer[]{41,42,43,44,45});
        List userList = userDao.search3(vo);
        userList.forEach(System.out::println);
    }

5. 標(biāo)簽

在映射文件中,我們發(fā)現(xiàn)有很多SQL片段是重復(fù)的,比如:select * from user。Mybatis提供了一個標(biāo)簽,把重復(fù)的SQL片段抽取出來,可以重復(fù)使用。

語法介紹

在映射文件中定義SQL片段:

sql語句片段

在映射文件中引用SQL片段:

使用示例

在查詢用戶的SQL中,需要重復(fù)編寫:select * from user。把這部分SQL提取成SQL片段以重復(fù)使用

  • 要求:QueryVO里有ids,user對象。根據(jù)條件進(jìn)行搜索

  • 修改QueryVO,增加成員變量user

package com.itheima.domain;/**
 * @author liuyp
 * @date 2021/09/07
 */public class QueryVO {
    private Integer[] ids;
    private User user;

    //get/set方法……}

  • 在映射器UserDao里加方法

    /**
     * 動態(tài)SQL拼接的綜合應(yīng)用:if、where、foreach
     * 要求:QueryVo里有ids、username、sex值,根據(jù)這些值進(jìn)行搜索
     */
    List search4(QueryVO vo);

  • 在映射文件UserDao.xml里配置statement


    
    
    
         0">
            
                #{id}            
        
        
        
    select * from user
    
         0">
            and username like "%"#{user.username}"%"        
         0">
            and sex = #{user.sex}        
    

  • 在測試類里加測試方法

    @Test
    public void testSearch4(){
        QueryVO vo = new QueryVO();
        vo.setIds(new Integer[]{41,42,43,44,45});

        // User user = new User();
        // user.setUsername("王");
        // user.setSex("男");
        // vo.setUser(user);

        List userList = userDao.search4(vo);
        userList.forEach(System.out::println);
    }

以上就是關(guān)于“MySQL動態(tài)SQL拼接怎么實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:MySQL動態(tài)SQL拼接怎么實現(xiàn)
文章源于:http://weahome.cn/article/gegees.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部