SpringBoot-MySQL(結合XML,多條查詢,動態SQL)


  • XML文件

在resource下面建立一個包,命名為mapper,再創建sring config文件

<?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.Lee.connect.mapper.UserMapper">
    <select id="getUserById" resultType="com.Lee.connect.table.TableUser">
        SELECT * FROM t1
        WHERE id=#{id}
    </select>
</mapper>

注意頭部的兩個標簽,制定了xml的屬性信息,是公用的

其次指定<mapper>標簽表示其為在mapper中使用的信息,同時指定命名空間namespace(就是在mapper中定義的類名)

在<mapper>內即包含了由sql語句命名的標簽,如<select>

在<select>中,需要指定id,即namespace中的類對應的方法名(此處就完成了XML文件中sql語句和mapper文件中類方法的連接)

同時也需要指定resultType,來表示返回值的類型,如果是自定的實體類,需要完成寫出,如com.Lee.connect.table.TableUser

如果沒有返回值,則不需要指定

對於自增長id(增加數據操作),將如下的@Option設置添加到<insert>標簽內

@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")

<insert id="addUser" useGeneratedKeys = true,keyProperty = "id",keyColumn = "id">

此時在select標簽中就可以寫入相應的select語句,但仍要使用mapper中定義的變量

(sql語句建議使用大寫,並在必要的地方換行)

  • 屬性文件
mybatis.mapper-locations=classpath:**/mapper/*.xml

 作用是掃描Mapper接口對應的XML文件,此處指的是resources下mapper位置對應的所有xml文件

mybatis.typeAliasesPackage=com.Lee.connect.mapper

使用如上方法來指定項目中的mapper

logging.level.com.Lee.connect.mapper=debug

使用logging.level來對mapper的執行進行輸出

http請求調用了mapper,其會在idea控制台輸出程序的執行信息,即調試日志

  • mapper
package com.Lee.connect.mapper;

import com.Lee.connect.table.TableUser;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

@Mapper
@Component(value = "UserMapper")
public interface UserMapper {
    //select
    TableUser getUserById(@Param("id") Integer id);

此時就可以不使用注解@Select進行加載,而可以直接定義方法

  •  動態sql語句

mapper語句

    //select by page
    List<TableUser> getUserByPage(@Param("UserName") String UserName);

此處會返回多條數據,所以使用LIst<entity對象>來接收對象的多個數據

注意此處需要調用如下庫

import java.util.List;

系統有時會自動調用如下庫,會報錯

import java.awt.*;

controller語句

    @RequestMapping(value = "/getUserByPage")
    @ResponseBody
    public Object getUserByPage(@RequestParam("UserName") String UserName){
        List<TableUser> users = userMapper.getUserByPage(UserName);
        return users;
    }

此處同樣使用LIst<entity對象>實例后的user對象接收多條數據

sql語句

    select * from sys_test
    where 1=1
     <if test="name != null">
            and name=#{name}
     </if>
  </select>

<where>標簽里的內容會將select * from sys_test的數據進一步細分

在其內部添加<if>,注意條件選擇一般會加上and,表示條件符合則繼續執行(sql中每個語句前面都要加個關鍵字)

所以上述的執行就是如果test中的name = != null成立,則執行where 1=1 and name = #{name}

(1=1的作用就是后面可以使用and來連接多個條件)

此處就是if條件成立,則共同執行1=1和name=#{name}

因為此處的where沒有<>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM