如何在自己的Maven工程上搭建Mybatis框架?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 如何在自己的Maven工程上搭建Mybatis框架?

编译软件:IntelliJ IDEA 2019.2.4 x64

操作系统:win10 x64 位 家庭版

Maven版本:apache-maven-3.6.3

Mybatis版本:3.5.6

前言

Mybatis框架”,“Mybatis框架“…, 拆解其名词,我们可以得到”Mybatis是一个框架的名字“这一浅显的结论,但是何为框架?何为Mybatis?且看本文为你分解。


一. 什么是Mybatis框架?

1.1 框架是什么?

举个生活中的例子,当我们努力工作,攒钱买房时,买到的房子是可以直接拧包入住吗?当我们花钱购置自己的的个人电脑时,自己的电脑一买回来就可以直接拿来使用的吗?并不是,买到的房子只是毛胚房,需要后期的装修以及添置家具,才能入住;买到的电脑,需要我们首次开机时设置相应的系统参数,比如设置网络与登录账户或者创建账户等等,才能使用。

框架就相当于上述例子中的毛胚房刚买回但未配置的电脑,是个半成品,Java程序中的框架也是如此,其他语言中的框架亦是如此。

Java程序中常见的框架【后端开发】有:

  1. Mybatis框架持久化层框架【dao层】
  2. SpringMVC框架控制层框架【Servlet)层】
  3. Spring框架全能选手

1.2 什么是MyBatis ?

  1. MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架
  2. MyBatis避免了几乎所有的DBC代码和手动设置参数以及获取结果集
  3. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的 POJO(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录
  4. Mybatis是一个半自动的持久化层的ORM(Object Relation Mapping)框架

什么是ORM?

ORM (Object Relation Mapping) --> 【对象 关系 映射】

将java中的对象与数据库中表建立映射关系

优势就是操作java中的对象,就可以影响数据库中表的数据

为何称MyBatis是半自动的?

这是相对于真正的 ORM 框架(例如 Hibernate、Spring Data JPA 等)来说,Mybatis 在对象关系映射方面自动化程度较低。

在 Mybatis 中,开发人员需要手动将 SQL 语句与 Java 对象之间的映射规则定义在 XML 文件或注解中。这意味着,Mybatis 不会自动生成 SQL 语句,并且不会在 Java 对象和数据库表之间进行自动转换。

但是,与此同时,Mybatis 也提供了很多功能上强大的 SQL 语句生成特性,例如:可以动态拼接 SQL 语句、支持使用 DAO 层接口代理执行 SQL 语句等,使得开发人员能够更加灵活地操作数据库。

1.3 MyBatis的参考资料在哪找?

MyBatis的源码地址

MyBatis的官方文档地址


二. 如何搭建Mybatisi框架(入门案例)?

不论导入什么框架,都要历经以下的三步:

  1. 导入jar包
  2. 编写配置文件
  3. 使用核心类库

案例需求:在数据库中建立一个数据表tbl_employee,同时在maven工程中建立一个Employee类,实现从数据库中根据id(员工编号)查找对应的员工信息,尝试使用mybatis框架实现它

2.1 准备数据

①建库建表建约束并导入测试数据

CREATE TABLE tbl_employee(
id INT(11)PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(50),
email VARCHAR(50),
salary DOUBLE(10,2)
);

②准备maven工程

2.2 搭建Mybatis框架步骤

2.2.1 在该maven工程下的pop.xml中导入jar包

我们需要以下三个jar包:

  • MySQL的驱动jar包 8.0.26
  • junit 4.12
  • Mybatis框架的jar包 3.5.6

示例代码如下:

//pop.xml中导入相关jar包
<dependencies>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2.2.2 编写核心配置文件【mybatis-config.xml】

位置:

resources目录下

文件命名:

推荐使用mybatis-config.xml

代码示例如下:

相关代码可直接在 https://mybatis.org/mybatis-3/zh/getting-started.html 中复制相应代码,粘贴到自己的核心配置文件中即可,如下所示。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--   下面是mysql8版本            -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--    url后要加时区 ?serverTimezone=UTC" ,不然报错           -->
                <property name="url" value="jdbc:mysql://localhost:3306/0411db?serverTimezone=UTC"/>
            <!-- 下面是mysql5版本的写法
                 <property name="driver"value="com.mysql.jdbc.Driver"/>
                 <property name="url"value="jdbc:mysql://localhost:3306/0411db"/>
                -->
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    //设置映射文件的路径
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

注意:

如果你的MySQL版本为8及以上, url后要加时区“ ?serverTimezone=UTC" ,不然会报错

针对MySQL的数据库版本不同, diver与url的value值写法会有所不同

以我的mysql数据库版本(8.0.26)举例如下所示:

MySQL8版本:

<property naurlme="driver" value="com.mysql.cj.jdbc.Driver"/>
/url后要加时区“ ?serverTimezone=UTC" ,不然会报错
<property name="url" value="jdbc:mysql://localhost:3306/0411db?serverTimezone=UTC"/>

MySQL5版本:

<property name="driver"value="com.mysql.jdbc.Driver"/>
<property name="url"value="jdbc:mysql://localhost:3306/0411db"/>

2.2.3 书写相关接口及映射文件

映射文件位置:

resources/mapper(这是新建一个包Mapper用以存放多个映射文件)

映射文件命名:

XXMapper.xml(推荐与对应的Mapper接口的命名一致)

映射文件作用:

为对应的Mapper接口书写sql语句

ps:

一个xxxMapper接口对应一个映射文件XXMapper.xml

如果有多个Mapper接口,那么resources目录下就必须有多个对应的映射文件,但是resources目录下也存放核心配置文件,为区分核心配置文件与多个映射文件,推荐在resources目录下新建一个包Mapper,用以存放多个映射文件

注意:

  • 映射文件名与接口名保持一致
  • 映射文件namespace与接口全类名保持一致
  • 映射文件Select的Id的属性值与接口的方法名保持一致

附注:

示例代码如下:

①在src\main\java\mybatis\mapper下定义EmployeeMapper接口

package mybatis.mapper;
import mybatis.pojo.Employee;
public interface EmployeeMapper {
  //根据员工编号查找对应的员工信息
    public Employee selectByempId(int empId);
}

②在src\main\resources\mapper下定义EmployeeMapper接口对应的映射文件EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.mapper.EmployeeMapper">
    <!--  resultType:Mapper接口中selectByempId方法的返回值类型【Employee类(写类的全名称)】  -->
    <select id=" selectByempId" resultType="mybatis.pojo.Employee">
        select
            id,
            last_name,
            email,salary
        from
            tbl_employee
        where
            id= #{empId}
    </select>
</mapper>

附注:映射文件中的基本配置信息的相关代码可直接在https://mybatis.org/mybatis-3/zh/getting-started.html 中复制代码,粘贴到自己的映射文件,修改部分参数值即可

2.2.4 测试(使用SqlSession对象)

步骤:

①先获取SqlSessionFactory对象

②再获取SqlSession对象

③通过SqlSession对象获取KXXMapper代理对象

④测试

代码示例如下:

import mybatis.mapper.EmployeeMapper;
import mybatis.pojo.Employee;
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.Test;
import java.io.IOException;
import java.io.InputStream;
public class TestMybatis {
    @Test
    public void test01(){
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过SqlSessionFactory对象调用openSession();
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //获取EmployeeMapper的代理对象
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            System.out.println(" employeeMapper.getClass().getName() = "+employeeMapper.getClass().getName());
            Employee employee = employeeMapper.selectByempId(1);
            System.out.println(employee);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.3 搭建log4j 日志框架

为什么要搭建log4j 日志框架?

log4j 日志框架可以把mybatis 的底层运行过程显示出来,便于我们开发者查找bug

步骤:

①在要应用的模块的pop.xml中引入log4j 的jar包

代码示例如下:

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

②在resources目录下编写它的配置文件log4j.xml

示例代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

③运行测试

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Java 数据库连接
MyBatis 优秀的持久层框架(一)
MyBatis 优秀的持久层框架
69 0
|
2月前
|
SQL 关系型数据库 Java
Mybatis-Flex框架初体验
Mybatis-Flex框架初体验
|
3月前
|
SQL Java 数据库连接
|
3月前
|
前端开发 Java 数据库连接
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
33 0
|
4月前
|
SQL Java 数据库连接
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
92 0
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
|
17天前
|
SQL Java 数据库连接
什么是MyBatis持久层框架?
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象) 映射成数据库中的记录。
33 5
|
2月前
|
SQL XML Java
这样使用MyBatis框架,被攻击了
这样使用MyBatis框架,被攻击了
14 0
|
2月前
|
Java fastjson Apache
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
31 1
|
2月前
|
Java Maven
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
21 0
|
2月前
|
JavaScript Java 关系型数据库
实例!使用Idea创建SSM框架的Maven项目
实例!使用Idea创建SSM框架的Maven项目
38 0