通用 Mapper 概述
通用 Mapper 是基于 MyBatis 框架實現(xiàn)的一個插件飘千,旨在簡化單表的增刪改查操作。其核心優(yōu)勢在于:
- 減少 SQL 編寫 :開發(fā)人員無需手動編寫 SQL 語句逞频,通過配置和簡單的注解即可實現(xiàn)數(shù)據(jù)的增刪改查。
- 簡化 DAO 層:無需在 DAO 接口中定義具體的方法拷泽,只需 遵循一定的命名規(guī)則 或 使用注解 州邢,即可調用預定義的 CRUD 方法。
- 快速開發(fā):只需要定義好實體類辙诞,即可自動支持相應的增刪改查功能辙售,大大提高了開發(fā)效率。
通過這些特性飞涂,通用 Mapper 顯著降低了開發(fā)復雜度旦部,使得開發(fā)者可以更加專注于業(yè)務邏輯的實現(xiàn)。
新一代通用 Mapper
如何使用
-
首先在maven項目封拧,在pom.xml中引入mapper的依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>space.terwer</groupId> <artifactId>mybatis-general-mapper</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>mybatis-general-mapper</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <jdk.version>17</jdk.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <!--mybatis坐標--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>org.jboss</groupId> <artifactId>jboss-vfs</artifactId> <version>3.2.15.Final</version> </dependency> <!--mysql驅動坐標--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> <scope>runtime</scope> </dependency> <!--mysql mapper坐標--> <dependency> <groupId>io.mybatis</groupId> <artifactId>mybatis-mapper</artifactId> <version>2.2.5</version> </dependency> <!-- 使用 Service 層封裝時 --> <dependency> <groupId>io.mybatis</groupId> <artifactId>mybatis-service</artifactId> <version>2.2.5</version> </dependency> <!-- 使用 ActiveRecord 模式時 <dependency> <groupId>io.mybatis</groupId> <artifactId>mybatis-activerecord</artifactId> <version>2.2.5</version> </dependency> --> <dependency> <groupId>io.mybatis</groupId> <artifactId>mybatis-jakarta-jpa</artifactId> <version>2.2.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project>
-
插一句志鹃,答疑解惑:什么是Active Record模式夭问?
說一說 ActiveRecord 模式的應用場景泽西。
在一個簡單的增刪改查系統(tǒng)中,如果用不到 service 層缰趋,那就可以直接在 controller 層用實體類進行直接的CRUD捧杉。
但是在一個有 service 層的系統(tǒng)中,如果要實現(xiàn)模塊的隔離秘血,就需要考慮實體類只能在 service 層使用味抖, 不能讓實體類逸出到其他層,因此在和 controller 層交互時就需要有 VO 或 DTO 進行數(shù)據(jù)轉換灰粮, 這樣才能保證實體類調用 CRUD 方法不出錯仔涩。
-
Mybatis配置文件中完成配置
<mappers> <!-- 掃描指定的包 --> <package name="space.terwer.mapper"/> </mappers>
-
實體類設置主鍵
/** * @author terwer on 2024/12/4 */ @Entity.Table("user") public class User { @Entity.Column(id = true) private Integer id; private String username; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
-
測試代碼
/** * @author terwer on 2024/12/4 */ public class UserTest { @Test public void test1() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); try (SqlSession sqlSession = sqlSessionFactory.openSession()) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setUsername("測試4"); user.setId(4); // insert 接口 // 保存一個實體,null值也會保存粘舟,不會使用數(shù)據(jù)庫默認值 userMapper.insert(user); sqlSession.commit(); } } }
-
結果如下:
Checking to see if class space.terwer.mapper.UserMapper matches criteria [is assignable to Object] cacheKey - space.terwer.mapper.UserMapper.insert : <script> INSERT INTO user(id,username) VALUES (#{id},#{username}) </script> Opening JDBC Connection Created connection 527829831. Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1f760b47] ==> Preparing: INSERT INTO user(id,username) VALUES (?,?) ==> Parameters: 4(Integer), 測試4(String) <== Updates: 1 Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1f760b47]
查看數(shù)據(jù)庫: