什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis 可以通过简单的 XML 或注解来

配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

官方文档地址:

https://mybatis.org/mybatis-3/zh/index.html

环境所需的组成部分

MySQL 5.0 +

JDK 1.8 +

IDEA 2018 +

Maven 3.0 +

总而言之:越新越好

快速入门 Quickstart:

用IDEA创建一个使用Maven构建的Mybatis学习工程

填好工程名称

为了解释多个要点,我们把主工程的目录删除,建立多模块结构

右键工程,新建

填写模块名称

新建的项目不会自动分配约定目录,这里我们需要手动设置

打开ProjectStructure

蓝色表示我们的源码目录

绿色表示我们的测试目录

带有黄色堆叠块的目录表示是资源存放目录

根据第一次新建工程的目录结构来看

我们只需要把java目录 和 test的Java目录更改即可

点选目录 再点选所要约定的目录种类即可

这是另一种实现的方式

依赖导入 Dependency Import

因为我们使用的是父子多模块模式

依赖直接导入在父Pom下即可

(Mybatis)pom.xml

    <dependencies>
<!-- Mybatis 组件 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency> <!-- JDBC 驱动-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency> <!-- lombok -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency> <!-- Junit 单元测试 -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency> </dependencies>

创建数据库,制作模拟数据

From SQLyog

或者SQL指令

DROP DATABASE IF EXISTS myabtis;
CREATE DATABASE IF NOT EXISTS mybatis;

创建user表

或者SQL指令

CREATE TABLE user(
id int(20) primary key,
name varchar(30) default null,
password varchar default null
)engine=innodb default charset=utf8;

插入数据

INSERT INTO user(`user_id`,`user_name`,`user_password`) values
(1,"张三","123456"),
(2,"李四","234567"),
(3,"王五","345678"),
(4,"钱六","456789");

创建Mybatis核心配置文件

配置信息获取位置:https://mybatis.org/mybatis-3/zh/getting-started.html

XML 配置文件中包含了对 MyBatis 系统的核心设置,

包括获取数据库连接实例的数据源(DataSource)

以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的示例:

src\main\resources\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="${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>

当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。

注意 XML 头部的声明,它用来验证 XML 文档的正确性。

environment 元素体中包含了事务管理和连接池的配置。

mappers 元素则包含了一组映射器(mapper),

这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

对配置信息的注释解释:

<?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> <!-- Mybatis多环境配置 default="development"表示默认使用的1个环境 -->
<environments default="development"> <!-- default 环境 -->
<environment id="development"> <!-- 事务管理 默认使用JDBC -->
<transactionManager type="JDBC"/> <!-- 数据源 ,也就是我们所学的连接池技术 -->
<dataSource type="POOLED"> <!-- 不用我说是了把,老4样了 --> <!-- 这是jdbc8.0+ 的版本驱动,老版本5.0+ 是com.mysql.jdbc.Driver -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!-- 本机连接可以不用写 localhost:3306 -->
<!-- 8.0+的驱动访问数据库必须声明时区参数 ,5.0+不需要 直接就是 jdbc:mysql:///mybatis -->
<!-- 时区还可以设置为 -->
<!-- jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&useSSL=true&amp;serverTimezone=GMT&useUnicode=true -->
<property name="url" value="jdbc:mysql:///mybatis?serverTimezone=GMT"/> <!-- 用户&密码 -->
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment> <!-- 我们复制粘贴,可以使用第二套环境 -->
<environment id="development2">
<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> <!-- 我们需要绑定的Dao,按Mybatis的话来说,就是Mapper映射器 -->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers> </configuration>

我们可以使用IDEA先连接数据库

数据库的使用

https://www.cnblogs.com/mindzone/p/12718287.html

确认可用之后,开始编写MybatisUtil工具类

从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。

SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。

而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,

建议使用类路径下的资源文件进行配置。

但也可以使用任意的输入流(InputStream)实例,

比如用文件路径字符串或 file:// URL 构造的输入流。

MyBatis 包含一个名叫 Resources 的工具类,

它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

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

src\main\java\cn\dai\util\MybatisUtil.java

public class MybatisUtil {

    private static org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory;

    static {

        try{
// 核心配置文件名称
String config = "mybatis-config.xml"; // 读取核心配置 加载进内存为读取流对象
java.io.InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(config); // 通过工场建造者获取了配置流对象,读取配置信息后,生成会话工厂实例
sqlSessionFactory = new org.apache.ibatis.session.SqlSessionFactoryBuilder().build(inputStream); } catch (Exception exception){
exception.printStackTrace();
}
} // 获取会话实例即可
public static org.apache.ibatis.session.SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}

编写对应的实体类,用lombok省略相关方法

src\main\java\cn\dai\pojo\User.java

package cn.dai.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; /**
* @author ArkD42
* @file Mybatis
* @create 2020 - 05 - 03 - 15:58
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
// 最好和数据表的字段同名
private Integer user_id;
private String user_name;
private String user_password;
}

声明我们的DAO接口,应该说映射接口

只写一个方法即可

src\main\java\cn\dai\mapper\UserMapper.java

package cn.dai.mapper;

import cn.dai.pojo.User;

import java.util.List;

/**
* @author ArkD42
* @file Mybatis
* @create 2020 - 05 - 03 - 16:00
*/
public interface UserMapper {
List<User> getUserList();
}

从最经典的XML配置开始,这里我们不再写实现类了,

而是写Mapper接口的配置文件

src\main\java\cn\dai\mapper\UserMapper.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接口名称-->
<mapper namespace="cn.dai.mapper.UserMapper"> <!-- 我们的SQL语句使用这种标签来实现 -->
<!-- id 是我们的Mapper接口中的 方法名称 -->
<!-- resultType 表示查询的结果类型,因为是List 这里我们直接填写泛型的元素类型就好了 -->
<select id="getUserList" resultType="cn.dai.pojo.User">
/* 这里填写我们的SQL语句 */
SELECT * FROM `user`;
</select>
</mapper>

回到mybatis-conifg.xml 核心配置文件,注册我们的映射器文件

    <!-- 所有的映射器都需要被注册到!!!-->
<!-- 我们需要绑定的Dao,按Mybatis的话来说,就是Mapper映射器 -->
<mappers>
<mapper resource="cn/dai/mapper/UserMapper.xml"/>
</mappers>

测试类

src\test\java\Quickstart.java

import cn.dai.mapper.UserMapper;
import cn.dai.pojo.User;
import cn.dai.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.List; /**
* @author ArkD42
* @file Mybatis
* @create 2020 - 05 - 03 - 16:10
*/
public class Quickstart { @Test
public void quickstartMybatis(){ // 获取会话对象
SqlSession sqlSession = MybatisUtil.getSqlSession(); // 获得映射实现实例
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 调用接口方法
List<User> userList = mapper.getUserList(); for (User user : userList) {
System.out.println(user);
} // 释放资源
sqlSession.close();
}
}

结果:


常见的错误总结:

1、Maven依赖问题

  这个可能是IDEA版本问题,建议直接下载最新IDEA版本使用

  2017、2018、都可能会出现,然后是Maven版本不一样的问题,建议最新

2、核心配置文件的问题

  如果在配置中不小心写错了标签,尽管IDEA会自动提示,

  但是你刚刚上手,根本不会注意这个问题,异常提示会给出准确的错误行,只要修改即可

3、映射器未注册异常

  配置完接口的Mapper就开始跑了,你在想屁吃?

4、资源过滤问题

  刚写这篇快速入门都没有这个错误,

  早上起来测试修改的工具类发生的报错

  一看是UserMapper.xml找不到,然后我们可以去看看产出的实际类目录有没有

  如果没有就说明Maven把配置文件过滤了,那就要设置Maven的build目录过滤了

在父pom.xml中设置此配置即可

两个过滤标签都设置false让UserMapper.xml可以设置中文注释,否则报错不允许

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource> <resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

时区设置的补充

<!-- 时区还可以设置为 serverTimezone=Asia/Shanghai  serverTimezone=GMT -->

【Mybatis】01 概述 & 快速入门Part1的更多相关文章

  1. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  2. MyBatis 框架之快速入门程序

    一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ...

  3. 01.Hibernate快速入门

    第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...

  4. MyBatis 01 概述

    官网 http://www.mybatis.org/mybatis-3/zh/index.html GitHub https://github.com/mybatis/mybatis-3 简介 MyB ...

  5. 01 HTML快速入门

    HTML CSS JS (网络三剑客) 上网就是下载网页 浏览器 就是一个解释器 CS模式--------client serverbs模式--------browser server HTML是什么 ...

  6. 01.SpringMVC快速入门

    1.导入jar包 2.在web.xml中配置前端控制器 <!-- spring前端控制器 --> <servlet> <servlet-name>springmvc ...

  7. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  8. 持久层之 MyBatis: 第一篇:快速入门

    MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...

  9. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

  10. 快速入门系列--MVC--07与HTML5移动开发的结合

    现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...

随机推荐

  1. Vue 3与ESLint、Prettier:构建规范化的前端开发环境

    title: Vue 3与ESLint.Prettier:构建规范化的前端开发环境 date: 2024/6/11 updated: 2024/6/11 publisher: cmdragon exc ...

  2. 中国电信登录RSA算法+分析图文

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 中国电信登录RSA算法+分析图文 日期:2016-9-30 ...

  3. ssh_exchange_identification: Connection closed by remote host 错误解决方案

    问题 今天登陆服务器时候,ssh 后返回 ssh_exchange_identification: Connection closed by remote host 错误,重试了几次,会有一定概率失败 ...

  4. MYSQL中怎么查询LONGBLOB类型数据的大小

    在MySQL中,LONGBLOB 是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据.但是,LONGBLOB 数据类型本身并不直接存储数据的大小(长度).它存储的是二进制数据的实际内容. ...

  5. vc++6.0设置字体

    vc++6.0设置字体 如上图, 在注册表上找到这个位置. 自已设置FontFace和FontSize即可. 计算机\HKEY_CURRENT_USER\Software\Microsoft\Devs ...

  6. FFMpeg 中的数据结构

    FFMpeg 中比较重要的函数以及数据结构如下: 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecC ...

  7. 如何查看docker容器的volume挂载情况

    准备在docker容器当中编写个日常维护的脚本,但容器里连yum和vim命令都没有,所以就想到通过容器映射在本机的volume里编写脚本这样在容器中不就可以直接用了吗,那么在这之前你首先得知道dock ...

  8. P7687 题解

    考场上数组开大了直接 MLE 了,气. 考虑把 A,B 两种服务分开算,一个边双连通分量内的点如过有一个有服务,那么整个联通分量就都有服务. 然后按边双联通分量缩点后原图变成树,一条边是关键路线当且仅 ...

  9. Redis缓存满了,如何存放数据?缓存淘汰策略

    我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis会怎么处 ...

  10. SpringBoot 整合Activiti 7.X 从入门到精通

    简介 Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员.开发人员和系统管理员.其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎.它是开源的,并根据 A ...