博客
关于我
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");
  • 常用操作:

    • 查询:selectList、selectOne
    • 插入: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/

    你可能感兴趣的文章
    Python下调用Linux的Shell命令
    查看>>
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>
    python与运算符_python运算符
    查看>>
    python两个列表获取交集,并集,差集
    查看>>
    python两个字典合并,两个list合并
    查看>>
    Python两个版本共存时,命令行升级pip
    查看>>
    Python两个版本共存时,怎么验证是否安装成功 scrapy
    查看>>
    Python两个版本共存时,通过pip安装Scrapy
    查看>>
    python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
    查看>>
    Python中 pass语句的作用
    查看>>
    python中 urllib, urllib2, httplib, httplib2 几个库的区别
    查看>>
    python中 yaml库 & json库 & xmltodict库使用
    查看>>