MyBatis 简介
MyBatis 是一个优秀的持久层框架,它简化了传统的 DAO 层的 SQL 操作。MyBatis 通过 XML 或注解的方式将 SQL 语句与 Java 对象进行映射,极大地减少了代码量和开发难度。
MyBatis 的主要功能
1. 简化 SQL 操作:MyBatis 通过映射文件或注解的方式,将 SQL 语句与 Java 对象进行映射,简化了传统的 DAO 层的开发。2. 动态 SQL:MyBatis 支持动态 SQL,可以根据条件动态生成 SQL 语句,极大地提高了 SQL 的灵活性。3. 缓存机制:MyBatis 提供了一级缓存和二级缓存机制,提高了数据库访问的性能。4. 插件机制:MyBatis 提供了插件机制,可以在 SQL 执行的各个阶段进行拦截,进行自定义操作。
MyBatis 的使用方式
MyBatis 提供了两种主要的使用方式:注解方式和 XML 映射文件方式。
1. 注解方式
注解方式通过在接口方法上添加注解来实现 SQL 语句的映射。以下是一个示例:
import com.itheima.demoquickstart.pojo.Emp;
import org.apache.ibatis.annotations.*;
import java.time.LocalDate;
import java.util.List;
@Mapper
public interface EmpMapper {
@Delete("DELETE FROM emp WHERE id = #{id}")
void delete(Integer id);
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO emp (username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
"VALUES (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
void insert(Emp emp);
@Update("UPDATE emp SET username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} WHERE id=#{id}")
void update(Emp emp);
@Select("SELECT id, username, password, name, gender, image, job, entrydate, " +
"dept_id AS deptId, create_time AS createTime, update_time AS updateTime " +
"FROM emp " +
"WHERE id=#{id}")
Emp getById(Integer id);
List<Emp> list(@Param("name") String name,
@Param("gender") Short gender,
@Param("begin") LocalDate begin,
@Param("end") LocalDate end);
}
2. XML 映射文件方式
XML 映射文件方式通过在 XML 文件中定义 SQL 语句,并将其与接口方法进行映射。以下是一个示例:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.demoquickstart.mapper.EmpMapper">
<select id="list" resultType="com.itheima.demoquickstart.pojo.Emp">
SELECT * FROM emp
<where>
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
<if test="begin != null and end != null">
AND entrydate BETWEEN #{begin} AND #{end}
</if>
</where>
ORDER BY update_time DESC
</select>
<insert id="insert" parameterType="com.itheima.demoquickstart.pojo.Emp">
INSERT INTO emp (username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
VALUES (#{username}, #{password}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})
</insert>
<update id="update" parameterType="com.itheima.demoquickstart.pojo.Emp">
<script>
UPDATE emp
<set>
<if test="username != null">username = #{username},</if>
<if test="password != null">password = #{password},</if>
<if test="name != null">name = #{name},</if>
<if test="gender != null">gender = #{gender},</if>
<if test="image != null">image = #{image},</if>
<if test="job != null">job = #{job},</if>
<if test="entrydate != null">entrydate = #{entrydate},</if>
<if test="deptId != null">dept_id = #{deptId},</if>
update_time = #{updateTime}
</set>
WHERE id = #{id}
</script>
</update>
<select id="getById" resultType="com.itheima.demoquickstart.pojo.Emp">
SELECT id, username, password, name, gender, image, job, entrydate, dept_id AS deptId, create_time AS createTime, update_time AS updateTime
FROM emp
WHERE id = #{id}
</select>
</mapper>
动态 SQL
MyBatis 支持动态 SQL,可以根据条件动态生成 SQL 语句。动态 SQL 主要通过 <if>, <choose>, <when>, <otherwise>, <trim>, <where>, <set> 等标签来实现。
动态 SQL 示例
以下是一个动态 SQL 的示例:
SELECT * FROM emp
<where>
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
<if test="begin != null and end != null">
AND entrydate BETWEEN #{begin} AND #{end}
</if>
</where>
ORDER BY update_time DESC
</select>
总结
MyBatis 是一个强大的持久层框架,通过注解和 XML 映射文件的方式简化了 SQL 操作。它支持动态 SQL,可以根据条件动态生成 SQL 语句,极大地提高了 SQL 的灵活性。通过 MyBatis,可以更极大地提高了 SQL 的灵活性。通过 MyBatis,可以更高效地进行数据库操作,减少代码量,提高开发效率