MyBatis基础教程


目前后端与数据库交互的框架技术繁多,但主流上使用的依然是 MyBatis ,通过 xml 配置将业务中的 SQL 语句剥离出来,从而降低模块间的耦合性和代码的可读性。只要你熟悉 JavaSQL,那么 MyBatis 无疑是当下相对较优的解决方案。

在开发中经常业务相对较为复杂的需求,其中往往就是要涉及到多表联结,此时 MyBatis 的优势就更为明显。将复杂的 SQL 语句从代码中抽离出来,实现高可读、易维护等特点。

本文简单介绍 MyBatis 文件配置和基本 SQL 命令编写。

一、文件配置

1. 基本信息

通过 mapper 标签的 namespace 实现与 Java 类的映射关联。

<?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">
            
<!-- namespace:mapper类完整路径 -->
<mapper namespace="com.budailad.mapper.UserMapper">

    <!-- 结果映射 -->
    <!-- id:唯一识别名称 -->
    <!-- type:实体类完整路径 -->
    <resultMap id="userResult" type="com.budailad.entity.User">
        <id property="id" column="id" />
        <result property="personName" column="person_name"/>
        <result property="tel" column="tel"/>
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id,
        person_name,
        tel
    </sql>
</mapper>

二、基本操作

1. 数据查询

通过 select 标签实现查询功能。

<select id="get" resultMap="userResult" parameterType="String">
    select * from tb_user
    where id = #{ id }
</select>

2. 数据新增

通过 insert 标签实现数据插入操作。

<insert id="add" parameterType="com.budailad.entity.User">
    insert into tb_user
    <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="id != null">
            id,
        </if>
        <if test="personName != null">
            person_name,
        </if>
        <if test="tel != null">
            tel,
        </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
        <if test="id != null">
            #{ id },
        </if>
        <if test="personName != null">
            #{ personName },
        </if>
        <if test="tel != null">
            #{ tel },
        </if>
    </trim>
</insert>

3. 数据更新

通过 update 标签实现数据更新操作。

<update id="update" parameterType="com.budailad.entity.User">
    update tb_user
    <set>
        <if test="personName != null">
            person_name = #{ personName },
        </if>
        <if test="tel != null">
            tel = #{ tel },
        </if>
    </set>
    where id = #{ id }
</update>

4. 数据删除

通过 delete 标签实现数据删除操作。

<delete id="delete">
    delete from tb_user 
    where id = #{ id }
</delete>

三、批量操作

1. 批量新增

使用拼接 SQL 语句的方法实现,传入参数为列表:List<User> list

<insert id="insertBatch" parameterType="java.util.List">
    INSERT INTO tb_user (
    <include refid="Base_Column_List"/>
    ) VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        <trim prefix="(" suffix=")" suffixOverrides=",">
            #{item.id}, #{item.personName}, #{item.tel}, 
        </trim>
    </foreach>
</insert>

2. 批量更新

(1) 方式一
<update id="updateBatch" parameterType="java.util.List" >
    <foreach collection="list" item="item" open="" close="" separator=";">
        update tb_user
        <set>
            <if test="item.personName != null" >
                person_name = #{item.personName,jdbcType=VARCHAR},
            </if>
            <if test="item.tel != null" >
                tel = #{item.tel,jdbcType=VARCHAR},
            </if>
        </set>
        where id = #{item.id,jdbcType=BIGINT}
    </foreach>
</update>
(2) 方式二
<update id="updateBatch"  parameterType="java.util.List">
    update tb_user
    <trim prefix="set" suffixOverrides=",">
        <trim prefix="person_name =case" suffix="end,">
            <foreach collection="list" item="i" index="index">
            <if test="i.personName!=null">
                when id=#{i.id} 
                then #{i.personName}
            </if>
            </foreach>
        </trim>
        <trim prefix="tel =case" suffix="end,">
            <foreach collection="list" item="i" index="index">
            <if test="i.tel!=null">
                when id=#{i.id} 
                then #{i.tel}
            </if>
            </foreach>
        </trim>
    </trim>
    where
    <foreach collection="list" separator="or" item="i" index="index">
        id=#{i.id}
    </foreach>
</update>

3. 批量删除

通过 foreach 标签拼接查询条件进行删除。

<delete id="deleteBatch">
    delete from tb_user where id in
    <foreach item="id" collection="array" open="(" separator="," close=")">
        #{ids}
    </foreach>
</delete>

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录