- 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沒有<>