mybatis原理概述入门教程

介绍

MyBatis是一种持久层框架,它允许你使用普通SQL查询、存储过程和高级映射,以及高级映射的结果集和连接。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及缓存代码的需求。MyBatis可以与Spring框架集成。

MyBatis原理概述包括以下方面:

1.配置文件

2.映射文件

3.会话工厂

4.SqlSessionFactoryBuilder

5.SqlSessionFactory

6.SqlSession

详解

1.配置文件

在MyBatis中,我们需要定义配置文件:mybatis-config.xml ,这里定义了连接池、缓存、日志等全局配置。我们需要使用SqlSessionFactoryBuilder创建SqlSessionFactory,并且将mybatis-config.xml文件的输入流传递进去。

下面是一个mybatis-config.xml的简单示例:

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

2.映射文件

映射文件包含了一系列的映射关系,用于定义查询、更新以及其他操作语句。在映射文件中,我们要填写具体的SQL语句,并使用占位符等方式来绑定参数,相当于将数据库的操作写成了一份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.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

3.会话工厂

接下来,我们会使用SqlSessionFactory来创建SqlSession实例以及一些其他工厂方法,这些都是基于mybatis-config.xml文件的配置来调用的。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

SqlSession session = factory.openSession();

4.SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是用于获取SqlSessionFactory接口实例的工具类。

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

5.SqlSessionFactory

SqlSessionFactory是提供SqlSession的地方,是MyBatis的核心之一。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

6.SqlSession

SqlSession代表与数据库交互的会话,它会根据配置文件获取数据库连接,并将SQL语句执行结果返回给Java代码调用方。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

SqlSession session = factory.openSession();
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 1);
session.close();

示例

下面是在MyBatis中,插入一条数据的示例,首先编写一个Mapper的接口:

public interface UserMapper {
    void insert(User user);
}

然后编写一个插入数据的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="com.example.UserMapper">
    <insert id="insert" parameterType="com.example.User">
        INSERT INTO users
        (user_name, password)
        VALUES (#{userName}, #{password})
    </insert>
</mapper>

接下来,我们可以在Java代码中使用SqlSession来进行数据库的插入操作:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();

User user = new User();
user.setUserName("test");
user.setPassword("123456");
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insert(user);

session.commit();
session.close();

另外一个例子,查询用户信息:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();

UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
System.out.println(user.getUserName());

session.close();

总结

MyBatis是一个很强大的持久化框架,其灵活性、简易性和快速性使得它在许多项目中都被广泛使用。MyBatis的核心设计思想是SQL和Java代码之间的分离,成为了它的最大优势。在使用MyBatis的过程中,需要重点关注配置文件、映射文件、会话工厂、SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession等核心组件的作用和使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis原理概述入门教程 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • hibernate和mybatis对比分析

    文本格式要求: 标题使用#号表示,#号数量表示标题等级,一级标题一个#号,二级标题二个#号,以此类推 代码块使用三个反引号括起来,并标明代码语言 Hibernate和MyBatis对比分析 什么是Hibernate? Hibernate是一个基于Java的ORM框架,即对象关系映射框架。它可以将Java类映射到关系型数据库中的表,使得Java程序员可以使用面…

    Java 2023年5月19日
    00
  • java servlet过滤器使用示例

    请看下面的详细讲解: Java Servlet 过滤器使用示例 什么是过滤器? 过滤器是用于拦截请求或响应的一种特殊的 Java web 组件,它能够拦截某个请求,进行某些处理(例如:验证、统计等),然后将请求传递给下一个组件或返回响应给客户端。过滤器是一个独立的组件,它可以被任意 web 应用程序重用。 过滤器的工作原理 过滤器在 Servlet 容器中扮…

    Java 2023年5月20日
    00
  • bootstrap制作jsp页面(根据值让table显示选中)

    下面是“bootstrap制作jsp页面(根据值让table显示选中)”的完整攻略。 1. 知识准备 在学习本攻略前,需要先了解以下知识: JSP Bootstrap jQuery 如果对以上知识不熟悉,请先进行学习。 2. 实现步骤 2.1 创建HTML基础页面 在JSP中使用Bootstrap需要引入Bootstrap的CSS和JS文件。因此,首先需要创…

    Java 2023年6月15日
    00
  • jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例

    针对这个问题,我们可以通过以下步骤来实现: 编写HTML结构 在HTML中,我们需要先定义选项卡的容器和其各自的内容块,然后通过一些特定的属性(例如id、class等)来标记它们,方便后续的JS代码操作。具体代码如下所示: <div id="tab-container"> <div class="tab-ite…

    Java 2023年6月15日
    00
  • Java中的Object类详细介绍

    Java中的Object类详细介绍 简介 在Java中,所有类都是Object类的直接或者间接子类。Object类是Java中的根类,它位于java.lang包中,几乎每个Java程序都会使用到Object类中的方法。Object类提供了通用的方法,这些方法可以被所有继承了Object类的类使用。 下面我们来详细了解一下Java中Object类的一些方法以及…

    Java 2023年5月26日
    00
  • 详解Maven命令大全

    下面我将详细讲解“详解Maven命令大全”的完整攻略。 一、Maven命令简介 Maven是一个用于Java项目的构建和管理工具。它利用POM(Project Object Model)来描述项目,可以管理项目的构建、输出、文档、报告以及依赖等。下面是Maven常用的一些命令。 1. mvn clean 清除Maven项目工程的目录,删除target目录下的…

    Java 2023年5月20日
    00
  • Maven多模块工程Module开发(图文教程)

    Maven多模块工程Module开发(图文教程)是一篇非常好的教程,它详细介绍了如何使用Maven进行多模块工程Module开发。下面是对该教程的完整攻略: 什么是多模块工程 多模块工程是一种由多个Maven项目组成的工程。每个子项目都独立的构建,然后这些子项目被一个父工程管理,父工程控制子项目的构建次序和构建参数。多模块工程是一种组织代码的方式,适合大型项…

    Java 2023年5月19日
    00
  • SpringBoot实现线程池

    下面是SpringBoot实现线程池的完整攻略: 1. 什么是线程池 线程池是一种多线程处理的实现方式,简单来说就是在程序启动时提前创建好一定数量的线程,在需要处理多任务时就从线程池中调用空闲线程执行,任务执行完成后又返回线程池。这样避免了频繁的创建和销毁线程的开销,提高了程序执行效率。 2. SpringBoot实现线程池 Spring Boot中提供了T…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部