SpringBoot开发,MyBatis中Mapper的两种写法
发布于 作者:苏南大叔 来源:程序如此灵动~

继续聚焦于mybatis
中的mapper
文件的写法。因为mybatis
是以自由写sql
语句的,所以关于sql
语句写那里的问题,就分为两种写法了。其余相关代码,用法一致。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,openjdk@23.0.2
,IntelliJ IDEA 2024.3.4.1
,maven@3.3.2
,spring boot@2.5.4
,java@17
,mysql@5.7.26
,MyBatis@2.2.0
。
前置阅读
本文相关的spring boot
系列文章有:
- https://newsn.net/say/springboot.html
- https://newsn.net/say/springboot-hot.html
- https://newsn.net/say/springboot-model.html
- https://newsn.net/say/springboot-entity.html
- https://newsn.net/say/springboot-jpa.html
- https://newsn.net/say/springboot-session.html
- https://newsn.net/say/springboot-csrf.html
- https://newsn.net/say/springboot-aspect.html
- https://newsn.net/say/springboot-exception.html
- https://newsn.net/say/springboot-mybatis.html 【本文重点】
在上一篇文章里面,苏南大叔已经叙述了mybatis
的基本用法。MyBatis
的mapper
文件就相当于JPA
的repository
文件。基于上述文章里面的表述,再讲述MyBatis
中mapper
文件的两种写法。
合二为一的java文件【推荐】
src\main\java\com\example\demo\mapper\UserMapper.java
:
package com.example.demo.mapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user")
List<User> findAll();
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Long id);
@Select("SELECT * FROM user WHERE name = #{name}")
User findByName(String name);
@Insert("INSERT INTO user(name, password) VALUES(#{name}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(User user);
@Update("UPDATE user SET name = #{name}, password = #{password} WHERE id = #{id}")
void update(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
void deleteById(Long id);
@Select("SELECT COUNT(*) FROM user")
int count();
}
分开描述的java+xml组合
src\main\java\com\example\demo\mapper\UserMapper.java
:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> findAll();
User findById(Long id);
User findByName(String name);
void insert(User user);
void update(User user);
void deleteById(Long id);
int count();
}
src\main\resources\mappers\UserMapper.xml
:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="findAll" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<select id="findById" parameterType="long" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="findByName" parameterType="string" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE name = #{name}
</select>
<insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (name, password) VALUES (#{name}, #{password})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET name = #{name}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteById" parameterType="long">
DELETE FROM user WHERE id = #{id}
</delete>
<select id="count" resultType="int">
SELECT COUNT(*) FROM user
</select>
</mapper>
而且,这个组合下,还需要做个配置:src\main\resources\application.properties
:
mybatis.mapper-locations=classpath*:mappers/*.xml
结语
除了Mapper
文件有分歧外,其它的代码和上一篇文章相比,都一样。至于选择一个.java
文件,还是两个文件.java
+.xml
,就看大家的实际需求了。个人觉得,选择独立的.java
文件就挺好。
更多苏南大叔的java
经验文字,请点击:


