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 mapperPUBLIC "-//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时使用