目录

引言

if 标签 

trim 标签 

where 标签 

set 标签 

foreach 标签 


引言


核心思想


if 标签 

实例理解


创建数据库


实现 UserMapper 接口

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//添加 @Mapper 注解 代表接口会伴随这 项目启动注入到容器中
@Mapper
public interface UserMapper {

//    根据 nameage 字段筛选用户信息
    List<User> selectUser(@Param("user_name") String name,
                          @Param("user_age") Integer age);
}

实现 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.demo.mapper.UserMapper">

    <select id="selectUser" resultType="com.example.demo.entity.User">
        select * from user
        where 1=1
        <if test="user_name != null">
             and name = #{user_name}
        </if>
        <if test="user_age != null">
            and age = #{user_age}
        </if>
    </select>

</mapper>

分析功能 与 select 语句

情况一:

select * from user where name = #{user_name} and age = #{user_age}

情况二:

select * from user

情况三:

select * from user where age = #{user_age}

情况四:

  • name 不为空, age 为空,其所对应的 sql 语句为:
select * from user where name = #{user_name}

分析 XML 中的 select 语句 

注意:

  • 所以 XML 中的 select 语句必须加上绿框部分,否则将会导致 sql 语法错误

创建 selectUser 的测试方法

@Test
    void selectUser() {
        List<User> users = userMapper.selectUser(null,20);
        users.stream().forEach(System.out::println);
    }

执行测试方法

trim 标签 

属性


实例理解

<select id="selectUser" resultType="com.example.demo.entity.User">
        select * from user
        where 1=1
        <if test="user_name != null">
             and name = #{user_name}
        </if>
        <if test="user_age != null">
            and age = #{user_age}
        </if>
    </select>
select * from user
        <trim prefix="where" suffixOverrides="and">
            <if test="user_name != null">
                 name = #{user_name} and
            </if>
            <if test="user_age != null">
                 age =#{user_age}
            </if>
        </trim>

分析该 sql 语句

  • 此处经存在一种情况会 发生去除多余后缀 ‘and‘ 


注意:

where 标签 

实例理解

<select id="selectUser" resultType="com.example.demo.entity.User">
        select * from user
        <where>
            <if test="user_name != null">
                name = #{user_name}
            </if>
            <if test="user_age != null">
                and age =#{user_age}
            </if>
        </where>
</select>

注意:

  • 上述实例为 <where> 标签的正确写法不能写成下述 sql 语句
<select id="selectUser" resultType="com.example.demo.entity.User">
        select * from user
        <where>
            <if test="user_name != null">
                name = #{user_name} and
            </if>
            <if test="user_age != null">
                age =#{user_age}
            </if>
        </where>
</select>

set 标签 

实例理解


准备数据库


 实现 UserMapper 接口

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//添加 @Mapper 注解 代表接口会伴随这 项目启动注入到容器中
@Mapper
public interface UserMapper {
//    根据 id 修改用户信息
    Integer updateById(User user);

}

实现 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.demo.mapper.UserMapper">

    <update id="updateById" parameterType="com.example.demo.entity.User">
        update user
        <set>
            <if test="name != null">
                name = #{name},
            </if>
            <if test="age != 0">
                age = #{age},
            </if>
            <if test="password != null">
                password = #{password},
            </if>
            <if test="state != 0">
                state = #{state}
            </if>
        </set>
        where id = #{id}
    </update>

</mapper>

创建 updateById 的测试方法

@Test
void updateById() {
    User user = new User();
    user.setId(4);
    user.setName("haoran");
    user.setAge(20);
    user.setPassword("123123");
    int result = userMapper.updateById(user);
    System.out.println("updateById 方法 :" + (result == 1 ? "修改成功" : "修改失败"));
}

执行测试方法


注意:

  • <set> 标签相当于 <trim prefix=”set” suffixOverrides = “,”>

foreach 标签 

属性


实例理解


 准备数据库


 实现 UserMapper 接口

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//添加 @Mapper 注解 代表该接口会伴随这 项目启动注入到容器中
@Mapper
public interface UserMapper {
//    根据多个 id 批量禁用户
    Integer updateStateByIds(@Param("user_ids") List<Integer> ids);
}

实现 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.demo.mapper.UserMapper">

    <update id="updateStateByIds">
        update user set state = 0
        where id in
        <foreach collection="user_ids" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </update>

</mapper>

创建 updateStateByIds 的测试方法

  • 此处我们封禁 id = 1、4、8、9  的用户
@Test
void updateStateByIds() {
    List<Integer> ids = new ArrayList<>();
    ids.add(1);
    ids.add(4);
    ids.add(8);
    ids.add(9);
    int result = userMapper.updateStateByIds(ids);
    System.out.println("updateById 方法 :" + (result > 1 ? "修改成功" : "修改失败"));
}

执行测试方法

原文地址:https://blog.csdn.net/weixin_63888301/article/details/134654661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27974.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注