Mybatis註解和SQL操作定義
阿新 • • 發佈:2020-12-31
Mybatis註解和定義SQL操作語句
定義SQL操作語句
在xxxmapper中定義SQL操作語句。
注意:多引數時,可使用arg0,arg1…代表引數
插入資料
<insert id="add" parameterType="String">
insert into user(name) values(#{name})
</ insert>
刪除資料
<delete id="delete" parameterType="int">
delete from user where user_id=#{user_id}
</delete>
查詢資料
<select id="GetAll" resultType="User">
select * from user
</select>
<select id="findById" parameterType ="int" resultType="User">
select * from user where user_id=#{user_id}
</select>
修改資料
<update id="update">
update user set name=#{arg0} where user_id=#{arg1}
</update>
${}和#{}的區別
1)在預編譯的時候,mybatis會${屬性名}中的內容簡單替換具體的屬性值,PrepardStatement物件進行預編譯的時候會把 #{屬性名}會替換成問號;
2)#{屬性名}可以防止sql注入;而${屬性名}可能會引發sql注入的安全問題;
動態SQL命令
動態sql命令可以在sql命令中加入業務邏輯控制。動態sql就是程式執行的時候才對sql命令進行編譯和執行。
<where>和<if>
where:動態新增where標籤;
if:判斷條件是否成立,如果條件成立才新增sql命令,否則不新增;
<select id="GetAll" resultType="User">
select * from user
<where>
<if test="_parameter!='' and _parameter!=null">
name=#{name}
</if>
</where>
</select>
<SQL>命令
作用:定義一個sql命令,可以被其他標籤引用,可以提高sql命令的重用性。
命令格式:
<sql id="sql標識">
sql命令
</sql>
引用格式
<include refid="sql標識"></include>
例子:
<sql id="namejudge">name=#{name}</sql>
<select id="GetAll" resultType="User">
select * from user
<where>
<if test="_parameter!='' and _parameter!=null">
<include refid="namejudge"/>
</if>
</where>
</select>
Mybatis註解
使用註解,就不需要在XxxMapper.xml檔案中定義sql命令。
5.1 基本註解
@Select: 定義select命令。
@Insert:定義insert命令。
@update:定義update命令。
@delete:定義delete命令。
/**
* 查詢所有列表
* @return
*/
@Select("select * from user")
List<User> GetAll();
/**
* 根據id查詢user
* @return
*/
@Select("select * from user where user_id=#{user_id}")
User findById(int user_id);
/**
* 插入資料
*
*/
@Insert("insert into user(name) values(#{name})")
void add(String name);
/**
* 更新資料
* @param name:使用者名稱
* @param user_id:使用者id
*/
@Update("update user set name=#{name} where user_id=#{user_id}")
void update(@Param(value = "name")String name,@Param(value = "user_id")int user_id);
/**
* 刪除
* @param user_id
*/
@Delete("delete from user where user_id=#{user_id}")
void delete(int user_id);
定義完成後,需要mybatis配置檔案中載入對映介面。
<mappers>
<mapper class="com.bc.dao.userMapper"/>
</mappers>
5.2 對映結果
@ResultType:指定結果型別
@Results:自定義結果對映
@Result:指定表的欄位與實體屬性的對映關係
如果查詢結果的欄位名與實體的屬性名字相同的時候,可以不需要指定結果的型別,它會自動進行對映。
如果查詢結果的欄位名與實體的屬性名不相同,那麼就需要自定義結果對映。
/**
* 查詢所有列表
* @return
*/
@Select("select * from user")
@ResultType(User.class)
// @Results({
// @Result(column = "user_id",property = "user_id"),
// @Result(column = "name",property = "name")
// })
List<User> GetAll();
@SelectKey
SelectKey在Mybatis中是為了解決Insert資料時不支援主鍵自動生成的問題
@SelectKey(before = true|false,
keyProperty = "實體屬性",
keyColumn = "主鍵列",
resultType = 對映結果的型別,
statement="獲取主鍵的sql")
5.3 在註解中使用動態sql
如果需要在註解中使用動態sql,那麼sql命令需要放在script中定義。
@Select("<script>"
+"select * from user"
+"<where>"
+"<if test=\"_parameter!= null and _parameter != ''\">"
+"name=#{name}"
+"</if>"
+"</where>"
+"</script>")