PCX的无铭小窝

MyBatis学习

环境:

  • JDK1.8
  • Mysql 5.7
  • maven 3.6.1
  • IDEA

回顾:

  • JDBC

  • Mysql

  • Java基础

  • Maven

  • Junit

SSM框架:配置文件的,最好方式 – 查看官方文档

1.简介

1.1 什么是Mybatis

image-20200528165440641

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

如何获得Mybatis?

  • maven仓库

    1
    2
    3
    4
    5
    6
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
    </dependency>

1.2持久化

数据持久化

  • 持久化就是将程序的数据在瞬时状态和持久状态转化的过程

  • 内存:断电即失

  • 数据库(JDBC), io文件持久化

  • 生活:冷藏,罐头(用的时候再拿)

为什么要持久化?
  • 有一些对象不能让他丢掉

  • 内存太贵了

1.3持久层

Dao层,Service层, Controller层….

  • 完成持久化工作的代码块

  • 层界限十分明显

1.4为什么需要Mybatis

  • 帮助程序员将数据存入到数据库中
  • 方便
  • 传统的JDBC代码太复杂,简化,框架,自动化
  • 不用Mybatis也可以,更容易上手。技术没有高低之分。
  • 优点
    • 简单易学
    • 灵活
    • sql和代码分离,提高可维护性
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持动态编写sql

最重要一点: 使用的人多!

学习路线:Mybatis > Spring > SpringMVC > SpringBoot

2.第一个Mybatis程序

思路:搭建环境–>导入Mybatis–>编写代码–>测试

2.1搭建环境

搭建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,'张三','123456'),
(2,'李四','456789'),
(3,'王五','123456')

新建项目

1.新建一个普通的Maven项目

2.删除src目录

3.导入maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--    导入依赖-->
<dependencies>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- mybatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

2.2创建一个模块

  • 编写mybatis的核心配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--configuration核心配置文件-->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
  • 编写mybatis工具类

IDEA自动补全返回值类型及变量快捷键 ctrl+alt+v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;

//sqlSessionFactory ---> sqlSession
public class MybatisUtils {

private static SqlSessionFactory sqlSessionFactory;

static {
try{
//使用Mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}

2.3编写代码

  • 实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//实体类

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;
}

public int getId() {
return id;
}

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

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}
}
  • Dao接口
1
2
3
public interface UserDao {
List<User> getUserList();
}
  • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件

    ps:不能出现 中文注解 不然会蜜汁报错!!!!!!!!!!!!

1
2
3
4
5
6
7
8
9
10
11
<?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">
<!--namespace绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.pcx.dao.UserDao">
<!-- 查询语句 -->
<select id="getUserList" resultType="com.pcx.pojo.User">
select * from mybatis.user
</select>
</mapper>

2.4 测试

image-20200530100809622

MapperRegistry是什么?

核心配置文件中注册mappers

  • junit测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.pcx.dao;

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

import java.util.List;

public class UserDaoTest {

@Test
public void test(){

//第一步:获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//第二步: 方式一: getMapper -> 执行SQL
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();

for(User user : userList){
System.out.println(user);
}

//关闭SqlSession
sqlSession.close();
}
}

可能会遇到问题:

  1. 配置文件没有注册
  2. 绑定接口错误
  3. 方法名不对
  4. 返回类型不对

3.CRUD

1.namespace

namespace中的包名要和Dao/mapper接口保持一致

2.select

选择,查询语句;

  • id:就是对应的namespace中的方法名;
  • resultType: Sql语句执行的返回值

1.编写接口

2.编写对应mapper中的sql语句

3.测试

3.Insert

1
2
3
<insert id="addUser" parameterType="com.pcx.pojo.User">
insert into mybatis.user (id, name, pwd) value (#{id},#{name },#{pwd});
</insert>

4.update

1
2
3
<update id="updateuser" parameterType="com.pcx.pojo.User">
update mybatis.user set name =#{id},pwd=#{pwd} = where id #{id}
</update>

5.delete

1
2
3
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id}
</delete>

注意增删改需要提交事物

更多创作支持内容请移步至顶端标签💖发电💖