初识Mybatis

一、什么是 MyBatis?

根据官方文档Mybatis官方

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

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。

为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。
内存过于昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。

二、Mybatis的配置

  1. 用Maven创建一个工程然后引入mybatis依赖,在GItHub上查看版本库:Mybatis版本库
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.21</version>
</dependency>
  1. mybatis需要一个xml的配置文件在resources目录下创建一个mybatis-config.xml,加入以下代码。下面代码部分的property标签就是平时需要声名的配置,在这里直接就可以声名。
    url的参数 加&符号需要替换成&
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 环境可以有很多,但是在哪个环境运行需要设置为默认-->
    <environments default="development">

        <environment id="development">
            <!--事务管理器 JDBC 或者MANAGED -->
            <transactionManager type="JDBC"/>
            <!--数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db3?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个Mapper都需要在这里声名 不声明的话报错:Type interface com.itcase.dao.UserDao is not known to the MapperRegistry. -->
    <mappers>
<!-- 报错:Could not find resource com/itcase/dao/UserMapper.xml-->
        <mapper resource="com/itcase/dao/UserMapper.xml"/>
    </mappers>
</configuration>
  1. 我们还需要用上面的mybatis-config.xm构建一个SqlSessionFactory

每个基于 MyBatis 的应用都是以一SqlSessionFactory 的实例为核心的。SqlSessionFactory的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

写一个工具类来加载配置文件和生成SqlSession

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用mybatis创建sqlSessionFactory类
            String resources = "mybatis-config.xml";
            InputStream resourceAsStream = Resources.getResourceAsStream(resources);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //得到sqlSession
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

三、Mybatis如何使用?

  1. 创建一个数据库和表
    在这里插入图片描述
  2. 需要一个JavaBean用来存储数据库里传来的数据
package com.itcase.domain;

public class user {
    private int id;
    private String name;
    private String psw;

    public user(){
    }

    public user(int id, String name, String psw) {
        this.id = id;
        this.name = name;
        this.psw = psw;
    }

    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 getPsw() {
        return psw;
    }

    public void setPsw(String psw) {
        this.psw = psw;
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", psw='" + psw + '\'' +
                '}';
    }
}

  1. 设置一个接口作为命名空间和接口内定义需要实现的方法,这个接口就是映射器。
public interface UserMapper{
    public List<user> getList();
}
  1. 按照以前的方式我们就应该写Dao层了,在Dao层里写方法实现和sql语句,但是Mybatis使用另一种简单的方式实现方法:自定义一个UserMapper.XML
<?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.itcase.dao.UserMapper">
<!-- id就是上面那个接口里的方法名  select标签就相当于实现了这个查询方法  resultType 是返回结果根据方法可以得出来是User-->
    <select id="getList" resultType="com.itcase.domain.user"> select * from db3.user </select>
</mapper>
  1. 测试
    sqlSession.getMapper(接口映射器);返回一个Mapper可以直接可以调用接口映射器中的方法,它找到UserMapper.XML里的mapper命名空间获取id直接执行sql语句,并返回这个方法类型。
public class UserDaoTest {

    public UserDaoTest(){ }
    @Test
    public void test1(){
        //得到sqlSession对象
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        //获取到UserDao的对象
        UserMappermapper = sqlSession.getMapper(UserMapper.class);
        //执行sql操作
        List<user> list = mapper.getList();
        for (user user : list) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值