当前位置: 首页 > article >正文

有关MyBatis(轻量级数据持久化框架)

1.有关MyBatis

MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernate,但性能优秀、小巧、简单易学、应用广泛。

ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。

2.MyBatis的优缺点

2.1 优点

  • MyBatis 是免费且开源的。
  • 与 JDBC 相比,减少了 50% 以上的代码量。
  • MyBatis 是最简单的持久化框架,小巧并且简单易学。
  • MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。
  • 提供 XML 标签,支持编写动态 SQL 语句。
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
  • 支持存储过程。MyBatis 以存储过程的形式封装 SQL,可以将业务逻辑保留在数据库之外,增强应用程序的可移植性、更易于部署和测试。

2.2 缺点

  • 编写 SQL 语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。
  • SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

3.MyBatis的使用场景

MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。适用于性能要求高,且需求变化较多的项目,如互联网项目。

4.使用步骤

4.1把配置文件加载到pom文件夹中

 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.16</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.36</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

4.2创建数据库表文件和对应的实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Pet {
    private int id;
    private String name;
    private String species;
    private int age;
}

4.3 配置全局mybatis文件

<?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>
    <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>
    
    //************注意*******
    <typeAliases>
        <package name="org.mybatis.entity"/>
    </typeAliases>
    //**********************
    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!-- MySQL数据库驱动 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <!-- 连接数据库的URL -->
                <property name="url"
                          value="jdbc:mysql://localhost:3306/pet_management1?useUnicode=true&amp;characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="226774" />
            </dataSource>
        </environment>
    </environments>
    <!-- 将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="org/mybatis/mapper/PetMapper.xml" />

    </mappers>
</configuration>

4.4 创建表对应的操作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="org.mybatis.mapper.PetMapper">
    <select id="select" resultType="Pet">
        select * from pets
    </select>
</mapper>

4.5 测试查询语句

public static void main(String[] args) throws IOException {
        @Cleanup
        InputStream in = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
        SqlSession ss = ssf.openSession();
        List<Pet> list = ss.selectList("org.mybatis.mapper.PetMapper.select");
        for (Pet pet : list){
            System.out.println(pet);
        }

    }

5.创建工具类使用MyBatis

5.1创建SqlSessionUtil工具类

注:前面几步同上面一样

private static SqlSessionFactory sqlSessionFactory;
    private SqlSessionUtil(){

    }
    static {
        try {
            @Cleanup
            InputStream is = Resources.getResourceAsStream("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    public static SqlSession openSession(){
        return  openSession(true);
    }
    public static  SqlSession openSession(Boolean flag){
        return  sqlSessionFactory.openSession(flag);
    }

5.2 测试查询语句

public static void main(String[] args) {
        @Cleanup
        SqlSession session = SqlSessionUtil.openSession();
        List<Pet> list = session.selectList("org.mybatis.mapper.PetMapper.select");
        for (Pet pet : list){
            System.out.println(pet);
        }
    }

6.创建Mapper接口使用MyBatis

注意:

1.创建目录结构时,保证Java包中的目录与resources包中的目录结构一致,否则会因为路径问题找不到SQL语句

2.接口中的方法名要与xml中的id一致

6.1 创建与xxxMapper.xml文件同名的Mapper接口

public interface PetMapper {
    public List<Pet> select();
}

6.2 通过工具类调用连接,通过接口测试查询语句

public static void main(String[] args) {
        @Cleanup
        SqlSession sqlSession = SqlSessionUtil.openSession();
        PetMapper mapper = sqlSession.getMapper(PetMapper.class);
        List<Pet> list = mapper.select();
        list.forEach(system.out::println)
        }
    }

7.使用MyBatis时应注意的问题

问题类型注意事项
数据库驱动版本MySQL 5.x与8.x驱动类不同,引入依赖时版本需匹配
数据库URL格式需转义特殊字符(如&&amp
XML命名空间namespace必须与Mapper接口全类名一致
SqlSession生命周期未关闭会导致连接泄漏
事务提交默认非自动提交,需手动提交或设置openSession(true)
高频错误高频错误
ClassNotFoundException驱动类名错误或依赖缺失,检查驱动类名(如MySQL 8.x类名)及依赖配置
Result Maps not found未配置resultTyperesultMap,为查询语句添加resultType="User"或引用<resultMap>
TooManyResultsException使用selectOne()但返回多行数据,改用selectList()或修正SQL条件

http://www.kler.cn/a/555969.html

相关文章:

  • iOS 获取设备占用内存
  • [GESP202312 六级] 闯关游戏
  • 一些知识点
  • Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册
  • 一篇文章读懂AI Agent
  • vmvare kali如何配置桥接模式进行上网
  • iOS 中的圆角与平滑圆角:从新特性到老项目适配
  • 火语言RPA--Excel插入空行
  • 原函数存在定理
  • Ollama 快速入门
  • python小项目编程-中级(1、图像处理)
  • 服务搭建 ollama + Deepseek + Open WebUI + 硅基流动API
  • Cursor和Trae使用的感受
  • 在工作中PostgreSQL常用的SQL命令
  • 网络安全评估指南 网络安全评价体系
  • pikachu之CSRF防御:给你的请求加上“网络身份证”
  • VUE3+TS+element-plus项目从0开始入门 - 创建项目、认识基本结构
  • Apipost和Apifox如何选型(1):WebSocket调试
  • 量子计算的威胁,以及企业可以采取的措施
  • Docker的学习笔记