mabitas中mapper和mapper.xml的关系

本文详细介绍了MyBatis中CategoryMapper接口及其XML配置文件的使用方法。包括接口编程思想、接口方法与XML文件之间的对应关系、XML命名空间设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Category.java


二、CategoryMapper.java 

这是mapper接口,面向接口编程的思想还是很重要的。也是本次博文最重要的部分。

接口定义有以下特点:

  1. Mapper 接口方法名和 CategoryMapper.xml 中定义的每个 sql 的 id 同名。
  2. Mapper 接口方法的输入参数类型和 CategoryMapper.xml 中定义的 sql 的parameterType 类型相同。
  3. Mapper 接口的返回类型和 CategoryMapper.xml 中定义的 sql 的 resultType 类型相同

三、CategoryMapper.xml 

1.xml文件的namespace要写成mapper接口的路径。


2.sql的id和mapper中的方法名要对应起来,比如下面,mapper中方法名为add,insert的sql标签id也要为add


### 三层架构中的 Mapper 层与 Mapper XML 文件的使用 在 Spring Boot 应用中,当使用 MyBatis 作为持久层框架时,通常会将数据库操作逻辑封装在 **Mapper 层**(也称为 DAO 层),并通过 **Mapper XML 文件**来定义 SQL 语句。这种设计将接口定义与 SQL 实现分离,提高了代码的可维护性可读性。 #### Mapper 接口的定义规则 Mapper 接口用于声明数据库操作方法,这些方法的命名参数应与 XML 文件中定义的 SQL 语句相对应。接口方法通常不包含实现逻辑,而是通过 MyBatis 的动态代理机制,在运行时自动绑定到对应的 SQL 语句上。 例如,定义一个 `UserMapper` 接口如下: ```java package com.example.mapper; import com.example.model.User; import java.util.List; public interface UserMapper { User selectUserById(Long id); List<User> selectAllUsers(); void insertUser(User user); } ``` 接口中的方法名 `selectUserById`、`selectAllUsers` `insertUser` 需要在对应的 Mapper XML 文件中定义具体的 SQL 语句,并通过 `namespace` 属性与该接口绑定[^1]。 #### Mapper XML 文件的作用与使用 Mapper XML 文件用于定义具体的 SQL 语句,并通过 `namespace` 属性与对应的 Mapper 接口进行绑定。每个 `<select>`、`<insert>`、`<update>` 或 `<delete>` 标签对应接口中的一个方法。 例如,`UserMapper.xml` 文件内容如下: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <select id="selectUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select> <select id="selectAllUsers" resultType="com.example.model.User"> SELECT * FROM users </select> <insert id="insertUser"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> </mapper> ``` 在上述 XML 文件中,`namespace` 指向 `UserMapper` 接口的全限定名,`id` 属性与接口方法名一致,从而实现接口与 SQL 的绑定。 #### 特殊字符的处理 在 XML 文件中编写 SQL 语句时,某些特殊字符如 `<` `>` 需要进行转义,否则会被解析为 XML 标签。可以通过 `<` 表示 `<`,`>` 表示 `>`,或者使用 CDATA 区块来避免 XML 解析问题。 例如: ```xml <update id="updatePreWorkDate"> <![CDATA[ UPDATE employee e1 JOIN employee e2 ON e2.statistics_date < e1.statistics_date AND e2.emplid = e1.emplid SET e1.pre_work_date = e2.statistics_date WHERE NOT EXISTS ( SELECT 1 FROM employee_absent_resign_statistics e3 WHERE e3.statistics_date < e1.statistics_date AND e3.emplid = e1.emplid AND e3.statistics_date > e2.statistics_date ) ]]> </update> ``` 使用 `<![CDATA[]]>` 区块可以避免对 `<` `>` 进行转义,使 SQL 语句更易读[^2]。 #### Spring Boot 中的配置 在 Spring Boot 项目中,需要配置 MyBatis 并指定 Mapper XML 文件的位置。通常在 `application.properties` 或 `application.yml` 中配置如下内容: ```properties mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.example.model ``` 上述配置指定了 Mapper XML 文件的路径,并为实体类设置了别名包路径,从而简化 SQL 中的类型引用。 #### 示例整合 在实际开发中,Mapper 接口XML 文件的配合使用流程如下: 1. 定义 Mapper 接口,声明数据库操作方法; 2. 编写对应的 Mapper XML 文件,定义 SQL 语句并绑定接口; 3. 在 Service 层注入 Mapper 接口,调用其方法进行数据操作; 4. 在 Controller 层调用 Service 方法,处理 HTTP 请求。 例如,Service 层代码如下: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public User getUserById(Long id) { return userMapper.selectUserById(id); } public List<User> getAllUsers() { return userMapper.selectAllUsers(); } public void addUser(User user) { userMapper.insertUser(user); } } ``` Controller 层代码如下: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.getUserById(id); } @GetMapping public List<User> getUsers() { return userService.getAllUsers(); } @PostMapping public void createUser(@RequestBody User user) { userService.addUser(user); } } ``` 通过上述结构,实现了 Spring Boot 中基于 MyBatis 的数据访问层设计。 ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值