温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis怎样写sql

发布时间:2026-10-14 00:39:44 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java + MyBatis 中,写 SQL 主要有 三种方式,下面从最常见到进阶给你说明,并配示例。


一、XML 方式(最常用、最推荐)

1️⃣ 定义 Mapper 接口

public interface UserMapper {
    User selectById(Long id);
}

2️⃣ 写 XML(UserMapper.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="selectById" parameterType="long" resultType="com.example.entity.User">
        SELECT id, name, age
        FROM user
        WHERE id = #{id}
    </select>

</mapper>

✅ 优点:SQL 清晰、易维护、复杂 SQL 友好


二、注解方式(简单 SQL 用)

@Mapper
public interface UserMapper {

    @Select("SELECT id, name, age FROM user WHERE id = #{id}")
    User selectById(@Param("id") Long id);
}

常用注解

  • @Select
  • @Insert
  • @Update
  • @Delete

✅ 适合:简单 SQL
❌ 不适合:复杂动态 SQL


三、动态 SQL(XML 中)

if

<select id="selectUser" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="age != null">
        AND age = #{age}
    </if>
</select>

foreach(IN 查询)

<select id="selectByIds" resultType="User">
    SELECT * FROM user
    WHERE id IN
    <foreach collection="ids" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

四、参数传递方式

1️⃣ 单个参数

User selectById(Long id);

2️⃣ 多个参数

User selectByNameAndAge(@Param("name") String name,
                        @Param("age") Integer age);

3️⃣ 对象参数

User selectByUser(User user);

五、INSERT 返回主键

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(name, age)
    VALUES(#{name}, #{age})
</insert>

六、示例完整流程

  1. 写 Entity
  2. 写 Mapper 接口
  3. 写 XML / 注解
  4. Spring 注入 Mapper 使用
@Autowired
private UserMapper userMapper;

User user = userMapper.selectById(1L);

如果你愿意,可以告诉我:

  • 用的是 Spring Boot / Spring / 原生 MyBatis
  • SQL 是 查询 / 分页 / 多表 / 动态条件

我可以直接帮你写 可运行示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手