Mybatis之CRUD(一)

知识储备:
mysql
JDBC
JAVA
Maven
总结:
实操线索:
1安装 —2新建项目----3mysql 建库----4maven 导依赖-----5创建子模块—6-配置----7编写工具类—8-实体类----9创建dao接口—10-编写配置文件----测试

一 前言
大家之前都有学习过 JDBC,通过 JDBC 来操作数据库,需要以下几个步骤:

  1. 加载数据库驱动
    Class.forName();
    2创 建并获取数据库链接
    Connection conn=DriverManager.getConnection();
    3创建 jdbc statement 对象
    StateMent stat=
    conn.createprepareStatement():
    4编写 sql 语句
    String sql=“select name from test”;
    5设置 sql 语句中的参数(使用 preparedStatement)

通过 statement 执行 sql 并获取结果
ResultSet rs=
stat.exequery():
6对 sql 执行结果进行解析处理
释放资源(resultSet、preparedstatement、connection)
String name=rs.getString();
rs.close():
stat.close():
conn.close();

我们写程序本质上都是 CRUD,如果按照这种方式来写,我们会写的很难受。而且在系统层面也有着一定资源浪费。
二 Mybatis 简介(附 官网https://mybatis.org/mybatis-3/zh/getting-started.html)
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar 文件+配置几个 sql 映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis 不会对应用程序或者数据库的现有设计强加任何影响。sql 写在 xml 里,便于统一管理和优化。通过 sql 语句可以满足操作数据库的所有需求。
解除 sql 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql 和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的 orm 字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供 xml 标签,支持编写动态 sql。
三 实操
Mybatis之CRUD(一)
1 新建maven 项目

Mybatis之CRUD(一)
Mybatis之CRUD(一)
Mybatis之CRUD(一)
2 创建mysql 并插入数据
CREATE DATABASE mybatis;
use mybatis;

CREATE TABLE user(
id INT(20) not null PRIMARY KEY,
name VARCHAR(30) DEFAULT NULL,
pwd VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO user (id,name,pwd) VALUES
(1,‘kuls1’,‘111111’),
(2,‘kuls2’,‘222222’),
(3,‘kuls3’,‘333333’);

3 导入maven 依赖

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

com.kuls
mybatisdemo
pom
1.0-SNAPSHOT

mysql mysql-connector-java 8.0.17 org.mybatis mybatis 3.5.2 junit junit 4.12 src/main/java **/*.properties **/*.xml true src/main/resources **/*.properties **/*.xml true 4 创建子模块 ![在这里插入图片描述](https://img-blog.****img.cn/20200331185949259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjE0NDk4,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.****img.cn/20200331190000393.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjE0NDk4,size_16,color_FFFFFF,t_70) 5 配置mybatis 核心配置文件 ![在这里插入图片描述](https://img-blog.****img.cn/20200331190048787.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjE0NDk4,size_16,color_FFFFFF,t_70) 我们可以看官网中说到有一个 XML 配置文件,包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器 (TransactionManager)。 ![在这里插入图片描述](https://img-blog.****img.cn/2020033119011127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjE0NDk4,size_16,color_FFFFFF,t_70)

我们创建 mybatis-config.xml,根据官网的模板编写核心配置文件:

<?xml version="1.0" encoding="UTF-8" ?> 6 编写 Mybatis 工具类 ![在这里插入图片描述](https://img-blog.****img.cn/20200331190215416.png) **我们继续来看官方文档,每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。** 上面的话是官方的原话,我们结合代码来分析一下这段话 String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 首先,通过 Mybatis 中的一个工具类Resources的 getResourceAsStream 方法从类路径或其它位置加载资源文件,这里的资源文件就是我们上面所配置的核心配置文件,然后通过SqlSessionFactoryBuilder(相当于一个创造器)创建一个sqlSessionFactory(sqlSession 的工厂,不懂工厂的朋友可以去了解一下工厂设计模式),所谓工厂,就是能够不断地产生产品,这里的产品就是sqlSession。

我们可以通过 SqlSessionFactory 的openSession方法获取sqlSession对象。

我们再 com.kuls 下创建一个包 utils 来存放我们的工具类:
Mybatis之CRUD(一)
package com.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**

  • @author kuls
  • @Desc 公众号:JAVAandPython君
  • @date 2020/3/17 11:49 上午
    */
    public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {

try {
//固定代码,使用mybatis获取sqlSessionFactory对象
String resource = “mybatis-config.xml”;
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}

}

// 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
// org.apache.ibatis.session.SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。

public static SqlSession getSqlSession(){

//获取SqlSession对象
return sqlSessionFactory.openSession(true);
}

}
通过这个工具类可以帮我们随时拿到sqlSession,在SqlSession中提供了在数据库执行 SQL 命令所需的所有方法。
7.编写实体类
com.kuls.pojo 中创建 User.java

package com.kuls.pojo;

/**

  • @author kuls

  • @Desc 公众号:JAVAandPython君

  • @date 2020/3/17 11:59 上午
    */
    public class User {
    private int id;
    private String name;
    private String pwd;

    public User() {
    }

    public User(int id, String name, String pwd) {
    this.id = id;
    this.name = name;
    this.pwd = pwd;
    }

…省略了get和set方法以及toString方法,大家自己生成

8.创建Dao接口并绑定
创建UserMapper.java(在原来的写法中,dao包为UserDao的方法来命名,但是在Mybatis更加习惯Mapper的命名方式)

public interface UserDao {
//获取所有用户
List getUserList();
}
创建完接口后,我们需要在mybatis-config.xml中进行接口的绑定:
Mybatis之CRUD(一)



9.编写Mapper配置文件
Mybatis之CRUD(一)
这里就是Mybatis中改动比较大的部分,在以往的Dao接口,我们通常都是需要创建一个实现类来进行数据的操作,但是Mybatis中是以配置文件的形式来进行的。
Mybatis之CRUD(一)
我们再图中位置创建一个UserMapper.xml文件,记住,这里的名称要与Dao层文件的名称相同。

<?xml version="1.0" encoding="UTF-8" ?> select * from mybatis.user 上面就是UserMapper.xml文件的内容,这里有几点需要说明:

namespace的路径需要绑定到对应的接口
select标签代表的就是查询语句
select中的id需要和接口中的方法名称相同!!!
resultType代表着返回结果类型,我们要获取所有的User,所以此处为pojo包中的User类。
select标签中,填写我们相应的语句。
这里大家没有特别理解也没多大关系,我们现在得首要目的就是让它跑起来!
10.创建测试类进行测试
Mybatis之CRUD(一)
package com.kuls.dao;

import com.kuls.pojo.User;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
//通过工具类拿到sqlsession
SqlSession sqlSession = MybatisUtils.getSqlSession();
//通过sqlSession拿到相应的mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//通过mapper调用mapper中的方法
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}

}
Mybatis之CRUD(一)