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代码片段进行封装,减少冗余。

相关推荐
好奇的菜鸟12 分钟前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°13 分钟前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
巴伦是只猫32 分钟前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
DuelCode1 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
好好研究1 小时前
学习栈和队列的插入和删除操作
数据结构·学习
幽络源小助理1 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
Hello.Reader2 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
新中地GIS开发老师2 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学
简佐义的博客3 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法3 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡