博客
关于我
Mybatis入门 Mybatis存在的意义 解决的问题 基本操作
阅读量:446 次
发布时间:2019-03-06

本文共 3602 字,大约阅读时间需要 12 分钟。

MyBatis入门

MyBatis的作用

MyBatis 是一个基于 Java 的持久层框架,核心目标是简化数据库开发流程。它通过封装 JDBC API,减少了手动操作数据库的繁琐性。开发者只需关注 SQL 语句本身,而无需处理连接、事务等底层细节。

为什么要学 MyBatis

传统的 JDBC 开发存在以下问题:

  • 数据库连接频繁创建和释放,导致系统资源浪费。
  • SQL 语句硬编码在代码中,数据库变动需要频繁修改代码。
  • 查询操作需要手动处理结果集,将数据封装到实体中;插入操作同样需要手动设置 SQL 占位符。
  • MyBatis 提供的解决方案:

  • 使用数据库连接池技术。
  • 通过 XML 配置管理 SQL 语句。
  • 使用反射和内省技术自动映射实体与数据库表。
  • 这些功能 MyBatis 已经实现,无需额外开发,开发者可以直接使用。

    数据库链接操作步骤

  • 注册 JDBC 驱动:

    Class.forName("com.mysql.jdbc.Driver");
  • 获取数据库连接:

    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3309/test", "root", "1234");
  • preparing Statement:

    PreparedStatement statement = connection.prepareStatement("select id from user");
  • 执行查询:

    ResultSet resultSet = statement.executeQuery();
  • 处理结果集:

    while (resultSet.next()) {    // 处理结果}
  • 释放资源:

    resultSet.close();statement.close();connection.close();
  • MyBatis 核心配置文件概述

    SqlMapConfig.xml 是 MyBatis 的核心配置文件,主要包含以下配置项:

  • environments 标签

    • 事务管理器(transactionManager)类型有两种:

      • JDBC:直接使用 JDBC 提交和回滚,依赖数据源连接管理事务。
      • MANAGED:由容器管理事务生命周期,通常不提交或回滚连接。
    • 数据源(dataSource)类型有三种:

      • UNPOOLED:每次请求打开和关闭连接。
      • POOLED:使用连接池优化资源利用。
      • JNDI:在应用服务器中使用 JNDI 上下文引用数据源。
  • mapper 标签

    • 通过相对路径加载 XML 映射文件:
    • 使用完全限定 URL:
    • 指定具体实现类:
    • 包内扫描注册映射器:
  • properties 标签

    • 用于配置数据库连接信息,如 username、password 等。
  • typeAliases 标签

    • 为字段或类型指定别名,简化查询结果类型。
  • MyBatis ORM 简介

    ORM(Object Relational Mapping,对象关系映射)是数据库和对象之间的映射工具。通过 ORM,开发者无需直接处理复杂 SQL 语句,仅需操作对象即可完成数据库操作。

    • 对象模型(O):程序中根据数据库表结构创建的实体类。
    • 关系型数据库(R):数据库表结构。
    • 映射(M):从数据库表到实体类的映射,确保表字段与对象属性一致。

    MyBatis 核心 API

  • SqlSessionFactory

    • 通过 build 方法加载核心配置文件:
      InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(resourceAsStream);
  • SqlSession

    • 获取数据库连接并执行操作:
      SqlSession sqlSession = factory.openSession();List
      users = sqlSession.selectList("UserAction.selectUsers");
  • 常用操作

    • 查询:selectListselectOne
    • 插入:insert
    • 更新:update
    • 删除:delete
  • 事务管理

    • 提交:commit()
    • 回滚:rollback()
  • MyBatis 实现案例

  • 所需 jar 包

    • mybatis-core
    • mysql-connector-java
  • 创建 User 表

    CREATE TABLE user (    id INT PRIMARY KEY,    name VARCHAR(255)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • User 类

    package domain;public class User {    private int id;    private String name;    public int getId() { return id; }    public void setId(int id) { this.id = id; }    public String getName() { return name; }    public void setName(String name) { this.name = name; }}
  • UserMapper.xml

    insert into user (id, name) values(#{id}, #{name});
  • SqlMapConfig.xml

  • 测试类

    package Test;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 java.io.IOException;import java.util.List;public class TestMyBatis {    @Test    public void testSelect() throws IOException {        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);        SqlSession session = factory.openSession();        List
    users = session.selectList("UserAction.selectUsers"); System.out.println(users); session.close(); }}
  • 结论

    通过以上步骤,可以快速上手 MyBatis,简化数据库开发流程。MyBatis 提供了强大的 ORM 功能,减少了手动操作数据库的复杂性,提高了开发效率。

    转载地址:http://jckfz.baihongyu.com/

    你可能感兴趣的文章
    OfficeWeb365 SaveDraw 文件上传漏洞复现
    查看>>
    office中的所有content type
    查看>>
    office之Excel 你会用 Ctrl + E 吗?
    查看>>
    Office办公软件里的“开发工具”选项卡-ChatGPT4o作答
    查看>>
    Offline Installation the .NET Framework 3.5 on Windows 8
    查看>>
    OGG初始化之使用数据库实用程序加载数据
    查看>>
    ogg参数解析
    查看>>
    ognl详解
    查看>>
    Ogre 插件系统
    查看>>
    Oil Deposits
    查看>>
    oj2894(贝尔曼福特模板)
    查看>>
    OJ4TH|Let's play a game
    查看>>
    OJ中处理超大数据的方法
    查看>>
    OJ中常见的一种presentation error解决方法
    查看>>
    OK335xS UART device registe hacking
    查看>>
    ok6410内存初始化
    查看>>
    OkDeepLink 使用教程
    查看>>
    OKHTTP
    查看>>
    Okhttp3添加拦截器后,报错,java.io.IOException: unexpected end of stream on okhttp3.Address
    查看>>
    Okhttp拦截器
    查看>>