一. MyBatis简介

本文介绍了MyBatis,一个强大的持久层框架,与JDBC、Hibernate和JPA进行对比,强调其SQL分离、易维护和高效性。详细讲解了如何在项目中集成和使用MyBatis,包括添加依赖、创建实体、编写Mapper接口和XML映射,以及配置和测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. MyBatis简介

1.什么是MyBatis?

官网:https://mybatis.org/mybatis-3/zh/index.html

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github

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

2.三种持久层框架的对比

  • JDBC

    JDBC的全称为Java数据库连接(Java Database connect),他是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到数据库,并使用SQL语句来完成对数据库中数据的增删改查等操作。但是不太实用,主要缺点有:

    • SQL语句夹杂在Java代码中的耦合度较高,导致编码太繁琐,对代码的可读性大大减低。
    • 实际开发中对SQL语句的修改会非常频繁,就会导致可维护减低,维护不易。
    • 代码冗余,开发的效率不高。
  • Hibernate和JPA

    Hibernate和JPA分别是Java持久化API的不同实现,可以简单的理解为JPA是标准接口,Hibernate是实现,并不是对标关系Hibernate属于遵循JPA规范的一种实现,但是JPA是Hibernate遵循的规范之一,Hibernate还有其他实现的规范。

    • 操作简单,开效率高
    • 程序中较长和较难的复杂SQL语句会绕开框架
    • 内部会自动生成SQL语句,不易做优化处理。
    • 基于全映射的全自动框架,大量字段的domain进行部分映射时较困难。
    • 反射的操作太多,会导致数据库性能大幅度下降。
  • MyBatis

    • 轻量级的框架,性能非常出色
    • SQl语句与Java的编码是分开的,功能的界限清楚,Java代码专注业务,SQl语句专注与数据,可读性与可维护性都非常高。
    • 开发的效率比Hibernate略微逊色,但是在可接受的范围之内

    开发效率:Hibernate>>Mybatis>>JDBC

    运行效率:JDBC>>Mybatis>>Hibernate

3.如何使用MyBatis

1.当我们创建好项目后,找到pom.xml,将我们所需要的依赖导入

·pom.xml

 <dependencies>
 	<!-- mybatis依赖 -->
 	<dependency>
 		<groupId>org.mybatis</groupId>
 		<artifactId>mybatis</artifactId>
 		<version>3.5.11</version>
 	</dependency>

 <!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! -->
 	<dependency>
 		<groupId>mysql</groupId>
 		<artifactId>mysql-connector-java</artifactId>
 		<version>8.0.25</version>
 	</dependency>
<dependencies/>

2.我们需要创建一个实体类(domain)

 public class Employee {

 	private Integer empId;

 	private String empName;

	private Double empSalary;
	
    //并生成所对应的getter与setter的方法
 }

3.准备Mapper接口,我们在java文件夹中创建一个文件夹(mapper),用于存放所有的mapper接口,在mapper文件夹中创建我们的mapper接口

/**
*
* 接口只规定方法,参数和返回值!
* mapper.xml中编写具体的SQl语句
*/

public interface EmployeeMapper{
   /*
   *编写要查询数据的方法接口
   */
    /*
    * 根据id查询数据
    */
    Employee FindById(int empId)
}

4.定义mapper.xml,首先在resources文件夹中创建文件夹(mapper),在mapper文件夹中创建EmployeeMapper.xml

注意:在java文件夹中创建mapper文件的路径名称要和resources创建mapper文件夹的路径名称一致,且mapper接口名称与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">
<mapper namespace="mapper.EmployeeMapper">
    
    <!--
    	查询使用select标签
   		id = 方法名
    	resultType = 返回值的类型
    	标签内编写SQL语句
    -->
<select id = "selectEmployee" resultTYpe = "domain.Employee">
	   <!--
    		此处编写对应的SQL语句
    	-->
</select>

注意

  • 方法名和SQl的id一致
  • 方法返回值和resultType一致
  • 方法的参数和SQL的参数一致
  • 接口的全类名和映射配置文件的名称空间一致

5.配置MyBatis配置文件(在resources文件夹创建xml文件)

mybatis框架配置文件: 数据库连接信息,性能配置,mapper.xml配置等!

习惯上命名为 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">

<!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
<configuration>

    <!--引入mybatis的全局设置(日志)-->
    <settings>
        <!--开启驼峰式映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>

    <environments default="development">
        <!-- environment表示配置Mybatis的一个具体的环境 -->
        <environment id="development">
            <!-- Mybatis的内置的事务管理器 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <!-- 建立数据库连接的具体信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
    <!--将java文件夹中的mapper和resources中的xml文件连接到一起-->
        <mapper resource="mapper/EmployeeMapper.xml"/>
    </mappers>
</configuration>

6.运行与测试

在pom.xml中导入测试所需要的依赖

<!--junit5测试-->
 <dependency>
	<groupId>org.junit.jupiter</groupId>
 	<artifactId>junit-jupiterapi</artifactId>
 	<version>5.3.1</version>
 </dependency>

在test文件夹中创建测试类

public class MyBatisTest {
    
    @Test
    public void testSelectEmployee() throwsIOException {
        //1.创建SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


        //2.根据SqlSessionFactory对象开启一个会话
        SqlSession session = sqlSessionFactory.openSession();

        //3.根据SqlSessionFactory接口的class对象获取Mapper接口类型的对象
        EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);

        //4.调用代理类方法触发SQL语句
        Employee employee = employeeMapper.saveEmployee(1);
        System.out.println("姓名:"+employee.getEmpName());

        //5. 关闭SqlSession
        session.commit();//事务,无事务可省略
        session.close();
    }
}
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值