• MyBatis 后端对数据库进行操作


    目录

    1.MyBatis 是什么?

    2. MyBatis 的重要性

    3. MyBatis 查询

    3.1 创建数据库和表

    3.2 添加MyBatis框架⽀持

    3.2.1 新项目添加MyBatis

     3.2.1 老项⽬添加 MyBatis

     3.3 配置连接字符串和MyBatis

    3.3.1 配置连接字符串

    3.3.2 配置mybatis 中的 xml 保存路径

    3.4 添加后端代码

    目录结构:

     3.4.1 添加实体类

    3.4.2 添加 mapper 接口

     3.4.3 添加UserMapper.xml

     3.4.4 添加Service 

    3.4.5 添加 Controller

    4.增删改操作

    4.1 修改用户操作

    4.2 删除用户操作

    4.3 增加用户操作

     4.4 增加用户并有自增ID

    5. 参数占位符 #{} 和 ${} 

     5.1 desc 降序排序

     5.2 登录(SQL注入)

    5.3 like 查询

    6.多表查询

    6.1 返回类型:resultType

    6.2 返回字典映射:resultMap

     6.3 一对一表查询

     6.4 一对多

    7.动态SQL使用

    7.1 标签

     7.2 标签

     7.3 标签

    7.4 标签

    7.5  标签


    1.MyBatis 是什么?

    MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了很多JDBC 代码以及设置的参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO (Plain Old Java Object。普通老式 Java对象)为数据库中的记录。

    2. MyBatis 的重要性

    对于后端开发来说,程序是由两个重要部分组成的:
    1.后端程序
    2.数据库
    ⽽这两个重要的组成部分要通讯,就要依靠数据库连接⼯具
    1.JDBC
    2. MyBatis

     JDBC 的操作流程:

    1. 创建数据库连接池 DataSource
    2. 通过 DataSource 获取数据库连接 Connection
    3. 编写要执⾏带 ? 占位符的 SQL 语句
    4. 通过 Connection 及 SQL 创建操作命令对象 Statement
    5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
    6. 使⽤ Statement 执⾏ SQL 语句
    7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
    8. 处理结果集
    9. 释放资源 
    对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写。
    对于 MyBatis ,它可以帮助我们更⽅便、更快速的操作数据库。

    3. MyBatis 查询

    框架交互流程

    MyBatis 也是⼀个 ORM 框架, ORM(Object Relational Mapping),即对象关系映射。在⾯向对
    象编程语⾔中,将关系型数据库中的数据与对象建⽴起映射关系,进⽽⾃动的完成数据与对象的互相转换:
    1. 将输⼊数据(即传⼊对象)+SQL 映射成原⽣ SQL
    2. 将结果集映射为返回对象,即输出对象ORM 把数据库映射为对象:
            数据库表(table)--> 类(class)
            记录(record,⾏数据)--> 对象(object)
            字段(field) --> 对象的属性(attribute)

     ⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类。 也就是说使⽤ MyBatis 可以像操作对象⼀样来操作数据库中的表,可以实现对象和数据库表之间的转换。

    3.1 创建数据库和表

    使⽤ MyBatis 的⽅式来读取⽤户表中的所有⽤户

    创建用户表

    1. drop table if exists userinfo;
    2. create table userinfo(
    3. id int primary key auto_increment,
    4. username varchar(100) not null,
    5. password varchar(32) not null,
    6. photo varchar(500) default '',
    7. createtime datetime default now(),
    8. updatetime datetime default now(),
    9. `state` int default 1
    10. ) default charset 'utf8mb4';

    3.2 添加MyBatis框架⽀持

    3.2.1 新项目添加MyBatis

    在创建新项目时,来到这一步,只需将下面的勾选即可

     3.2.1 老项⽬添加 MyBatis

    在 pom.xml 文件页面 鼠标右键进行下面操作

     

     3.3 配置连接字符串和MyBatis

    3.3.1 配置连接字符串

    将当前运行环境选择开发环境的配置

    application-dev.yml

    1. #开发环境
    2. #配置数据库连接
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://127.0.0.1:3306/myblog?characterEncoding=utf8
    6. username: root
    7. password: 123456
    8. driver-class-name: com.mysql.cj.jdbc.Driver
    9. # 开启 MyBatis SQL 打印
    10. logging:
    11. level:
    12. com:
    13. example:
    14. demo: debug
    15. mybatis:
    16. configuration:
    17. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    application.yml

    选择开发环境

    1. spring:
    2. profiles:
    3. active: dev

    3.3.2 配置mybatis 中的 xml 保存路径

    MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置在 application.yml  中
    1. #配置mybatis xml 保存路径
    2. mybatis:
    3. mapper-locations: classpsth:mybatis/**Mapper.xml

    3.4 添加后端代码

    下⾯按照后端开发的⼯程思路,也就是下⾯的流程来实现 MyBatis 查询所有⽤户的功能

    目录结构:

     3.4.1 添加实体类

    先添加用户实体类

    1. /**
    2. * 普通用户实体类
    3. */
    4. @Data
    5. public class UserInfo {
    6. private Integer id;
    7. private String name;
    8. private String password;
    9. private String photo;
    10. private String createtime;
    11. private String updatetime;
    12. private int state;
    13. }

    3.4.2 添加 mapper 接口

    数据持久层的接口定义:

    1. /**
    2. * 实现数据库映射
    3. */
    4. @Mapper
    5. public interface UserMapper {
    6. //查询用户 ID
    7. public UserInfo getUserById(@Param("id") Integer id);
    8. }

     3.4.3 添加UserMapper.xml

    数据持久层的实现,mybatis 的固定 xml 格式

    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.example.demo.mapper.UserMapper">
    4. mapper>
    UserMapper.xml 查询所有⽤户的具体实现 SQL:
    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.example.demo.mapper.UserMapper">
    4. <resultMap id="BaseMap" type="com.example.demo.model.UserInfo">
    5. <id column="id" property="id">id>
    6. <result column="username" property="name">result>
    7. resultMap>
    8. <select id="getUserById" resultMap="BaseMap">
    9. select * from userinfo where id=${id}
    10. select>
    11. mapper>

    标签说明:

    标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接⼝的全限定
    名,包括全包名.类名。