1. 程式人生 > 其它 >Mybatis全解-04

Mybatis全解-04

使用註解開發

先學習思想

面向介面程式設計

為什麼要面向介面程式設計?根本原因:解耦,可拓展,提高複用,分層開發中,上層不用管具體的實現,大家遵守共同的標準,使得開發變得容易,規範性更好。

關於介面的理解

定義(規範、約束)與實現(名實分離原則)的分離。

介面的本身反映了系統設計人員對系統的抽象理解。

介面分為兩類:

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和註解協同開發,才是最佳實踐。