首页 > 编程语言 >第一个Mybatis程序示例 Mybatis简介(一)

第一个Mybatis程序示例 Mybatis简介(一)

时间:2022-12-29 15:06:42浏览次数:55  
标签:mapper SqlSessionFactory 示例 简介 mybatis SQL Mybatis id

一步一步搭建Mybatis的使用示例,项目中可能只是编写接口与XML映射文件,本文根据官方文档从底层描述一个完整示例,并对Mybatis进行了一个简单的介绍,作为入门。

在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架

MyBatis由iBatis演化而来

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。

是一个基于SQL映射支持Java和·NET的持久层框架。

 

MyBatis是一个优秀的持久层框架,对JDBC操作数据库进行了封装,封装后的Mybatis使应用程序开发者只需要关注SQL本身

完全不需要再次花精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码(最初的Mybatis环境搭建只需要立项之初配置即可)

  • 要求通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来
  • 并通过java对象和statement中的sql进行映射生成最终执行的sql语句
  • mybatis框架执行sql并将结果映射成java对象并返回。

项目环境搭建好之后我们需要做的就是通过XML或者注解将要执行的SQL配置起来,也就是仅仅关注SQL

 

中文版文档

​http://www.mybatis.org/mybatis-3/zh/index.html​

github地址

​https://github.com/mybatis/mybatis-3​

截止本文,最新版本为:mybatis-3.4.6

 

本文不涉及架构解析,首先演示了一个最简单的示例,然后以这个简单示例为基础,简单介绍了从外部看过去的Mybatis的呈现样子

帮助简单了解Mybatis

第一个Mybatis程序

1.新建项目

新建一个Java 项目

我取名为mybatis,并且新建了一个包 first

​​第一个Mybatis程序示例 Mybatis简介(一)_XML​​

2.包获取与导入

基础的两个包

mybatis 和 mysql-connector(因为要用MYSQL) ,可以从官方下载  

​https://dev.mysql.com/downloads/connector/j/ ​

​https://github.com/mybatis/mybatis-3/releases ​

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_02​​

3.数据库准备

本人已经有本地数据库,MYSQL,以student表为测试

CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '默认姓名' COMMENT '姓名',
`age` int(11) DEFAULT '1',
`sex` varchar(255) DEFAULT NULL,
`random` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_03​​

数据库信息为:

    String user = "root";

    String password = "123456";

    String url = "jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=utf-8";

4.配置文件设置

src下新建config,然后新建xml文件名为mybatis-config.xml

内容从官方文档中复制:  http://www.mybatis.org/mybatis-3/zh/getting-started.html 

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_04​​

如下图所示官方示例的配置XML

​​第一个Mybatis程序示例 Mybatis简介(一)_xml_05​​

5.SQL映射文件设置

src下新建mapper文件夹,创建xml文件名为myBatis.xml

内容从官方文档复制

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_06​​

 

​​第一个Mybatis程序示例 Mybatis简介(一)_xml_07​​

6.调整配置文件

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_08​​

主要任务就是将数据库链接信息设置准确,并且将SQL映射文件的位置设置准确

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_09​​

 

对于url的设置需要注意“&”符号,在xml的配置文件中 要用  &   代替&

这是XML的语法本身的问题与mybatis没关系

 

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_10​​

五个在XML文档中预定义好的实体:

&lt; < 小于号

&gt; > 大于号

&amp; & 和

&apos; ' 单引号

&quot; " 双引号

实体必须以符号"&"开头,以符号";"结尾

7.创建实体类Student

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_11​​

8.修改myMapper.xml文件

需要调整namespace 设置resultType类型,需要设置使用的sql

​​第一个Mybatis程序示例 Mybatis简介(一)_xml_12​​

9.测试

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_13​​

每一次的业务开发时,其实需要的仅仅是编写myMapper.xml文件,然后对其调用

环境配置等工作环境搭建之初就已经完成了

初识Mybatis

在第一个Mybatis程序示例中的代码几乎都是官方文档中的,根据官方的提示一步一步操作即可建立

 

不管是Mybatis还是JDBC还是其他,终归是需要连接数据库的,不管以何种形式,连接以后就是需要执行SQL,所以你还得准备好你想要执行的SQL

在Mybatis中,SQL以XML文件的形式设置 ,也就是上例中的myMapper.xml文件

所以在上例中的主配置文件mybatis-config.xml中我们配置了数据库的连接信息以及SQL XML文件的位置

每个基于Mybatis的应用都是以一个SqlSessionFactory的实例为中心的,这一部分核心的配置文件就是提供给SqlSessionFactory实例的。

 

既然是操作数据库,很重要的一部分自然是SQL语句

mapper文件的格式是什么?对于一个SQL到底是查询还是delete?返回类型是什么?如下图所示,我们的类型是first.Student,SQL的内容又是什么?

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_14​​

此处不深入,但是很显然,对于Mybatis mapper映射文件的编写是很重要的一部分学习内容

 

有了核心配置文件就可以构建SqlSessionFactory实例,通过SqlSessionFactory实例就可以获取到SqlSession对象

SqlSession是Mybatis最重要的构建之一,可以简单的认为Mybatis一系列的配置目的是生成类似 JDBC生成的Connection对象的SqlSession对象

有了这个“Connection”对象之后才能进一步与数据库进行交流

这个“Connection”对象就可以根据我们mapper xml配置文件中设置的标识符,比如上例中的selectStudent的全名,以及参数执行SQL

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_15​​

如上图所示,我们从头简单的理一下Mybatis的基本流程

需要两个重要信息:数据库配置以及mapper文件位置

通过这两个核心信息可以生成SqlSessionFactory,通过SqlSessionFactory就可以创建SqlSession

SqlSession就可以根据名称标识符识别需要执行哪个文件里面的哪个SQL,比如上面就是执行mapper/myMapper.xml文件中,标识符为selectStudent的那一条

而执行该SQL以及周边的信息,都在文件中指定了,比如SQL内容是什么?返回类型又是什么?

 

通过配置文件到SqlSessionFactory实例的创建,完成了宏观上Mybatis的配置,两个主要任务:

  • 要从哪个数据库进行操作?
  • 要操作的SQL在哪里?

通过SqlSession完成了具体一次执行的任务

  • 执行哪个SQL?通过层级的命名标识符定位
  • 执行SQL的细节信息有哪些?SQL内容,参数内容,返回类型等

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_16​​

 

比如现在的中国好声音,形式变化了

所有的参赛选手在等待大厅内坐等,所有的人的姓名和演唱曲目形成了歌单,导师点歌的形式选择选手表演。

这个过程很类似Mybatis的处理

 

所有的选手形成了一个等待集合,这就相当于是一系列的mapper.xml文件,每个选手都有一个名字,这就相当于是一个文件(一个文件名,或者说一个命名空间)

但是重名的有很多,当导师叫名字 xxx 的时候,其实是在说“本次参加中国好声音,等待大厅的xxx”,但是不说大家也都知道,说王伟的时候,肯定不会是你身边坐着那个同事

但是程序不知道,这个“本次参加中国好声音,等待大厅的xxx”就相当于上例中namespace="mapper.myMapper"

 

整个节目组,导师,时间,场地等这些环境信息因素构成了整个的节目核心,这些零散的数据就是配置项目

构成的整体就相当于一个运行的机器,这就相当于SqlSessionFactory 

他作为核心知道整个节目组所有的信息,导师的信息等等,学员以及学员表演曲目也呈现在了导师面前

 

当一个导师进行点歌时,就类似SqlSession执行一次数据库操作

导师通过姓名,也就是我们上面说的“一个隐含的命名空间”,进行点歌,选择选手进行表演

这就相当于从等候大厅定位了一个Mapper文件,而他表演的那个曲目就好像是mapper文件中的ID,因为你唱了《止战之殇》,别人也可以再唱一次。

而针对于歌曲自身的更多信息,自然要看你接下来的表演了,是不是改变了?变化了哪些内容等等,这都属于某一个id对应的mapper文件中的具体内容信息。

 

Mybatis核心为配置以及映射

  • 配置信息搭建了Mybatis应用框架
  • 映射设置了一次执行的所需信息

​​第一个Mybatis程序示例 Mybatis简介(一)_xml_17​​

Mybatis细化实现为核心的协调组装

核心信息包含了将要执行的目标数据库信息以及需要执行的SQL映射,有了这两部分信息如果是在Navicat等客户端的话就足够了,使用数据库信息连接,然后执行SQL

对于Mybatis也是足够了,不过代码中毕竟不是可以手动连接数据库,手动输入SQL,肉眼查看结果这么简单

所以还有很多的周边业务需要处理,比如配置文件如何表示?都有哪些属性需要配置?另外MyBatis是一个功能强大的工具,所以还提供了更多的细节调优参数以供设置

对于mapper文件的位置如何描述?

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_18​​

前面示例中使用了上面的形式,另外你也可以指定一个包,比如 下面的形式,那么这个包下面所有的xml都会被扫描,相当于你全部都罗列了出来

<mappers>
<package name="org.mybatis.builder"/>
</mappers>

对于映射如何表述?可以使用XML也还可以使用注解的形式

他们又有哪些语法?每种形式的利弊是什么?字段属性都有哪些?

参数如何设置? 返回结果又是如何设置呢?等等

尽管这一系列的实现都很复杂,但是,仍旧是围绕着核心信息来的

 

所以对于Mybatis的学习,最开始应该了解整体的处理过程,了解各块

然后就是深入学习配置文件以及映射的设置配置

最后就是了解源码的架构

如果还有精力,最好的文档就是源码了

 

附录:完整代码

数据库

CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '默认姓名' COMMENT '姓名',
`age` int(11) DEFAULT '1',
`sex` varchar(255) DEFAULT NULL,
`random` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

项目结构

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_19​​

mybatis-config.xml

<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/myMapper.xml"/>
</mappers>
</configuration>

myMapper.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="mapper.myMapper">
<select id="selectStudent" resultType="first.Student">
select * from student where id = #{id}
</select>
</mapper>

Student

package first;

public class Student {

private Long id;

private String name;

private Integer age;

private String sex;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Student{");
sb.append("id=").append(id);
sb.append(", name='").append(name).append('\'');
sb.append(", age=").append(age);
sb.append(", sex='").append(sex).append('\'');
sb.append('}');
return sb.toString();
}
}

测试代码

package first;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test {

public static void main(String[] args) throws Exception {

/*
* 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。
* SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
* 而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
* */
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/*
* 从 SqlSessionFactory 中获取 SqlSession
* */
SqlSession session = sqlSessionFactory.openSession();
try {
Student student = (Student) session.selectOne("mapper.myMapper.selectStudent", 2);
System.out.println(student);
} finally {
session.close();
}
}
}

接口应用

而对于SQL的执行更好的一种方式是使用接口,而不是直接通过字符串去定位需要执行的目标资源

借助于接口不是基于字符串常量的,就会更安全,而且使用接口逻辑概念更加清晰

 

在原有结构上增加一个接口和一个映射文件

​​第一个Mybatis程序示例 Mybatis简介(一)_SQL_20​​

 

MyMapper.java

package first;
public interface MyMapper {
Student selectStudent(Integer id);
}

myMapper2.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="first.MyMapper">
<select id="selectStudent" resultType="first.Student">
select * from student where id = #{id}
</select>
</mapper>

从下图可以看得出来接口与XML映射的数据对照关系,XML映射文件的namespace需要与接口的全限定名对应

接口的方法名对应XML映射的id

接口方法返回类型为XML映射的ResultMap(resultType)

接口方法的参数对应XML映射的入参

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_21​​

新增加了一个XML映射文件,需要将路径添加到配置中

​​第一个Mybatis程序示例 Mybatis简介(一)_XML_22​​

增加一个测试类

package first;

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test2 {

public static void main(String[] args) throws Exception {
/*
* 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。
* SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
* 而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
* */
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"development");

/*
* 从 SqlSessionFactory 中获取 SqlSession
* */
SqlSession session = sqlSessionFactory.openSession();
try {
MyMapper mapper = session.getMapper(MyMapper.class);
Student student = mapper.selectStudent(2);
System.out.println(student);
} finally {
session.close();
}
}

}

关键代码为

MyMapper mapper = session.getMapper(MyMapper.class);
Student student = mapper.selectStudent(2);



标签:mapper,SqlSessionFactory,示例,简介,mybatis,SQL,Mybatis,id
From: https://blog.51cto.com/u_15628606/5977587

相关文章

  • Web技术的发展 网络发展简介(三)
    即使你精通js,但是却不知道为什么有js的话,人生岂不是有点缺憾?天天开发web项目,却不了解点历史,是否也会有点失落?本文从web的最初发明的历史开始,对web的发展......
  • LF Professional及WINTERACTER产品简介
    LF专业版v7.9LFProfessionalv7.8将32/64位Rainier编译器与经典的Lahey/FujitsuLF95编译器相结合!Rainier完全符合Fortran95/90/77标准,并广泛支持Fortran2003......
  • 黄民烈简介
    姓名:黄民烈职称:副教授电子邮件:[email protected]个人主页:http://coai.cs.tsinghua.edu.cn/hml/教育背景工学学士(工程物理),清华大学,中国,2000;工学博士......
  • 6 HPA 控制器简介与实现和RBAC简介及账户授权
    一HPA控制器简介与实现1.1HPA介绍https://github.com/kubernetes-sigs/metrics-server简介计算公式当前cpu利用率除以阈值,在跟当前pod数量进行比较,看是否增加比如......
  • Django简介以及基本使用
    目录Django简介以及基本使用一、django简介1.web框架的本质是什么?2.python主流web框架有那些?3.web框架的推导过程二、基本使用1.运行django注意事项2.下载Django的终端命......
  • MybatisPlus实现按年份动态操作表数据
    MybatisPlus实现按年份动态操作表数据 在mp的官方网站上最近的一次更新可以看到,其提供了动态表名插件:https://baomidou.com/pages/2a45ff/#dynamictablenameinnerinterce......
  • C# 高级语法混合简单示例(接口、索引器)
    程序集如下  usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSyst......
  • .htaccess语法介绍和常规使用示例
    一、htaccess是什么?概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。Unix、Linux系统或者是任何版本的ApacheWeb服务器都是支持.htac......
  • MongoDB - 副本集简介
    简介在MongoDB中,副本集指的是一组MongoDB服务器实例掌管同一个数据集,实例可以在不同的机器上。其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数......
  • R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例|附代码数据
    全文下载链接:http://tecdat.cn/?p=21317最近我们被客户要求撰写关于DLNM的研究报告,包括一些图形和统计输出。本文提供了运行分布滞后非线性模型的示例,同时描述了预测变量......