MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1)创建的springboot工程中,在application.properties中配置MyBatis相关连接信息:
#配置数据库的连接信息
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url地址
spring.datasource.url=jdbc:mysql://地址
#连接数据库的用户名
spring.datasource.username=用户名
#连接的密码
spring.datasource.password=密码
2)创建mapper接口类:
/**
* 三层架构的数据处理层
*/
@Mapper // 表示程序在运行时,会自动生成该接口的实现类对象,将对象交给IOC容器管理
public interface EmpMapper {
/**
* 定义查询接口
* @return 所有查询的结果
*/
@Select("select * from tb_emp") // 表示该接口是查询接口
public List<User> insert();
/**
* 定义删除接口
* @param id 通过指定的ID删除,#{}最后会被?替代形成预编译sql,${}是拼接有sql注入的风险
*/
@Delete(value = "delete from tb_emp where id = #{id}")
public void delete(Integer id);
}
3)配置sql提示:
4)配置mybatis日志信息:
# 配置mybatis日志信息,输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
5.1、JDBC介绍
jdbc:就是使用java语言操作关系型数据库的一套API,他只是接口,实现由各个数据库厂商实现,各个厂商实现的又叫数据库的驱动,由于JDBC操作赋值,效率低下,就有mybatis框架进行封装简化开发,提高效率
5.2、数据库连接池
转换数据库连接池时,只需要引入对应的依赖
5.3、lombok
5.4、主键返回
在添加数据成功后,需要获取插入数据库数据的主键,需要在插入数据的方法前面添加@Options(keyProperty="id",useGeneratedKeys=true)进行标识
5.5、数据封装
-
实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装,
-
如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装
解决方法:
5.6、XML映射文件
配置xml映射文件的约束:mybatis官网入门有相关配置,不需要记忆
<?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>
</mapper>
使用IDEA中的mybatisx插件可以标识映射文件
5.7、动态sql
随着用户的输入或外部条件变化也变化的sql语句,称为动态sql
-
<if>:用于判断条件是否成立,使用text属性进行条件判断,如过条件为true,则拼接
-
<where>:where标签只会在子元素有内容的情况下插入where子句,而且还会自动去除子句开头的and或or
-
<set>:动态的在行首插入set关键字,并会删掉额外的逗号
<select id="接口名" resultType="com.springmybatis.pojo.User">
select *
from tb_emp
<where>
<if test="name != null">name like concat('%', #{name}, '%')</if>
<if test="gender != null">and gender = #{gender}</if>
<if test="start != null and end != null">and entryDate between #{start} and #{end}</if>
</where>
order by updateTime desc
</select>
<update id="接口名">
update tb_emp
<set>
<if test="userName != null ">userName=#{userName},</if>
<if test="name != null ">name=#{name},</if>
<if test="gender != null ">gender=#{gender},</if>
<if test="userName != null ">image=#{image},</if>
<if test="image != null ">job=#{job},</if>
<if test="entryDate != null ">entryDate=#{entryDate},</if>
<if test="deptId != null ">dept_id = #{deptId},</if>
<if test="updateTime != null ">updateTime=#{updateTime}</if>
where id = #{id}
</set>
</update>
-
<forearch>:配合删除多个的时候使用
-
<sql>和<include>:定义重复sql时使用