MyBatis框架教程「入门起步」

简介: 今天我们就踏上学习Mybatis框架的旅程,在SSM框架中Mybatis框架是dao层的一个解决方案。

今天我们就踏上学习Mybatis框架的旅程,在SSM框架中Mybatis框架是dao层的一个解决方案。相当于传统Servlet+JavaBean开发模式中JDBC的作用。具体关于MVC架构的知识可以移步「从零学习Spring MVC框架「环境搭建和MVC架构」」文章,在这一篇文章的开篇我详细阐述了关于MVC架构的知识。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs「Plain Old Java Objects,普通的 Java对象」映射成数据库中的记录,它是dao层的一个解决方案。

image

什么需求催生了MyBatis这种框架的产生呢?Mybatis框架比较重要的是:Mybatis自动将sql执行结果映射至java对象。我们知道目前流行的编程语言,例如Java,C#是面向对象的编程语言;但是主流的数据库产品,例如:Oracle,Mysql 等都是关系型数据库,编程语言和底层数据的发展不协调,催生出了ORM框架。
我们可以理解为ORM框架可作为面向对象语言和数据库之间的桥梁。我们将要学习的MyBatis的设计思想和ORM很相似。

  1. 起步
    首先将mybatis-x.x.x.jar文件置于 classpath 中即可。由于需要连接数据库我们还需要驱动包。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>x.x.x</version>
</dependency>
  1. 构建 SqlSessionFactory
    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得,关于SqlSession的介绍我们在文章末尾展开。

SqlSessionFactoryBuilder可以从 XML 配置文件或一个预先定制的 Configuration的实例构建出SqlSessionFactory的实例。
SqlSession产生的第一步就是要利用SqlSessionFactoryBuilder来获取工厂SqlSessionFactory,再获得SqlSession。
SqlSessionFactoryBuilder有五个build()方法,每一种都允许你从不同的资源中创建一个SqlSession实例。

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String env, Properties props)
SqlSessionFactorybuild(Configuration config)

以上五种 build()方法中,第一种是最常用的一种,在这里就不进行讲解。
这里我们使用:

//加载  核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlsession工厂 -->相当于connection
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取sqlsession -->相当于执行sql语句对象
sqlSession = sqlSessionFactory.openSession();
3. mybatis-config.xml

XML配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器。XML 配置文件的详细内容下方探讨,这里先给出一个简单的示例:

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
 <!-- 配置环境 -->
 <environments default="jujidi">
    <environment id="jujidi">
     <transactionManager type="JDBC"></transactionManager>
     <dataSource type="POOLED">
     <property name="driver" value="com.mysql.jdbc.Driver"/>
     <property name="url" value="jdbc:mysql://localhost:3306/dbname"/>
     <property name="username" value="root"/>
     <property name="password" value="root"/>
    </dataSource>
  </environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
 <mapper resource="com/jujidi/test/TestMapper.xml" />
</mappers>
</configuration>

当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。
environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)
关于事务管理器:在 MyBatis 中有两种类型的事务管理器
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)

  1. TestMapper.xml
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jujidi.model.User">
<!-- 通过id返回数据 -->
<select id="load"resultType="map">
 select * from user where user_id=1
</select>
</mapper>

namespace:是对此mapper 的唯一标识,通过select标签进行声明一个sql语句。

select中的id属性是在此mapper映射文件中sql语句的唯一id,我们可以通过namespace.id来定位这一条sql语句

  1. MyBatisTest.java
public class MybatisTest {
public static void main(String[] args ) {
 SqlSession sqlSession = null;
  try{
    //加载核心配置文件
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    //创建sqlsession工厂 -->相当于connection
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    //获取sqlsession -->相当于执行sql语句对象
    sqlSession = sqlSessionFactory.openSession();
    //执行sql
    Map<String , Object> map =  sqlSession.selectOne("com.jujidi.model.User.load");
    System.out.println(map);
   }catch(IOException e){
     // TODO Auto-generated catch block
     e.printStackTrace();
   }finally{
    if(sqlSession!=null){
    sqlSession.close();
   }
  }
}
}

到这里环境环境搭建完毕,讲解大体流程: MyBatisTest.java类中进行测试搭建的环境,首先加载核心配置文件mybatis-config.xml,此配置文件用来配置环境参数和加载映射文件。
然后创建sqlsession工厂,这个工厂就要通过刚刚加载的mybatis-config.xml配置文件来build。通过工厂就可以生产sqlsession了,sqlsession有很多方法,我们执行selectOne方法来执行映射文件中的SQL,这就必须在selectOne方法中填写映射文件中对应SQL的地址,也就是全限定类名来定位。
在映射文件中进行操作数据库把结果进行返回,打印输出。
好了这里差不多把环境搭建完毕后的流程走了一遍,算是对MyBatis的一个入门和起步,接下来我们就来谈一下SqlSessionFactory和SqlSession.

  1. SqlSessionFactory和SqlSession
    SqlSessionFactory是MyBatis非常重要的对象,他是单个数据库映射关系经过编译后的内存镜像。

SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得,而SqlSessionFactoryBuilder从XML配置文件等中构建出SqlSessionFactory的实例。SqlSessionFactory一旦创建,在应用的执行期间都存在,其线程也是安全的。
SqlSession类似于JDBC中的Connection。它是应用程序与持久层之间执行交互操作的一个单线程对象。它底层封装了JDBC连接,线程是不安全的。

原文发布时间为:2018-07-28
本文作者:王久一
本文来自云栖社区合作伙伴“Web项目聚集地”,了解相关信息可以关注“Web项目聚集地”。

相关文章
|
2月前
|
SQL 缓存 Java
【吐血整理】MyBatis从入门到精通
本文介绍了 MyBatis 的使用指南,涵盖开发环境搭建、基础操作实例和进阶特性。首先,详细描述了 JDK 和 IDE 的安装及依赖引入,确保项目顺利运行。接着,通过创建用户表和实体类,演示了 CRUD 操作的全流程,包括查询、插入、更新和删除。最后,深入探讨了动态 SQL 和缓存机制等高级功能,帮助开发者提升数据库交互效率和代码灵活性。掌握这些内容,能显著提高 Java 编程中的数据库操作能力。
228 4
|
12天前
|
Java 关系型数据库 数据库连接
Javaweb之Mybatis入门程序的详细解析
本文详细介绍了一个MyBatis入门程序的创建过程,从环境准备、Maven项目创建、MyBatis配置、实体类和Mapper接口的定义,到工具类和测试类的编写。通过这个示例,读者可以了解MyBatis的基本使用方法,并在实际项目中应用这些知识。
48 11
|
2月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
145 29
|
4天前
|
Oracle 关系型数据库 Java
|
5天前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
4月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
4月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
86 1
持久层框架MyBatisPlus
|
4月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
5月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
1081 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
4月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
329 3