MyBatis学习笔记

MyBatis中文网:https://mybatis.net.cn/

1 什么是 MyBatis?

MyBatis 是一款优秀的持久层框架 ,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

持久层:指的是就是数据访问层(dao),是用来操作数据库的。

2 Mybatis基础操作

根据主键 ID 删除数据

sql 复制代码
//使用#{key}方式获取方法中的参数值
@Delete("delete from emp where id = #{id}")
public void delete(Integer id);

新增(可主键返回)

sql 复制代码
@Options(useGeneratedKeys = true,keyProperty = "id")	// 会自动将生成的主键值,赋值给emp对象的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})")
public void insert(Emp emp);

更新

sql 复制代码
@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}")
public void update(Emp emp);

查询

sql 复制代码
@Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp where id=#{id}")
public Emp getById(Integer id);

3 Mybatis的XML配置文件

Mybatis的开发有两种方式,分别是注解和XML

3.1 XML配置文件规范

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

XML配置文件:

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.wuyh.mapper.EmpMapper">
    <select id="list2" resultType="com.wuyh.pojo.Emp">
        select * from mybatis.emp where name like concat('%', #{name}, '%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc
    </select>
</mapper>

使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

4 Mybatis动态SQL

动态SQL:SQL语句会随着用户的输入或外部条件的变化而变化。

<if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

xml 复制代码
<if test="条件表达式">
   要拼接的sql语句
</if>

<where>:where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR

<set>:动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)

<foreach>:为批量处理数据提供循环遍历操作。

xml 复制代码
<foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" open="遍历开始前拼接的片段" close="遍历结束后拼接的片段">
</foreach>

<sql>:定义可重用的SQL片段。
<include>:通过属性refid,指定包含的SQL片段。

通过<sql>标签封装到一个SQL片段,然后再通过<include>标签进行引用。两者配合使用

作用:对重复的SQL代码片段进行封装,减少冗余。

相关推荐
腾讯云数据库几秒前
「腾讯云NoSQL」技术之向量数据库篇:腾讯云向量数据库如何实现召回不变,成本减半?
数据库·nosql·腾讯云·向量数据库·腾讯云nosql
yaso_zhang7 分钟前
jetson开机之前自启脚本sudo ifconfig 如何不需要输入密码
数据库·postgresql
aoxiang_ywj13 分钟前
SQLite 速成学习
数据库·sqlite
普普通通的南瓜17 分钟前
网站提示 “不安全”?免费 SSL 证书一键解决
网络·数据库·网络协议·算法·安全·iphone·ssl
张3蜂19 分钟前
import org.junit.Test; 是什么
数据库·junit
不惑_19 分钟前
[特殊字符] 在 macOS 上设置 SQLite
数据库·macos·sqlite
不惑_20 分钟前
[特殊字符] 在 Windows 上设置 SQLite
数据库·windows·sqlite
上线就吃代码25 分钟前
【等保测评】数据库数据库配置have_ssl参数为yes
服务器·数据库·ssl
谅望者25 分钟前
数据分析笔记04:抽样方法与抽样分布
数据库·笔记·数据挖掘·数据分析
q***99441 分钟前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot