1. 程式人生 > 其它 >Mybatis註解和SQL操作定義

Mybatis註解和SQL操作定義

技術標籤:mybatisjava

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>")