Mybatis精讲(一)---环境配置及架构梳理

目录

  • 简介
  • ORM模型
    • Hibernate
    • Ibatis
  • 环境搭建
    • jar
    • 配置
      • xml方式配置
      • 代码方式配置
      • 两种方式对比
  • Mybatis结构
  • 源码解读xml环境加载
  • 映射器解读
  • Ibatis
  • # 加入战队
    • 微信公众号

此文已独家授权给【新华前后端开发】使用。其他平台使用联系作者后再使用

简介

在数据库方面我们最常用的应该JDBC、Hibernate和Mybatis。通过JDBC方式连接数据库,我们会发现工作量是相当的复杂。我们得处理一些琐碎的关闭。然后入参出参我们都得自己管理。基于次产生了ORM(Object Relational Mapping)模型。

ORM模型

  • 简单的说ORM模型就是数据库表和Java对象的映射模型。主要解决了数据库和Java对象的相互映射。我们可以操作实体对象进而操作数据库表。这样的好处是我们不需要太了解数据库。减轻了我们的学习代价。

Hibernate

  • 基于ORM模型很快我们的第二主角登场了。但是由于Hibernate配置比较复杂,且操作性能上不是很好。虽然大大的弱化了我们的sql但是因为性能低下很快就被淘汰了。

Ibatis

  • Mybatis的前身严格意义上说应该是Ibatis,后面我们都称之为Mybatis.为了解决Hibernate的不足,Mybatis产生了相对于Hibernate的全表映射Mybatis可以说是半自动映射的框架。因为他是实体和sql结合的一个框架。
  • Mybatis有SQL , 实体 , 映射规则三个主要对象主成。和Hibernate相比虽然多出了sql的编写,但是正是因为sql的编写使得Mybatis变得很方便。Hibernate因为不用sql,所以他无法调用存储过程这些数据库方法。但是Mybatis不一样,Mybatis可以调用sql中的存储过程。

环境搭建

jar


<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.0</version>
</dependency>

配置

  • 在上面的图示中我们可以发现,Mybatis中提供的注解或者是接口的方式来操作数据库的。所以这里我们准备一个接口。与接口对应的是xml文件。两者组成了Mybatis中的一个组件。

package com.github.zxhtom.mapper;
import com.github.zxhtom.model.Student;
import java.util.List;
public interface StudentMapper {
    /**
     * 获取学生列表
     * @return
     */
    public List<Student> getStudents();
    /**
     * 通过id获取学生信息
     * @param id
     * @return
     */
    public Student getStudentByStuId(String id);
}
  • 与接口对应的是xml,里面记录了真是的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="com.github.zxhtom.mapper.StudentMapper">

    <select id="getStudents" resultType="com.github.zxhtom.model.Student">
        select * from student
    </select>
    <select id="getStudentByStuId" resultType="com.github.zxhtom.model.Student">
        select * from student where id=#{id}
    </select>
</mapper>

xml方式配置

  • 有了上面的接口和xml,下面我们开始配置我们的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>
    <!--引入外部配置文件-->
    <properties resource="config.properties"></properties>
    <!--定义别名-->
    <typeAliases>
        <package name=""/>
    </typeAliases>

    <!--定义数据库信息,默认使用development数据库构建环境-->
    <environments default="development">
        <environment id="development">
            <!--jdbc事物管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据库连接信息-->
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}"/>
                <property name="url" value="${database.url}"/>
                <property name="username" value="${database.username}"/>
                <property name="password" value="${database.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/github/zxhtom/mapper/StudentMapper.xml"></mapper>
    </mappers>

</configuration>
  • 然后我们就可以加载这个xml环境配置,构建我们的sqlsession.

//获取mybatis-config.xml位置
InputStream inputStream = Resources.getResourceAsStream(Constant.MYBATIS);
//加载mybatis-config,并创建sqlsessionfactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建sqlsession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("id", 1);
//执行select语句,将resultSet映射成对象并返回
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = studentMapper.getStudents();
studentPrint(students);

代码方式配置

  • 官方提供了另外一种Java对象的方式来配置环境。这种配置我们控制的力度更加细腻,但是导致的问题是我们的一些配置将会硬编码在代码里。我们这里通过Properties文件将硬编码的东西挪出去。

Map<Object, Object> properties = PropertiesUtil.getProperties("config.properties");
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver(properties.get("database.driver").toString());
dataSource.setUrl(properties.get("database.url").toString());
dataSource.setUsername(properties.get("database.username").toString());
dataSource.setPassword(properties.get("database.password").toString());
//构建数据库事物方式
TransactionFactory transactionFactory = new JdbcTransactionFactory();
//创建数据库运行环境
Environment environment = new Environment("development",transactionFactory,dataSource);
//构建Configure对象
Configuration configuration = new Configuration(environment);
//注册别名
configuration.getTypeAliasRegistry().registerAlias("stu", Student.class);
//加入一个映射器
configuration.addMapper(StudentMapper.class);
//使用sqlsessionfactoryBuilder构建sqlsessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = studentMapper.getStudents();
studentPrint(students);

两种方式对比

  • 上面我强调了我们的StudentMapper.xml和StudentMapper.java要同名而且在同一位置上。这是为什么呢。因为在Mybatis源码中默认会读取Java对象同目录下的同名的xml文件作为sql配置文件。
  • 但是后期我们项目的展开Java和xml会越来越多,放在一起的话很乱。作为一个框架不会这么局限的。在xml配置环境方式中我们是通过Mappers-->Mapper标签来注入我们的Mapper.xml的。这里的xml路径并没有要求在同一个目录。我们这里可以随意的改。上面的那些限制是在Java代码搭建环境的方式中。因为在Java代码方式中我们只是通过java对象注册mapper接口的。在这种方式下默认就会加载同目录下的同名xml

Mybatis结构

  • 学习的过程就是认知的过程。接下来我们来认识下Mybnatis的核心组件吧。
  • SqlSessionFactoryBuilder : 根据xml(mybatis-config.xml)或者Java代码(代码方式)来生成SqlSessionFactory
  • SqlSessionFactory : 构建SqlSession
  • SqlSession : 既可以发送sql执行并返回结果,也可以获取Mapper接口
  • SQL Mapper : Mybatis独有的组件。有Java接口和xml文件构成的一个整体。负责将xml中的sql进行解析然后传递给数据库并获取结果

源码解读xml环境加载

  • 因为范畴基础课程,这里对源码的跟踪点到为止(再深我也不会)。
  • 在解析mybatis-config.xml标签这一块是重点。这一块会专门介绍各个标签解析及作用。文章留言或点赞让我们看到你们对这一块的喜爱。留言点赞多的会尽快出这一篇。

映射器解读

  • 上面已经说了映射器是有Java+xml组合而成的Mybatis组件。我们上面的案例也展示了两者的编写。Java实际就是一个接口定义好方法。在xml中对应的标签带上我们的sql就行了。


  • 圈出来的这条sql中我们会发现和我们平时的sql不一样。#{id}是Mybatis为我们提供的入参。在提交给数据库的时候会将真正的sql填充过来。这里还有一个注意点我们写的是select * 。因为数据库字段和我们实体属性是一样的。所以Mybatis就会自动把相同字段内容映射给实体了。这就实现了自动映射了。
  • 之前说了和Hibernate相比,Mybatis属于半自动。如果我们的实体和数据库字段不一样了(注意驼峰和平峰在数据库通过设置可以认为是一样的。Mybatis也提供功能可以映射的。这里我们认为是一样的),我们可以通过resultMap来实现数据库字段和实体字段的映射。这就是我们所谓的半自动映射

Ibatis

  • 虽然我们用Mybatis。但是Ibatis之前的方法还是保留下来的。这里提一下。但是不推荐使用的方式执行sql

加入战队

# 加入战队

微信公众号

原文地址:https://www.cnblogs.com/zhangxinhua/p/11847037.html

时间: 2024-10-31 01:22:40

Mybatis精讲(一)---环境配置及架构梳理的相关文章

基于Maven的Spring/SpringMVC/Mybatis/Mybatis-plus/Apache-Shiro基础环境配置

记录一下,以便不时之需. pom.xml 1 <properties> 2 <servlet-api.version>2.5</servlet-api.version> 3 <spring.version>4.2.5.RELEASE</spring.version> 4 <aspectjweaver.version>1.8.9</aspectjweaver.version> 5 6 <mybatis.version&

mybatis精讲(五)--映射器组件

目录 前言 标签 select insert|update|delete 参数 resultMap cache 自定义缓存 # 加入战队 微信公众号 前言 映射器之前我们已经提到了,是mybatis特有的组件: java+xml组合的方式.对于Java类和xml的编写也很简单.值得注意的是需要将Java编写的mapper注册到mybatis中来.之前的注册的方式通过xml.到后续通过spirng来管理通过@Mapper就很方便了. 标签 Java实现的接口Mapper很简单,就是已接口的形式暴露

34J-3_4 corosync集群配置精讲

配置环境 NFS: 192.168.1.121 CentOS6.7 Node1:192.168.1.131 CentOS7.2 Node2:192.168.1.132 CentOS7.2 Node3:192.168.1.133 CentOS7.2 配置前准备 [[email protected] ~]# cat /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1

Webpack + React全栈工程架构项目实战精讲

详情请交流  QQ  709639943 01.Webpack + React全栈工程架构项目实战精讲 02.跨平台混编框架 MUI 仿豆瓣电影 APP 03.Node.js入门到企业Web开发中的应用 04.Python3 全网最热的Python3入门+进阶 比自学更快上手实际开发 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.全面系统讲解CSS 工作应用+面试一步搞定 09.Java Spring

Tomcat环境配置部署测试环境及架构

Tomcat环境配置已经在前面介绍过了,这边就为童鞋们介绍下对于Tomcat的架构是怎么样的! Tomcat的架构包含(bin.conf.lib.logs.temp.wenapps.work)等文件夹 下面就来分别介绍下对应的文件是做什么用的(常用的5个) BIN目录:这个目录文件里的主要作用是控制Tomcat的启动与关闭(使用catalina或者startup脚本),以及启动关闭有关的安全管理(uli)的等 常用命令: 启动Tomcat:   ./startup.sh 关闭Tomcat:  

idea spring+springmvc+mybatis环境配置整合详解

idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2.查看idea中是否安装Maven插件: 2.1:File --> Settings --> Plugins 2.2:如下图所示的步骤进行操作(注:安装完插件,idea会重新启动) 3.idea创建Maven项目的步骤 4.搭建目录结构 下图就是我搭建Maven项目之后,添加对应的目录和文件 5.p

springboot学习入门简易版八---springboot2.0多环境配置、整合mybatis mysql8+(19-20)

2.11 SpringBoot多环境配置(19)  application.properties中配置 Spring.profiles.active=prd 配置环境: Application-dev.properties 开发环境 Application-test.properties 测试环境 Application-uat.properties 用户测试环境 Application-prd.properties 生产环境 2.12 SpringBoot整合mybatis(20) 注意:使用

x64汇编第一讲,Vs系列配置x64环境与x86环境

目录 x64汇编环境配置 一丶x64环境配置 1.1 VS系列编译器配置X64Asm开发环境. 二丶Vs配置X86汇编环境. x64汇编环境配置 一丶x64环境配置 现在windows系统都是64位了,那么对应的汇编也就是说已经升级到64位了. 一直没有时间写博客将64位汇编写出来.所以现在细心整理一下. 首先我们先配置好开发环境,然后我们才能进行开发. 1.1 VS系列编译器配置X64Asm开发环境. 1.1新建一个项目.项目里面添加一个.asm后缀的文件. 当然后缀.asm文件没有,所以我们

RocketMQ核心技术精讲与高并发抗压实战

第1章 课程介绍为什么掌握RocketMQ消息中间件技术对于跳槽,晋级如此重要?学习RocketMQ技术,为什么首选这门课程?电商平台双11高并发场景下是如何抗压的?MQ部分的落地是如何做的?这章讲重点为你解答这些疑惑 1-1 课前必读(不看会错过一个亿) 1-2 课程导学 试看第2章 RocketMQ初探门径本章主要带着小伙伴一起了解Apache RocketMQ 顶级开源消息中间件的整体介绍.概念模型与源码包编译安装部署,控制台使用.让小伙伴们对RocketMQ有一个初步的认识! 2-1 本