美文网首页
Mybatis入门

Mybatis入门

作者: 小杨小杨神采飞杨 | 来源:发表于2020-04-14 14:18 被阅读0次

Mybatis

获得Mybatis的方法:

在maven仓库(https://mvnrepository.com),搜索Mybatis,复制粘贴到pom.xml,maven会自动下载相关配置依赖

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>

中文文档:https://mybatis.org/mybatis-3/zh/index.html

什么是Mybatis?

Mybatis_logo

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

Question:持久层

持久化:有一些信息不能失效,而内存是断电即失效的,所以需要将数据从瞬时状态转换到持久状态,这个过程就是持久化

持久层:完成持久化工作的代码操作,就是持久层做的事,层界限十分清晰

区分持久化、持久层,持久化是一个动作,而持久层是一个名词,是一个概念

第一个Mybatis程序

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

搭建环境

1、创建数据库以及表,并添加数据

create database mybatis;
use mybatis;

create table user (
    id int(8) not null primary key,
    name varchar(10) default null,
    pwd varchar(10) default null
)engine=InnoDB default charset=utf8;

insert into user values('95001','yzx','123123'), ('95002','jay','123123'),('95003','zs','123123'),
('95004','ls','123123');

SET SQL_SAFE_UPDATES= 0;

2、创建项目

​ 1、使用idea创建一个空的maven项目

​ 2、删除src,将该项目当做父工程使用,这样做的好处是,之后在此工程下新建的module无序重复导入依赖

<groupId>cn.yzx</groupId>
<artifactId>mybatis_learn</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules> <!--之后的module都会在该父工程下-->
    <module>mybatis_01</module>
</modules>

​ 3、导入依赖,至少需要导入三个依赖,才能满足需求

<!--导入依赖-->
<dependencies>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.17</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
</dependencies>

3、创建一个模块

​ 1、编写mybatis核心配置文件

官方建议的配置文件名称

根据官方提示,在resources下创建配置文件,名称可以修改,但建议一致

​ 2、编写核心配置xml文件

<!--核心配置文件-->
<configuration>
    <!--配置,可多套配置,default表示默认使用配置-->
    <environments default="development">
        <environment id="development"><!--id为不重复单一标识符-->
            <transactionManager type="JDBC"/>
            <dataSource type="mybatis">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?
                useUnicode=true&amp; 
                characterEncoding=utf8&amp; 
                serverTimezone=GMT&amp; 
                useSSL=true"/>
                <!--设置允许使用编码-->
                <!--设置编码-->
                <!--mysql8.0之后,需要设置时区-->
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

​ 3、编写mybatis工具类

在项目下创建utils包,创建utils工具类

工具类

最后根据官方提示,在工具类内编写以下固定代码

//创建SqlSessionFactory并获取SqlSession的工具类
public class mybatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;

    static {
        try {
            String resource = "mybatis-config.xml"; //从resource读取文件
            InputStream inputStream = Resources.getResourceAsStream(resource); //使用流读取文件
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //创建sqlSessionFactory对象
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //获取SqlSession的方法
    public statis SqlSession getsqlSession() {
        return sqlSessionFactory.openSession();
    }
}

这样一个mybatis工具类就写好了,SqlSession就和JDBC中PreparedStatement对象一样,用于执行sql语句

​ 4、编写代码

实体类

public class User {
    private int id;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", 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;
    }

    public User() {
    }

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

Mapper接口

public interface userMapper {
    List<User> findAll();
}

接口实现类,在mybatis中,接口实现类被摒弃了,转而使用配置文件

配置文件

<?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">

<!--对应的接口方法-->
<mapper namespace="cn.yzx.dao.userMapper">
    <!--方法名以及结果集类型-->
    <select id="getUserList" resultType="cn.yzx.pojo.User">
        select * from user;
    </select>
</mapper>

​ 5、测试

​ 在test下建立目录结构一致的包,随后建立对应test类

public class userMapperTest {
    @Test
    public void test01() {
        SqlSession sqlSession = mybatisUtil.getsqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

此时会报一个错误:这个错误要死死的记住,绑定异常

org.apache.ibatis.binding.BindingException: Type interface cn.yzx.dao.userMapper is not known to the MapperRegistry.

原因是没有在核心配置文件中注册

重点如图

之后还会出现另一个错误:资源过滤问题,此时打包会发现target中是没有对应xml文件的

The error may exist in cn/yzx/dao/userMapper.xml

解决方法是在pom.xml文件中,加上以下代码

<!--防止资源导出失败-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

之后就能正常运行了

正常运行结果

target中也有了对应xml文件

存在xml

CRUD

查:

​ 1、查全部

xml

resultType是返回值类型,查全部本质上也是一个一个的查询,最后装到list中,所以返回值是User对象

​ 2、查单个

xml

parameterType是参数类型

增:

xml

要特别注意,在Mybatis中,所有增删改操作,都默认关闭自动提交事务,所以最后需要手动提交事务!!,若不想手动提交,需要在获取sqlSession时,带上参数

SqlSessionFactory原码
可见,openSession方法是有重载形式的,而且自动提交事务默认是关闭的 不开启自动提交事务 开启自动提交事务

改:

xml

删:

xml

万能的Map集合

使用Map集合达到单条件修改的效果

xml

设置sql参数时,只需要设置;需要修改的参数以及区别的条件即可,因为参数为map时,传入的是key的值,所以参数名称可以不需要和实体类一致,且参数个数可以自定义

@Test
public void test06(){
    SqlSession sqlSession = mybatisUtil.getsqlSession();
    userMapper mapper = sqlSession.getMapper(userMapper.class);

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("id",95001);
    map.put("name","yangzixian");

    mapper.updateBySingle(map);

    sqlSession.commit();
    sqlSession.close();
}
结果

修改成功

模糊查询

image-20200414181549343.png

方式一,在定义sql语句时进行模糊设置

模糊设置
@Test
    public void test07(){
        SqlSession sqlSession = mybatisUtil.getsqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);

        List<User> byMoreInfo = mapper.findByMoreInfo("w");
        for (User user : byMoreInfo) {
            System.out.println(user.toString());
        }

        sqlSession.close();
    }

此时传参,只需要正常设置条件即可

方式二,在定义sql语句时不进行模糊条件设置

不进行模糊设置
@Test
public void test07(){
    SqlSession sqlSession = mybatisUtil.getsqlSession();
    userMapper mapper = sqlSession.getMapper(userMapper.class);

    List<User> byMoreInfo = mapper.findByMoreInfo("%w%");
    for (User user : byMoreInfo) {
        System.out.println(user.toString());
    }

    sqlSession.close();
}

此时传参需要将通配符加上

相关文章

  • MyBatis

    MyBatis学习总结(一)——MyBatis快速入门 超详细MyBatis入门讲解

  • 深入浅出Mybatis-Mybatis-Generator

    目录 入门 Mybatis Generator 是什么 Mybatis Generator是Mybatis的代码生...

  • Mybatis的入门

    一.Mybatis介绍 二.Mybatis的架构 三.Mybatis入门程序开发 下载mybatis 导包核心+依...

  • Mybatis快速入门

    Mybatis 学习内容 Mybatis框架的简单入门 Mybatis框架基本的使用 Mybatis框架的深入和多...

  • MyBatis之快速入门

    title: MyBatis之快速入门tags: MyBatiscategories: MyBatis 若图片无法...

  • 1.Mybatis - 搭建

    参考 Mybatis 官方 MyBatis学习总结(一)——MyBatis快速入门 安装 说明基于Maven 步骤...

  • Intellij 第三章 测试Spring整合MyBatis

    0、如需查看Spring整合MyBatis知识请访问 MyBatis入门【十二】 Spring整合MyBatis基...

  • Mybatis源码解读

    Mybatis入门 Mybatis构成 SqlSessionFactoryBuilder(构造器):根据配置信息或...

  • Mybatis入门

    目的:入门,熟悉mybatis是什么,怎么用。 1. 初识Mybatis 1.1 Mybatis介绍 MyBati...

  • MyBatis入门 Day10 2018-11-28

    MyBatis mybatis-3.4.6 jdk1.8+ 一、mybatis入门 1.依赖jar包 pom.xm...

网友评论

      本文标题:Mybatis入门

      本文链接:https://www.haomeiwen.com/subject/hvzzmhtx.html