Mybatis全解-04
阿新 • • 發佈:2021-06-22
使用註解開發
先學習思想
面向介面程式設計
為什麼要面向介面程式設計?根本原因:解耦,可拓展,提高複用,分層開發中,上層不用管具體的實現,大家遵守共同的標準,使得開發變得容易,規範性更好。
關於介面的理解
定義(規範、約束)與實現(名實分離原則)的分離。
介面的本身反映了系統設計人員對系統的抽象理解。
介面分為兩類:
1.一個個體的抽象,它可對應為一個抽象體。
2.一個個體某一方面的抽象,形成一個抽象面。
一個個體可能有多個抽象面,抽象體與抽象面是有區別的。
三個面向的區別
面向物件:考慮問題時,以物件為單位,考慮它的屬性及方法。
面向過程:考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現。
面向介面:針對複用技術而言,更多的體現就是對系統整體的架構。
利用註解開發
之前我們的對映語句sql是寫在對應的Mapper.xml檔案中的。使用註解開發就不需要xml檔案了,只需要把對應的sql寫在其介面上就可以。
查詢@Select
//查詢全部使用者 @Select("select id,name,pwd password from user") public List<User> getAllUser();
這裡需要注意,因為沒有了xml檔案,所以繫結改為繫結介面
<!--使用class繫結介面--> <mappers> <mapper class="com.li.mapper.UserMapper"/> </mappers>
@Test public void testGetAllUser() { SqlSession session = MybatisUtils.getSession(); //本質上利用了jvm的動態代理機制 UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.getAllUser(); for (User user : users){ System.out.println(user); } session.close(); }
修改@Update
//修改一個使用者 @Update("update user set name=#{name},pwd=#{pwd} where id = #{id}") int updateUser(User user);
@Test public void testUpdateUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(1, "李慧", "1234556"); mapper.updateUser(user); session.commit(); session.close(); }
刪除@Delete
//根據id刪除用 @Delete("delete from user where id = #{id}") int deleteUser(@Param("id")int id);
@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); mapper.deleteUser(6); session.commit(); session.close(); }
新增@Insert
//新增一個使用者 @Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})") int addUser(User user);
@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(6, "李慧", "654321"); mapper.addUser(user); session.close(); }
再次注意:增刪改需要手動提交事務。
寫在最後:
關於@Param
@Param註解用於給方法的引數取名字。
在方法只有一個引數的情況下,可以不使用。
在有多個引數的情況下,建議最好帶上。
如果引數是Javabean,不能使用@Param。
#與$的區別
#{}的作用主要是替換預編譯語句中的佔位符,一般使用。
INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);
${} 的作用是直接進行字串替換
INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('kuangshen');
關於使用xml檔案和註解的選擇
在少量引數,且關係不復雜時可以選擇使用註解。
在引數多,並且之間關係複雜,涉及到結果集對映,一對多、多對一的情況下,選擇使用xml更好。
使用xml和註解協同開發,才是最佳實踐。