一、Mapper介紹
Mapper作為Mybatis框架中的一個關鍵組件,用於定義與數據庫交互的方法。在Mybatis中,Mapper需要定義在XXXMapper.xml文件中,並對應於一個Java接口。
XXXMapper.xml文件主要包括兩部分內容:Mybatis配置信息和SQL語句。其中,Mybatis配置信息包括數據源信息、事務管理器、全局配置、對象工廠、插件等配置,SQL語句主要包括select、insert、update、delete等操作,使用XML標籤定義。
Java接口中定義了Mapper中所需要的方法,每個方法對應一個在XXXMapper.xml文件中定義的SQL語句,並且使用註解或XML標籤對方法進行配置。例如,使用@Select註解定義一個select操作:
@Select("SELECT * FROM users WHERE id = #{id}") User getUserById(int id);
二、Mapper的分類
Mapper主要分為兩種類型:基於XML配置的Mapper和基於註解的Mapper。
1、基於XML配置的Mapper
基於XML配置的Mapper是Mybatis最初的實現方式,通過定義XML文件實現Java代碼與SQL語句的分離。每個Mapper接口對應一個XML文件,其中Mapper接口中的每個方法對應XML文件中的一個SQL語句。
例如,在StudentMapper.xml文件中定義查詢所有學生信息的SQL語句:
SELECT * FROM students
對應的Java接口中定義selectAllStudents方法,並使用@Select註解指定該方法對應的SQL語句:
@Select("selectAllStudents") List selectAllStudents();
2、基於註解的Mapper
基於註解的Mapper是Mybatis的擴展實現方式,在Mapper接口中直接使用註解定義SQL語句,省去了XML文件的編寫。相比XML配置方式,基於註解的Mapper更加簡潔明了。
例如,使用@Select註解查詢所有學生信息:
@Select("SELECT * FROM students") List selectAllStudents();
三、Mappers的作用
在Mybatis中,Mappers扮演着非常重要的角色,可以提高代碼的可維護性和重用性。
1、解耦Java代碼和SQL語句
Mappers的最主要作用就是將Java代碼和SQL語句解耦,使Java代碼更加簡潔、易於維護。
例如,在Java代碼中,使用@Select註解查詢學生信息:
@Select("SELECT * FROM students WHERE id = #{id}") Student selectStudentById(int id);
雖然註解使用了SQL語句,但是Java代碼本身並沒有涉及到SQL語句,維護起來更加方便。
2、提高代碼的重用性
由於Mappers的存在,多個Java類可以共享同一個Mapper的方法,實現代碼重用,減少工作量。
例如,在StudentMapper接口中定義查詢所有學生信息的方法,可以在不同的Java類中調用:
public class ClassA { @Autowired private StudentMapper studentMapper; public List getAllStudents() { return studentMapper.selectAllStudents(); } } public class ClassB { @Autowired private StudentMapper studentMapper; public List getAllStudents() { return studentMapper.selectAllStudents(); } }
3、簡化操作
使用Mappers可以簡化操作,減少代碼量。例如,使用Mybatis中的動態SQL可以根據條件拼接SQL語句,省去手動拼接SQL語句的繁瑣過程。
例如,在StudentMapper中定義查詢學生信息的方法,根據不同的條件拼接SQL語句:
@SelectProvider(type = StudentSqlProvider.class, method = "selectStudents") List selectStudents(Map paramMap);
其中,StudentSqlProvider類中定義了根據條件查詢學生信息的方法:
public String selectStudents(Map paramMap) { // 根據參數動態拼接SQL語句,返回拼接完成的SQL語句 return "SELECT * FROM students WHERE 1 = 1" + generateDynamicSQL(paramMap); }
四、Mappers的註解介紹
Mybatis提供了豐富的註解,用於配置Mapper中的方法,以下是常用註解介紹。
1、@Select
用於配置查詢操作的SQL語句。例如:
@Select("SELECT * FROM students WHERE id = #{id}") Student selectStudentById(int id);
2、@Insert
用於配置插入操作的SQL語句。例如:
@Insert("INSERT INTO students (name, age, sex) VALUES (#{name}, #{age}, #{sex})") int insertStudent(Student student);
3、@Update
用於配置更新操作的SQL語句。例如:
@Update("UPDATE students SET name = #{name}, age = #{age}, sex = #{sex} WHERE id = #{id}") int updateStudent(Student student);
4、@Delete
用於配置刪除操作的SQL語句。例如:
@Delete("DELETE FROM students WHERE id = #{id}") int deleteStudentById(int id);
5、@Result
用於定義SQL查詢結果與Java對象的映射關係。例如:
@Results(id = "student", value = { @Result(column = "id", property = "id", id = true), @Result(column = "name", property = "name"), @Result(column = "age", property = "age"), @Result(column = "sex", property = "sex") })
五、總結
Mappers是Mybatis框架中的關鍵組件,用於定義與數據庫交互的方法,將Java代碼和SQL語句解耦,提高代碼的可維護性和重用性。Mappers分為基於XML配置的Mapper和基於註解的Mapper兩種類型。除此之外,Mappers還可以簡化操作,減少代碼量。Mybatis提供了豐富的註解,用於配置Mapper中的方法。
原創文章,作者:YNICO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371478.html