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经验文字,请点击: