Mybatis學習筆記-註解開發
阿新 • • 發佈:2021-08-06
面向介面程式設計
- 根本原因:【解耦】,【可拓展】,【更高規範性】
- 介面型別:
-
- 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注入風險