目前后端与数据库交互的框架技术繁多,但主流上使用的依然是 MyBatis
,通过 xml
配置将业务中的 SQL
语句剥离出来,从而降低模块间的耦合性和代码的可读性。只要你熟悉 Java
和 SQL
,那么 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>