Mybatis

1、概述

  1. 什么是mybatis?

MyBatis是一个基于Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Ordinary Java Objects,普通的Java对象)映射成数据库中的记录。

它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低

  • 什么是ORM?

    Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据

  • 为什么mybatis是半自动的ORM框架?

    用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多

2、MyBatis的优缺点

  • 优点

    • 代码量减少:与JDBC相比,MyBatis能够显著减少代码量,减少了50%以上的代码量。

    • 简单易学:MyBatis是最简单的持久化框架之一,小巧并且简单易学,适合初学者快速上手。

    • 灵活性高:不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。

    • 动态SQL:提供XML标签,支持编写动态SQL语句(如if、else等),增强了SQL的灵活性和可读性。

    • 映射标签:提供映射标签,支持对象与数据库的ORM字段关系映射,可以在XML中配置映射关系,也可以使用注解配置映射关系。

    • 兼容性好:由于MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持,具有良好的兼容性。

    • 性能较高:MyBatis使用JDBC提供的原生SQL接口,没有封装过多的抽象层,运行效率相对较高。

    • 易于调试:提供了日志输出功能,可以详细记录SQL执行情况,便于开发者进行调试。

    • 集成方便:能够与Spring等主流框架很好地集成,提高了开发效率。

  • 缺点

    • SQL维护复杂:需要手动编写SQL语句,如果SQL语句写得不好,就会导致可读性差、难以维护。

    • 编程量较大:虽然MyBatis提供了很多插件和辅助工具,但是需要编写大量的XML文件,会导致编程量增大,不利于快速开发。

    • 集成困难:如果需要整合多个数据源,就需要编写较多的配置文件,集成起来比较麻烦。

    • 调试难度增加:与JDBC相比,增加了调试代码和查错的难度,因为使用了ORM需要额外花费时间学习ORM的框架,调试错误比JDBC难很多。

    • 单步调试限制:JDBC可以单步调试,但MyBatis不能单步调试,需要通过日志输出日志信息帮助调试。

    • 数据库移植性差:SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

    • 学习成本较高:需要开发人员掌握XML文件编写和SQL语句的构建等技术,学习成本较高

3、快速入门

3.1 添加依赖

pom.xml里面添加依赖

       <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <!-- MySQL Connector/J -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
3.2 配置数据源
  1. resouces文件创建数据源jdbc.properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://IP:端口/数据库名?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=utf-8
jdbc.username=账号
jdbc.password=密码
  1. resouces文件下创建xml文件mybatis-config.xml
<?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>
    <!-- 引入了外部的属性文件jdbc.properties -->
    <properties resource="jdbc.properties"/>
    <!-- 定义环境集合,并指定了默认的环境为development -->
    <environments default="development">
        <!-- 定义了名为 development 的具体环境配置 -->
        <environment id="development">
            <!-- 指定了事务管理器类型为JDBC -->
            <transactionManager type="JDBC"/>
            <!-- 指定了数据源类型为POOLED -->
            <dataSource type="POOLED">
                <!-- 驱动名、URL、用户名和密码,使用 ${jdbc.driver} 等从 jdbc.properties 文件获取值 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 定义了一组映射器(Mapper),用于将SQL语句与Java对象进行映射。 -->
    <mappers>
        <!-- 映射器文件UserMapper.xml -->
        <mapper resource="UserMapper.xml"/>
    </mappers>

</configuration>
3.3 数据准备
  1. 创建数据库表,与实体类对应,创建user

在这里插入图片描述

  1. com.example.mybatis.model包下面创建User
@Data
public class User {
   
   

    private int id;
    private String username;
    private String password;

}
3.4 创建映射文件UserMapper.xml
  1. 创建映射接口,在com.example.mybatis.dao下创建UserMapper接口

    需根据命名空间创建对应接口

<?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 命名空间 -->
<mapper namespace="com.example.mybatis.dao.UserMapper">
    <!-- 根据 id 查询用户 -->
    <select id="selectById" resultMap="UserResultMap">
        SELECT * FROM user WHERE id = #{
   
   id}
    </select>
    <!-- 插入用户 -->
    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO user (use
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值