【Spring集成MyBatis】MyBatis诞生及代码快速入门(非注解开发)

文章目录

  • 1. 原始Jdbc操作的弊端
  • 2. MyBatis解决方案
  • 3. MyBatis代码快速入门(以查询语句为例)
    • 文件结构
    • 第一步:添加MyBatis坐标
    • 第二步:创建user数据表
    • 第三步:编写User实体类
    • 第四步:编写映射文件UserMapper.xml
    • 第五步:编写核心文件SqlMapper.xml
    • 第六步:编写测试类
  • 4. MyBatis增删改
    • 插入操作
    • 修改操作
    • 删除操作
  • 5. 核心文件SqlMapper.xml中引用properties文件
  • 6. 使用typeAliases标签定义别名
  • 7. MyBatis相应API
    • SqlSession工厂构建器SqlSessionFactoryBuilder
    • SqlSession会话对象

1. 原始Jdbc操作的弊端

以下是原始的查询操作

//注册驱动
Class.forName("com,mysql.jdbcDriver");
//获得连接
Connection connection = Driverllanager.get(onnection( url: "jdbc:mysql:///test", user: "root", password: "123456");
//获得statement
statementPreparedStatement statement = connection.prepareStatement( sql: "select id,username,password from user");
//执行查询
ResultSet resultSet = statement .executeQuery();
//遍历结果集
while(resultSet.next()){
	//封装实体
	User user = new User();
	user.setId(resultSet.getInt( columnLabel: "id"));
	user.setUsername(resultSet .getString( columnLabel: "username"));
	user.setPassword(resultSet.getString( columnLabel: "password"));
	//user实体封装完毕
	System.out.printIn(user);
}
//释放资源
resultSet.close();
statement .close();
connection.close();

无论是原始的查询操作、插入操作、删除操作,都需要做重复的工作:

  • 注册驱动
  • 获得连接
  • 获得statement
  • 执行查询/插入/删除…
  • 释放资源

这种原始Jdbc操作的弊端是:

  1. 数据库创建连接、释放频繁造成系统资源浪费从而影响系统性能
  2. sql语句在代码中硬编码,造成代码不易维护,实际sql语句变化可能较大,sql变动需要修改java代码
  3. 查询操作时,需要手动将结果集的数据封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置

2. MyBatis解决方案

应对上述问题,MyBatis可以给出对应的解决方案:

  1. 使用数据库连接池初始化资源
  2. 将sql语句抽取到xml配置文件中
  3. 使用反射、内省等底层技术,自动将实体与表进行属性与字段的映射

3. MyBatis代码快速入门(以查询语句为例)

文件结构

【Spring集成MyBatis】MyBatis诞生及代码快速入门(非注解开发)_第1张图片

MyBatis开发步骤如下:

  1. 添加MyBatis坐标
  2. 创建user数据表
  3. 编写User实体类
  4. 编写映射文件UserMapper.xml
  5. 编写核心文件SqlMapper.xml
  6. 编写测试类

第一步:添加MyBatis坐标

添加MyBatis坐标

<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatisartifactId>
    <version>3.5.7version>
dependency>

添加SQL连接的坐标

 <dependency>
     <groupId>com.mysqlgroupId>
     <artifactId>mysql-connector-jartifactId>
     <version>8.0.33version>
 dependency>

第二步:创建user数据表

这里需要安装MySQL,选择性安装Navicat(可视化界面)。
只安装MySQL用一下建表语句创建就行,可视化界面创建相对而言比较方便一些。
这里用Navicat创建了user数据表:
【Spring集成MyBatis】MyBatis诞生及代码快速入门(非注解开发)_第2张图片

第三步:编写User实体类

com.example.demo.domain包里创建User类,通过Alt+Insert快速创建所有的Setter和Getter方法

package com.example.demo.domain;

public class User {
    int id;
    String username;
    String password;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

第四步:编写映射文件UserMapper.xml

这个映射文件里边写的是SQL语句
在Resource下建立UserMapper.xml,写入以下代码:
在写第一个标签mapper的时候注意要指定命名空间namespace。因为可能有很多个mapper文件,每个mapper文件中可能都有“findAll”方法,指定命名空间可以快速定义到某mapper文件下的某个方法:命名空间.方法id,与下面的语句id组成查询的标识
select表示选择语句,类似的还有insertupdate等等,id类似于SQL语句的名称,和上面的命名空间组成查询标识,resultType指定返回值,也就是让MyBatis把返回值封装到我们创建好的User类中,指定查询结果的实体类型,两个