【Mybatis】01 概述 & 快速入门Part1
什么是 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&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的更多相关文章
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- MyBatis 框架之快速入门程序
一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ...
- 01.Hibernate快速入门
第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...
- MyBatis 01 概述
官网 http://www.mybatis.org/mybatis-3/zh/index.html GitHub https://github.com/mybatis/mybatis-3 简介 MyB ...
- 01 HTML快速入门
HTML CSS JS (网络三剑客) 上网就是下载网页 浏览器 就是一个解释器 CS模式--------client serverbs模式--------browser server HTML是什么 ...
- 01.SpringMVC快速入门
1.导入jar包 2.在web.xml中配置前端控制器 <!-- spring前端控制器 --> <servlet> <servlet-name>springmvc ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
- 持久层之 MyBatis: 第一篇:快速入门
MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...
- 快速入门系列--MVC--02路由
现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...
- 快速入门系列--MVC--07与HTML5移动开发的结合
现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...
随机推荐
- NSSCTF——crypto
[鹤城杯 2021]easy_crypto [强网拟态 2021]拟态签到题 [SWPUCTF 2021 新生赛]crypto8[SWPUCTF 2021 新生赛]crypto7[SWPUCTF 20 ...
- 使用nginx 中转 https tls1.3 请求
对方服务器使用的是TLS1.3,并关闭了一些算法套件,使得.NET FRAMEWORK 4.8 ..NET 5 都无法连接. 只能用中转方案解决. nginx配置: #user nobody; wor ...
- 论文阅读 《Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis》
背景 在我们内部产品中,一直有关于网络性能数据监控需求,我们之前是直接使用 ping 命令收集结果,每台服务器去 ping (N-1) 台,也就是 N^2 的复杂度,稳定性和性能都存在一些问题,最近打 ...
- Winform绘制圆形图
1 private void Form_Load(object sender, EventArgs e) 2 { 3 PictureBox pic = new PictureBox(); 4 pic. ...
- linux日志查询less及堡垒机查询日志方法
方法1tail -f orderFile.log | grep "关键字" postman接口请求的时候,关注控制台对关键字过滤的打印输出. 方法2less 文件名称/ 关键字n ...
- 【Playwright+Python】系列教程(一)环境搭建及脚本录制
前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章. 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议收藏和转发! ...
- Yapi部署到kubernetes(k8s)--Azure AKS
背景 找来找去都没找到简单方便的部署yapi到k8s的教程,就自己写了个: 本教程部署的版本是: 1.10.2 部署步骤 克隆仓库: git clone https://github.com/gebi ...
- Zabbix---数据库表分区
1) 查询zabbix数据库中各种表存储的大小和行数: mysql> select table_name, (data_length + index_length)/1024/1024 as t ...
- ClickHouse介绍(三)MergeTree系列表引擎
MergeTree系列表引擎 ClickHouse中最核心的引擎当属MergeTree系列引擎,其中基础表引擎为MergeTree,常用的表引擎还有ReplacingMergeTree.Summing ...
- P8571 题解
既然字符串的总长一定,不妨对于每个询问中的 \(s_k\) 的长度根号分治,假定分治阈值为 \(B\).下面令 \(L\) 为所有串长度总和. 对于长度大于 \(B\) 的字符串,这样的不同字符串至多 ...