快速了解Mybatis的基本使用和核心配置文件

一,Mybatis

简介

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。 Mybatis的最大特点:轻量级。相对于Hibernate省略了大量不常用的功能,整体轻巧又高效。

特性

- MyBatis支持定制化SQL、存储过程以及高级映射
- MyBatis避免了几乎所有的JDBC代码和手动设置参数以及结果集解析操作
- MyBatis可以使用简单的XML或注解实现配置和原始映射;将接口和Java的POJO(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录
- Mybatis是一个半自动的ORM(Object Relation Mapping)框架

这些特性看完本文之后你就会有更深的理解。

二,mybatis基本操作和核心配置文件

2.1物理建模

1.表

DROP TABLE IF EXISTS `emp3`;
CREATE TABLE `emp3`  (
  `emp_id` int(0) NOT NULL AUTO_INCREMENT,
  `wkname` varchar(10) CHARACTER SET utf32 COLLATE utf32_general_ci NULL DEFAULT NULL,
  `address` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT 'Unknown',
  `job_id` int(0) NULL DEFAULT 0,
  PRIMARY KEY (`emp_id`) USING BTREE,
  INDEX `emp_name_index`(`wkname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of emp3
-- ----------------------------
INSERT INTO `emp3` VALUES (1, '张三', '衡阳', 12);
INSERT INTO `emp3` VALUES (2, '李四', '郴州', 13);
INSERT INTO `emp3` VALUES (3, '王五', '岳阳', 14);

SET FOREIGN_KEY_CHECKS = 1;

我提前讲一下,这里的sql数据大家最好不要用,可能会报错哈!自己随便挑一个自己之前创建过的表就行!

比如说我是像这样的一张表

2.2逻辑建模

1.引入依赖

<!-- Mybatis核心 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.7</version>
            </dependency>

            <!-- junit测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>

            <!-- MySQL驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
            </dependency>

这里值得注意一下的是,如果你的mysql版本是8的话,那么你所导入的驱动可以和我的一样,但是要是低一点的版本就导入下面的mysql驱动。

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.3</version>
</dependency>

 2.实体类

@Data
@NoArgsConstructor
@AllArgsConstructor为实体类加上这三个注解,我们就不用再不用再手动添加setter,getter和构造方法了,但是首先我们需要引入lombok依赖,才可以使用。

 2、注解功能
|注解|作用|
|@Data|生成getXxx()方法、setXxx()方法、toString()、equals()、canEqual()、hashCode()方法|
|@AllArgsConstructor|生成全参构造器|
|@NoArgsConstructor|生成无参构造器|
|@Slf4j|生成日志对象|
|@Getter|生成getXxx()方法|
|@Setter|生成setXxx()方法|
|@ToString|生成toString()方法|

 

package com.zhuzhu;

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Empolyee {
    private Integer empId;
    private String wkname;
    private String address;
    private Integer jobId;
}

3.Employeemapper 

package com.zhuzhu.Dao;

import com.zhuzhu.Empolyee;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface EmpolyeeMapper {
    Empolyee selectEmpolyee(Integer empId);
}

 2.3准备配置文件

1.全局配置文件

习惯上命名为 mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合 Spring 之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

<?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>
    //引入的外部配置文件
    <properties resource="jdbc.properties"/>
    <!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
    <environments default="development">

        <!-- environment表示配置Mybatis的一个具体的环境 -->
        <environment id="development">

            <!-- Mybatis的内置的事务管理器 -->
            <transactionManager type="JDBC"/>

            <!-- 配置数据源 -->
            <dataSource type="POOLED">

                <!-- 建立数据库连接的具体信息 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>

        </environment>
    </environments>



    <mappers>
        <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
        <!-- mapper标签:配置一个具体的Mapper映射文件 -->
        <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
        <!--    对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
        <mapper resource="mappers/EmpolyeeMapper.xml"/>
    </mappers>


</configuration>

这是上面resource属性引入的外部配置文件

user=root
password=123456
//serverTimezone=UTC 修改时区
//rewriteBatchedStatements=true 添加批量操作的功能
//useSSL=false 是说是否使用SSL连接,我们这里选false
url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&useSSL=false&rewriteBatchedStatements=true
//mysql8版本的driver不一样,低版本sql驱动的是com.mysql.jdbc.Driver
//你要是不确定你的版本,可以两种都试一下
driver=com.mysql.cj.jdbc.Driver

注意一下这一句话,mysql8版本的driver不一样,低版本的是com.mysql.jdbc.Driver
你要是不确定你的版本,可以两种都试一下 

 2.局部配置文件

有多少个mapper就有多少局部配置文件!可以看到我们在局部配置文件中定义Employeemapper接口中selectEmpolyee方法所要执行的sql语句,传入的参数类型和返回的参数类型。

<?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属性:在Mybatis全局范围内找到一个具体的Mapper配置 -->
<!-- 引入接口后,为了方便通过接口全类名来找到Mapper配置文件,所以通常将namespace属性设置为接口全类名 -->
<mapper namespace="com.zhuzhu.Dao.EmpolyeeMapper">

    <!-- 编写具体的SQL语句,使用id属性唯一的标记一条SQL语句 -->
    <!-- resultType属性:指定封装查询结果的Java实体类的全类名 -->
    <select id="selectEmpolyee" resultType="com.zhuzhu.Empolyee">
        <!-- Mybatis负责把SQL语句中的#{}部分替换成“?”占位符,在#{}内部还是要声明一个见名知意的名称 -->
        select emp_id empId,wkname name,address address,job_id jobId from emp3 where emp_id=#{empId}
    </select>
</mapper>

2.4测试类

package com.zhuzhu;

import lombok.extern.slf4j.Slf4j;
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 org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
@Slf4j
public class testsql {
    @Test
    public void testSelectEmployee() throws IOException {

        // 1.创建SqlSessionFactory对象
        // ①声明Mybatis全局配置文件的路径
        String mybatisConfigFilePath = "mybatis-config.xml";

        // ②以输入流的形式加载Mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);

        // ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2.使用SqlSessionFactory对象开启一个会话
        SqlSession session = sessionFactory.openSession();

        // 3.根据Mapper配置文件的名称空间+SQL语句的id找到具体的SQL语句
        // 格式是:名称空间.SQL语句的id
        String statement = "com.zhuzhu.Dao.EmpolyeeMapper.selectEmpolyee";

        // 要传入SQL语句的参数
        Integer empId = 1;

        // 执行SQL语句
        Object result = session.selectOne(statement, empId);

        System.out.println("o = " + result);
        if (result != null) {
            log.info(result.toString());
        }

        // 4.关闭SqlSession
        session.close();

    }
}

说明:

- SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
- SqlSessionFactory:是“生产”SqlSession的“工厂”。
- 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

运行之后

三,总结

从上面的操作,可以给我们的直观感受就是:

1.使用mybatis之后,sql语句和java程序之间的耦合是很小的,不像我们之前直接的调用JDBC那样还要在Java程序中编写sql语句。

2.MyBatis避免了几乎所有的JDBC代码和手动设置参数以及结果集解析操作

public static void close(ResultSet set, Statement statement, Connection connection){
        try{
            if(set != null){
                set.close();
            }
            if(statement !=null){
                statement.close();
            }
            if(connection !=null){
                connection.close();
            }
        }catch (SQLException e){
            throw new RuntimeException(e);
        }

    }

3.MyBatis可以使用简单的XML或注解实现配置和原始映射 

比如说上,上面的@Mapper设置mapper接口

这就是mybatis的基础使用和核心配置文件的讲解,创作不易还请点一个小赞支持一下,我们下篇博客再见!

猜你喜欢

转载自blog.csdn.net/weixin_64972949/article/details/130945007
今日推荐