mybatis——sql语句


使mybatis开发更加整洁

匹配返回的数据名

  • 在mapper映射文件中进行配置
<!--描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。-->
<!--
	resultMap
	id 在命名空间中唯一的标识符
	type 结果集映射的javabean 或者 泛型为该类型的集合
-->
<resultMap id="PersonMap" type="com.lihaozhe.pojo.Person">
    <!--
		id 主键映射
		result 非主键映射
		property javabean 中的 filed
		column datatable 中的 filed
    -->
    <id property="id" column="id"/>
    <result property="id" column="id"/>
    <result property="uuid" column="uuid"/>
    <result property="mobile" column="mobile"/>
    <result property="nickname" column="nickname"/>
    <result property="idCard" column="id_card"/>
</resultMap>
.....
<select id="selectAll4m" resultMap="PersonMap">
    SELECT *
    FROM `person`
</select>

在控制台显示mybatis信息

  • 在核心配置文件中进行配置
<settings>
    <!-- log日志 -->
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

化简类的完全限定名

  • 在核心配置文件中进行配置
<typeAliases>
    <!--
		别名
		type	类的完全限定名
        alias	别名
	-->
    <!--为某个类指定别名-->
    <!--<typeAlias alias="person" type="com.lihaozhe.pojo.Person"/>-->
    <!--为某个包下的所有类指定别名 别名默认为类的首字母小写之后的字符串-->
    <package name="com.lihaozhe.pojo"/>
</typeAliases>

编写mybatis工具类

public class SessionUtils {
   
    private SqlSession sqlSession;
    
    public static void openSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }
}

查询数据

查询数据

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PersonMapper {
   /**
     * 根据不确定的字段查询
     * @param column
     * @param value
     * @return
     */
    Person selectByFiled(@Param("column") String column,@Param("value")String value);
}


  • 映射文件
<?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.lihaozhe.mapper.PersonMapper">

	<!--根据不确定的字段查询-->
    <select id="selectByFiled" resultType="com.lihaozhe.pojo.Person">
        SELECT *
        FROM `person`
        WHERE ${column} = #{value}
    </select>
</mapper>
  • 测试程序
@Test
public void selectByFiled() {
    // 获取该接口的代理对象
    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
    // 执行接口中的方法
    Person person = mapper.selectByFiled("mobile", "18400880850");
    // 释放SqlSession资源
    sqlSession.close();
    // 输出查询结果
    System.out.println(person);
}

复数查询数据

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 李昊哲
 * @version 1.0.0 2022/7/7 下午1:47
 */
public interface PersonMapper {

    /**
     * 查找多个id的用户列表
     *
     * @param ids
     * @return
     */
    List<Person> selectByIds(@Param("ids") Long... ids);

}


  • 映射文件
<?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.lihaozhe.mapper.PersonMapper">
	 <!--定义SQL片段-->
    <sql id="select_person">
        SELECT *
        FROM `person`
    </sql>
    <!--查找多个id的用户列表-->
    <select id="selectByIds" resultType="person">
        <include refid="select_person"></include>
        <where>
            `id` IN
            <foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
                #{id}
            </foreach>
        </where>
    </select>
</mapper>

  • 测试程序
package com.lihaozhe.mapper;

import cn.binarywang.tools.generator.ChineseIDCardNumberGenerator;
import cn.binarywang.tools.generator.ChineseMobileNumberGenerator;
import cn.binarywang.tools.generator.ChineseNameGenerator;
import cn.hutool.core.util.IdUtil;
import com.lihaozhe.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 李昊哲
 * @version 1.0.0 2022/7/7 下午1:51
 */
public class PersonMapperTest {
    private SqlSession sqlSession;

    // JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
    // 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
    // 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
    // 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
    @BeforeEach
    public void openSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void selectByIds() {
        // 获取该接口的代理对象
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        // 执行接口中的方法
        List<Person> personList = mapper.selectByIds(1L, 3L, 5L);
        // 释放SqlSession资源
        sqlSession.close();
        // 输出查询结果
        personList.forEach(System.out::println);
    }
}


模糊查询数据

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PersonMapper {

    /**
     * 模糊查找某姓名中包含某个字的用户
     *
     * @param nickname
     * @return
     */
    List<Person> selectByNickname(@Param("nickname") String nickname);
}
  • 映射文件
<!--定义SQL片段-->
<sql id="select_person">
    SELECT *
    FROM `person`
</sql>

<!--模糊查找某姓名中包含某个字的用户-->
<select id="selectByNickname" resultType="person">
    <!--模糊查找某姓名中包含某个字的用户-->
    <select id="selectByNickname" resultType="person">
        <bind name="like_nickname" value="'%' + nickname + '%'"/>
        <include refid="select_person"></include>
        WHERE `nickname` like #{like_nickname}
    </select>
</select>

  • 测试程序
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;


public class PersonMapperTest {
    private SqlSession sqlSession;

    // JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
    // 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
    // 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
    // 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
    @BeforeEach
    public void getSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void selectByNickname() {
        // 获取接口代理对象
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        // 准备数据集
        String nickname = "孙";
        // %孙%
        StringBuilder param = new StringBuilder();
        param.append("%");
        if (!StringUtils.isEmpty(nickname)) {
            param.append(nickname);
        }
        param.append("%");
        // 执行代理对象中的方法
        List<Person> personList = mapper.selectByNickname(param.toString());
        // 释放资源
        sqlSession.close();
        // 输出结果
        personList.forEach(System.out::println);
    }
}


增加或减少限制(不为0)

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;


public interface PersonMapper {
    
    /**
     * 模糊查找某姓名中包含某个字的男性或女性用户
     *
     * @param nickname
     * @return
     */
    List<Person> selectByGenderAndNickname(@Param("gender") Integer gender, @Param("nickname") String nickname);
}
  • 映射文件
<?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.lihaozhe.mapper.PersonMapper">
    <!--定义SQL片段-->
    <sql id="select_person">
        SELECT *
        FROM `person`
    </sql>
    <!--模糊查找某姓名中包含某个字的男性或女性用户-->
    <select id="selectByGenderAndNickname" resultType="person">
        <include refid="select_person"></include>
        WHERE
        <if test="gender != null">
             <!--如果身份证号码的第17位数字除以2余数为1,则为男性,否则为女性-->
            if(mod(substr(id_card, 17, 1), 2), 1, 0) = #{gender}
        </if>
        <if test="nickname != null and nickname.length &gt; 0">
            <bind name="like_nickname" value="'%' + nickname + '%'"/>
            AND `nickname` like #{like_nickname}
        </if>
    </select>
</mapper>

  • 测试程序
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

/**
 * @author 李昊哲
 * @version 1.0.0 2022/7/7 下午1:51
 */
public class PersonMapperTest {
    private SqlSession sqlSession;

    // JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
    // 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
    // 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
    // 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
    @BeforeEach
    public void oepnSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void selectByGenderAndNickname() {
        // 获取接口代理对象
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        // 执行代理对象中的方法
        // List<Person> personList = mapper.selectByGenderAndNickname(0,null);
           List<Person> personList = mapper.selectByGenderAndNickname(1,"孙");
        // 释放资源
        sqlSession.close();
        // 输出结果
        personList.forEach(System.out::println);
    }
}


增加或减少限制(chooose-when用法)

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;


public interface PersonMapper {

    /**
     * `id`, `uuid`, `mobile` 多个查询条件选择其中一个
     * @param person
     * @return
     */
    Person selectByIdOrUuidOrMobile(@Param("person") Person person);
}


  • 映射文件
<!--定义SQL片段-->
<sql id="select_person">
    SELECT *
    FROM `person`
</sql>
<!--`id`, `uuid`, `mobile` 多个查询条件选择其中一个-->
<select id="selectByIdOrUuidOrMobile" resultType="person">
    <include refid="select_person"></include>
    <where>
        <choose>
            <when test="person.id != null and person.id > 0">
                `id` = #{person.id}
            </when>
            <when test="person.uuid != null and person.uuid.length > 0">
                `uuid` = #{person.uuid}
            </when>
            <otherwise>
                `mobile` = #{person.mobile}
            </otherwise>
        </choose>
    </where>
</select>

  • 测试程序
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

/**
 * @author 李昊哲
 * @version 1.0.0 2022/7/7 下午1:51
 */
public class PersonMapperTest {
    private SqlSession sqlSession;

    // JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
    // 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
    // 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
    // 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
    @BeforeEach
    public void openSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void selectByIdOrUuidOrMobile() {
        // 获取该接口的代理对象
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        // 准备数据
        Person person = new Person();
        // SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card` FROM `person` WHERE `mobile` = ?
        person.setMobile("13352587230");

        // SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card` FROM `person` WHERE `uuid` = ?
		person.setUuid("2032a25e5245454894e192d8d5b17147");

        // SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card` FROM `person` WHERE `id` = ?
        person.setId(33);

        // 执行接口中的方法
        person = mapper.selectByIdOrUuidOrMobile(person);
        // SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card` FROM `person` WHERE `nickname` LIKE ?
        // 释放SqlSession资源
        sqlSession.close();
        // 输出查询结果
        System.out.println(person);
    }
}


增加或减少限制(可为0)

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmpMapper {
    /**
     * 动态SQL if 按照部门ID和姓名中部分关键字查找
     * 如果没有传递部门ID则在所有部门中查找
     * 如果传递部门ID但没有传递姓名中的关键字则查找该部门下所有员工列表
     * 如果部门ID和姓名中的关键字都没有传递则查找所有员工列表
     *
     * @param emp
     * @return
     */
    List<Emp> selcetByDidAndEname(@Param("emp") Emp emp);
}


  • 映射文件
<?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.lihaozhe.mapper.EmpMapper">
    <!--
        动态SQL if 按照部门ID和姓名中部分关键字查找
        如果没有传递部门ID则在所有部门中查找
        如果传递部门ID但没有传递姓名中的关键字则查找该部门下所有员工列表
        如果部门ID和姓名中的关键字都没有传递则查找所有员工列表
    -->
    <select id="selectByDidAndEname" resultType="emp">
        SELECT * FROM `emp`
        <trim prefix="where" prefixOverrides="AND|OR">
            <if test="emp.did != null and emp.did &gt; 0">
                `did` = #{emp.did}
            </if>
            <if test="emp.ename != null and emp.ename.length &gt; 0">
                <bind name="like_ename" value="'%' + emp.ename + '%'"/>
                AND `ename` like #{like_ename}
            </if>
        </trim>
    </select>
</mapper>
  • 测试程序
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Emp;
import com.lihaozhe.util.mybatis.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;

import java.util.List;

public class EmpMapperTest {
    @Test
    public void selcetByDidAndEname(){
        // 使用工具类获取 SqlSession 对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        // 获取接口代理对象
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        // 准备数据
        Emp emp = new Emp();
        // SELECT `eid`, `ename`, `did` FROM `emp` WHERE `ename` Like ?
        emp.setEname("孙");

        // SELECT `eid`, `ename`, `did` FROM `emp`
        // emp.setEname("");

        // SELECT `eid`, `ename`, `did` FROM `emp` WHERE `did` = ?
        emp.setDid(3);
        // SELECT `eid`, `ename`, `did` FROM `emp` WHERE `did` = ? AND `ename` Like ?
        // 执行 接口 中的方法
        List<Emp> emps = mapper.selcetByDidAndEname(emp);
        // 使用工具类 释放资源
        MyBatisUtil.close();
        // 输出结果
        emps.forEach(System.out::println);
    }
}


多表对一bean查询数据

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.vo.SonVo;
import org.apache.ibatis.annotations.Param;


public interface SonMapper {
    /**
     * 根据儿子ID查询儿子和该儿子父亲的信息
     *
     * @param sid
     * @return
     */
    SonVo selectSonVoBySid(@Param("sid") long sid);
}


  • 映射文件
<?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.lihaozhe.mapper.SonMapper">
    <!--根据儿子ID查询儿子和该儿子父亲的信息-->
    <resultMap id="SonVoMap" type="sonVo">
        <id property="sId" column="s_id"/>
        <result property="sName" column="s_name"/>
        <result property="fId" column="fid"/>
        <association property="father">
            <id property="fId" column="fid"/>
            <result property="fName" column="f_name"/>
        </association>
    </resultMap>
    <select id="selectSonVoBySid" resultMap="SonVoMap">
        SELECT s_id, s_name, s.f_id AS fid, f_name
        FROM son s
                 INNER JOIN father f ON s.f_id = f.f_id AND s_id = #{sid}
    </select>
</mapper>
  • 测试程序
package com.lihaozhe.mapper;

import com.lihaozhe.util.mybatis.MyBatisUtil;
import com.lihaozhe.vo.SonVo;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;


public class SonMapperTest {
    @Test
    public void selectSonVoBySid() {
        SqlSession sqlSession = MyBatisUtil.openSqlSession();
        SonMapper mapper = sqlSession.getMapper(SonMapper.class);
        SonVo sonVo = mapper.selectSonVoBySid(3L);
        MyBatisUtil.close();
        System.out.println(sonVo);
    }
}


添加或更新数据

修改数据(有数据对自身的限制)

  • 接口
package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;
import org.apache.ibatis.annotations.Param;

import java.util.List;


public interface PersonMapper {
    
    /**
     * 修改员工表数据
     *
     * @param person
     * @return
     */
    int updateById(@Param("person") Person person);
}


  • 映射文件
<?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.lihaozhe.mapper.PersonMapper">
    <!--修改员工表数据-->
    <update id="updateById" parameterType="person">
        UPDATE `person`
        <set>
            <if test="person.nickname != null and person.nickname.length &gt; 0">
                `nickname` = #{person.nickname},
            </if>
            <if test="person.mobile != null and person.mobile.length == 11">
                `mobile` = #{person.mobile},
            </if>
            <if test="person.idCard != null and (person.idCard.length == 18 or person.idCard.length == 15)">
                `id_card` = #{person.idCard}
            </if>
        </set>
        WHERE `id` = #{person.id}
    </update>

</mapper>

  • 测试程序
package com.lihaozhe.mapper;

import cn.binarywang.tools.generator.ChineseIDCardNumberGenerator;
import cn.binarywang.tools.generator.ChineseMobileNumberGenerator;
import cn.binarywang.tools.generator.ChineseNameGenerator;
import cn.hutool.core.util.IdUtil;
import com.lihaozhe.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;


public class PersonMapperTest {
    private SqlSession sqlSession;

    // JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
    // 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
    // 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
    // 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
    @BeforeEach
    public void openSqlSession() throws IOException {
        // 核心配置文件classpath路径
        String resource = "mybatis/mybatis-config.xml";
        // 加载配置文件
        Reader reader = Resources.getResourceAsReader(resource);
        // 构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 从SqlSessionFactory对象中获取SqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void updateById() {
        // 获取该接口的代理对象
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        // 准备数据
        Person person = new Person();
        String mobile = ChineseMobileNumberGenerator.getInstance().generate();
        System.out.println(mobile);
        // UPDATE `person` SET `mobile` = ? WHERE `id` = ?
        person.setMobile(mobile);
        person.setId(3);

        // 执行接口中的方法
        mapper.updateById(person);
        // 事务提交
        sqlSession.commit();
        // 释放SqlSession资源
        sqlSession.close();
        // 输出结果
        if (status > 0) {
            System.out.println("☺");
        } else {
            System.out.println("o(╯□╰)o");
        }
    }

}


封装前置查询语句(SQL片段)

  • 映射文件
<?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.lihaozhe.mapper.PersonMapper">
    <!--定义SQL片段-->
    <sql id="select_person">
        SELECT *
        FROM `person`
    </sql>
    <!--根据用户ID查询该用户信息 使用SQL片段-->
    <select id="selectById" resultType="person">
        <include refid="select_person"></include>
        WHERE `id` = #{id}
    </select>
</mapper>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你关于MyBatis中if标签的使用方式。 在MyBatis中,if标签通常用于动态生成SQL语句。它可以用来判断某个字段是否为空,从而根据不同情况生成不同的SQL语句。 以下是一些使用if标签的示例: 1. 判断一个参数是否为null或空字符串: ``` <select id="selectUser" parameterType="java.lang.String" resultType="User"> SELECT * FROM users <where> <if test="username != null and username != ''"> AND username = #{username} </if> </where> </select> ``` 这个例子中,如果传入的username参数不为null或空字符串,则会将其加入到SQL语句中,生成类似于“AND username = 'xxx'”这样的条件语句。 2. 判断一个对象的某个属性是否为null: ``` <select id="selectUser" parameterType="User" resultType="User"> SELECT * FROM users <where> <if test="email != null"> AND email = #{email} </if> </where> </select> ``` 这个例子中,如果传入的User对象的email属性不为null,则会将其加入到SQL语句中,生成类似于“AND email = 'xxx'”这样的条件语句。 3. 判断一个集合是否为空: ``` <select id="selectUser" parameterType="java.util.Map" resultType="User"> SELECT * FROM users <where> <if test="ids != null and ids.size() > 0"> AND id IN <foreach item="id" collection="ids" open="(" separator="," close=")"> #{id} </foreach> </if> </where> </select> ``` 这个例子中,如果传入的Map对象中包含一个名为ids的集合属性且不为空,则会将其加入到SQL语句中,生成类似于“AND id IN (1,2,3)”这样的条件语句。 以上是一些if标签的使用示例,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值