1. 程式人生 > 其它 >Mybatis學習筆記-註解開發

Mybatis學習筆記-註解開發

面向介面程式設計

  • 根本原因:【解耦】,【可拓展】,【更高規範性】
  • 介面型別:
    • abstract class
    • interface

使用註解開發

  • 簡單語句可用註解開發(直接查詢,列名與屬性名相同)
本質:反射機制實現
底層:動態代理
    • 註解直接在介面上實現
@Select("SELECT * FROM user")
List<User> getUsers();
    • 也與要配置核心配置檔案
<!--繫結介面-->
<mappers>
    <mapper class="cn.iris.dao.UserMapper"/>
</mappers>
    • 測試
    @Test
    public void getUsersTest() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUsers();

        for ( User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }
  • 複雜情況均用xml檔案配置

註解實現CRUD

在工具類建立時實現自動提交事務

// 有了 SqlSessionFactory,我們可以從中獲得 SqlSession 的例項
public static SqlSession getSqlSession() {
    return sqlSessionFactory.openSession(true);
}
// 涉及原始碼
public SqlSession openSession(boolean autoCommit) {
    return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}

查詢

@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(@Param("id") int id);

新增

@Insert("INSERT INTO user(id,name,pwd) VALUES (#{id},#{name},#{password})")
int addUser(User user);

修改

@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUser(@Param("id") int id, @Param("name") String name);

刪除

@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(@Param("id") int id);
方法存在多引數時,每個引數前都需要加@Param("列名")

@param()註解

  • 基本型別引數&String型別,需要加
  • 引用型別(如:User)不用加
  • 只有單參,可忽略但不建議
  • SQL中引用的則是該@param設定的屬性名

#{} 與 ${}區別

--#{}:預編譯符--沒有sql注入風險
--${}:常規編譯(字串拼接)--存在sql注入風險