SSM框架之_Mybatis入门笔记,详解快速上手(一)

简介

先附上官网文档
Mybatis官方文档:https://mybatis.org/mybatis-3/zh/index.html

什么是mybatis?

  • 简化JDBC操作,可以避免写jdbc的代码和手动的设置参数以及获取结果集的过程。
  • 使用注解或XML来配置和映射原生信息,将接口和java的实体类映射成数据库中的记录。
  • 持久层框架,实现数据持久化。
  • 半自动化框架,使用SQL更灵活;hibernate是全自动,使用起来不灵活。

持久化层


数据持久化

将程序中的数据在内存中的瞬时态转换成在磁盘中的持久态。例如:JDBC、文件IO。(IO消耗资源严重,因此产生了数据库)

为什么需要Mybatis

  • 简化jdbc操作,传统jdbc太复杂。可以简化的将数据存入数据库和从数据库中取数据。
  • 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率
  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射

第一个Mybatis工程

步骤

工程目录结构

image-20201028111106759

1、搭建环境
  • mybatis是一个持久层框架,因此使用mybatis的前提是要有一个数据库。

  • 使用maven,注入依赖(引入相关jar包)

    创建一个普通的maven项目,删除src目录,让这个项目充当父工程,在父工程的pom.xml文件中引入依赖之后,在项目下创建子模块,子模块中自动继承父工程中引入的依赖。

    需要注入的依赖:mybatis、mysql-connector-java、junit4。

2、创建mybatis的配置文件:

configuration标签中写配置,可以用不同的id写多套环境。

作用:配置数据库连接环境(连接数据库),加载mapper映射

<?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">
<!--mybatis的核心配置文件-->
<configuration>
<!--default:默认使用这个配置环境 -->
    <environments default="development">
<!--可以配置多套环境 -->
        <environment id="development">
<!--事务管理,默认是JDBC的事务管理-->
            <transactionManager type="JDBC"/>
<!-- 启用连接池 -->
            <dataSource type="POOLED">
<!-- 数据库连接驱动-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--数据库连接url-->
<!--&amp;代表&符号,依次是:设置安全连接,设置unicode编码,设置编码方式,设置数据库时区-->
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>

<!--每一个mapper.xml需在配置文件中注册-->
    <mappers>
        <!-- 通过资源的方式注册 -->
        <!-- 这里写resource路径,用/不能用. -->
        <mapper resource="UserMapper.xml"></mapper>
    </mappers>
</configuration>
3、Mybatis工具类

获取SqlSessionFactory对象

Mybatis工具类的作用:加载mybatis的配置文件,通过方法返回一个SqlSession对象。

static中的三行代码是固定的。

package top.jarvaniv.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;

// mybatis 的工具类,获取SqlSessionFactory对象
public class MyBatisUtils {
//提升作用域,把静态代码快中的变量作用域提升,否则,sqlSessionFactory只在静态代码块中有效。
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
//          加载mybatis的配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//    获得了sqlSessionFactory,就可以获得SqlSession实例。
//    SqlSession包含了面向数据库执行SQL命令的所需的所有方法。
// 静态方法,返回一个SqlSession对象。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}
改造工具类的getSession方法,自动提交事务

设置给的boolean类型参数,设置自动提交事务

  //获取SqlSession连接
  public static SqlSession getSession(){
      return getSession(true); //事务自动提交
  }
 
  public static SqlSession getSession(boolean flag){
      return sqlSessionFactory.openSession(flag);
  }
4、创建实体类

封装数据库的每条数据。与数据库中的每列字段值对应。

package top.jarvaniv.pojo;

// 用户实体类
public class User {
    private int id;
    private String name;
//省略set、get、构造方法等代码
}
5、创建DAO接口

其中定义了操作数据库的各种方法

package top.jarvaniv.dao;

import top.jarvaniv.pojo.User;

import java.util.List;

public interface UserDao {
    // 定义了查询数据库中用户列表的方法
    List<User> getUserList();
    //等待实现类重写
}
6、创建UserMapper.xml文件

由原来的接口实现类,转变为现在的xml配置文件。

创建之后,还要在mybatis配置文件中注册这个mapper。

命名空间必须写,根据命名空间确定接口。

<?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="top.jarvaniv.dao.UserDao">
<!--    查询语句 -->
<!--    设置查询语句的id,id是实现的接口中的方法名,和查询的结果类型-->
    <select id="查询id,通常使用实现接口中的实现的方法名" resultType="返回结果的类型,这里用User类接收"></select>
    <select id="getUserList" resultType="top.jarvaniv.pojo.User">
        <!-- 操作数据库的查询语句 -->
        select * from test.temp
  </select>
</mapper>
7、编写测试类
package top.jarvaniv.dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.jarvaniv.pojo.User;
import top.jarvaniv.utils.MyBatisUtils;

import java.util.List;

public class UserDaoTest {
    @Test
    public void getUserListTest(){
        //首先,通过mybatis工具类得到一个sqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        // 获取mapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        // 执行mapper的方法,得到结果集
        List<User> userList = userDao.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }
		// 最后关闭SqlSession资源
        sqlSession.close();
    }
}

类的作用域生命周期


SqlSessionFactoryBuilder

一旦创建了 SqlSessionFactory,就不再需要它了。所以最好把它最佳的作用域是方法作用域(局部变量)。

把它放在工具类的静态代码块中。

SqlSessionFactory

可以理解为:数据库连接池

一旦被创建就在应用的运行期间一直存在。不应该在运行期间关闭或者创建新的。

简单来说就是使用单例模式,或静态单例模式。

SqlSession

连接到连接池的一个请求。

它的实例是线程不安全的,所以不能被共享。最佳的作用域是请求或方法作用域。

每次收到一个http请求,就会打开一个SqlSession,返回一个响应,就关闭它(用完赶紧关闭,防止资源占用)。必须确保SqlSession被关闭,所以在finally中设置它的关闭。标准的使用方式。

try(创建资源){
    
}catch(){
    
}finally{
    关闭资源
}

Mybatis的执行流程

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值