MyBatis从入门到精通(1):MyBatis入门

article/2025/10/11 0:54:45

作为一个自学Java的自动化专业211大学本科生,在学习和实践过程中”趟了不少雷“,所以有志于建立一个适合同样有热情学习Java技术的参考“排雷手册”。

最近在读刘增辉老师所著的《MyBatis从入门到精通》一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正!

第1章  MyBatis入门

1.1  MyBatis简介

MyBatis是一款支持自定义SQL查询、存储过程和高级映射的持久层框架。消除了几乎所有JDBC代码和参数的手动设置以及结果集的检索。MyBatis可以使用XML或注解进行配置和映射。MyBatis通过将参数映射到配置的SQL形成最终执行的SQL语句,最后将执行的SQL的结果映射成Java对象返回。

与其他的ORM(对象关系映射)框架不同,MyBatis并没有将Java对象数据库表关联起来,而是将Java方法与SQL语句关联。

1.2  创建Maven项目

Maven是一个项目构建和管理工具。目前市面上很多陈旧的Java参考书还停留在讲如何使用Eclipse开发工具,不过据我观察IT培训班的视频都更新在使用IDEA。

因此我们要新建个Maven项目,使用IntelliJ IDEA 2018.3.6 x64新建Maven项目的过程如下:

+ Create New Project

注:JDK1.8u211 是需要用户安装并配置好环境变量,相关教程请参考其他博客的介绍。

 

我们新建完的Maven项目结构如下图所示:

默认生成的pom.xml文件其内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>cn.bjut.mybatis</groupId>
<artifactId>example</artifactId>
<version>0.1-SNAPSHOT</version></project>

 

以上是Maven项目的基本配置信息,我们还需要为它添加一些常用配置

首先,设置源代码编码方式为UTF-8,配置如下

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

接着,设置编译源代码的JDK版本,本人使用的是JDK 1.8,配置如下。

    <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

还需要在配置文件pom.xml中添加一些依赖才能使接下来的工作顺利进行。

这里要添加最重要的MyBatis依赖、接着还需要添加会用到的 JUnit、mysql、Log4j驱动的依赖。

注:各种依赖的version要和自己电脑安装的实际情况一致!

       可以通过 http://search.maven.org/ 来查找依赖坐标。

       MyBatis                                                                                                  下载地址:    https://mybatis3.github.io/downloads.html

       junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。下载地址:  https://www.mvnjar.com/junit/junit/4.12/detail.html

       mysql是一个数据库,Navicat是数据库可视化操作工具,两者需要先自行安装后再进行本实验流程。下载地址: https://www.mysql.com/downloads/

       log4j是一个一款开源的日志框架,在项目中,我们一般会结合slf4j和log4j一起使用。                 下载地址:   http://logging.apache.org/log4j/1.2/download.html

       slf4j是一个简单日记门面(simple logging Facade for java)可以为各种loging APIs提供一个简单统一的接口。  下载地址:    https://www.slf4j.org/download.html

      

       最终的pom.xml文件内容如下。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5 <modelVersion>4.0.0</modelVersion>
 6 
 7 <groupId>cn.bjut.mybatis</groupId>
 8 <artifactId>example</artifactId>
 9 <version>0.1-SNAPSHOT</version>
10 
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <java.version>1.8</java.version>
14     </properties>
15 
16     <build>
17         <plugins>
18             <plugin>
19                 <artifactId>maven-compiler-plugin</artifactId>
20                 <configuration>
21                     <source>${java.version}</source>
22                     <target>${java.version}</target>
23                 </configuration>
24             </plugin>
25         </plugins>
26     </build>
27 
28     <dependencies>
29         <dependency>
30             <groupId>junit</groupId>
31             <artifactId>junit</artifactId>
32             <version>4.12</version>
33             <scope>test</scope>
34         </dependency>
35         <dependency>
36             <groupId>org.mybatis</groupId>
37             <artifactId>mybatis</artifactId>
38             <version>3.3.0</version>
39         </dependency>
40         <dependency>
41             <groupId>mysql</groupId>
42             <artifactId>mysql-connector-java</artifactId>
43             <version>5.1.38</version>
44         </dependency>
45         <dependency>
46             <groupId>org.slf4j</groupId>
47             <artifactId>slf4j-api</artifactId>
48             <version>1.7.12</version>
49         </dependency>
50         <dependency>
51             <groupId>org.slf4j</groupId>
52             <artifactId>slf4j-log4j12</artifactId>
53             <version>1.7.12</version>
54         </dependency>
55         <dependency>
56             <groupId>log4j</groupId>
57             <artifactId>log4j</artifactId>
58             <version>1.2.17</version>
59         </dependency>
60     </dependencies>
61 
62 
63 </project>

当对Maven的配置进行修改后,还需要来(一些操作技巧)来更新外部依赖的jar包。 

完成上述步骤后,MyBatis的基本开发环境就已经准备好了。

1.3  简单配置让MyBatis跑起来

1.3.1  准备数据库

注:首先需要安装mysql软件,并且记下root管理员的密码。然后再安装Navicat这个有图形界面的MySQL客户端工具,此处命令行代码的录入建议用文本编辑器 Notepad++。

       SQL语句学习,推荐看 《MYSQL必知必会》。通过执行下面的SQL语句创建一个名为 mybatis的数据库,然后再创建一个名为country的并插入一些简单的数据。

CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- mysql语句单行注释使用 "-- " 注意,--后跟有一个空格use mybatis;-- 表头的字符串用` `括起来
CREATE TABLE `country`(
`id`  int NOT NULL AUTO_INCREMENT ,
`countryname` varchar(255) NULL  ,
`countrycode` varchar(255) NULL  ,
PRIMARY KEY  (`id`));-- 表的内容字符串用' '括起来,格式使用同MATLAB
insert country (`countryname`,`countrycode`)
values ('中国','CN'),('美国','US'),('俄罗斯','RU'),('英国','GB'),('法国','FR');

 

首先点击【连接】弹出窗体 确定->创建了一个名为‘MyBatis从入门到精通’的【连接】->右键单击选择【打开连接】->右键菜单选择【命令列界面】->输入上述SQL语句并回车得到结果如下:

我们检查一下 数据库mybatis 表 的内容如下图所示

 1.3.2  配置MyBatis

使用XML形式进行配置,首先在 src/main/resources下面创建 mybatis-config.xml配置文件。

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="logImpl" value="LOG4J"/></settings><typeAliases><package name="cn.bjut.example.model"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"><property name="" value=""/></transactionManager><dataSource type="UNPOOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis ?serverTimezone=GMT"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="cn/bjut/example/mapper/CountryMapper.xml"/></mappers>
</configuration>

 

  • <settings>中的logImpl属性配置 指定使用LOG4J输出日志。
  • <typeAliases>在MyBatis中需要频繁用到类的全限定名称,为了方便使用,我们配置了 cn.bjut.example.model包,这样后在使用类的时候不需要写包名的部分,只使用Country即可。
  • <environments>环境配置中主要配置了数据库连接,数据库的url为:     jdbc:mysql://localhost:3306/mybatis   使用的本机MySQL中的mybatis数据库。
      1. 如果使用本地数据库要改的格式:              jdbc:mysql://localhost:3306/mybatis
      2. com.mysql.jdbc.Driver 会报错应该改成:  com.mysql.cj.jdbc.Driver
      3. 按照上述改完之后报错显示没填写默认时区修正方法:    <property name="url" value="jdbc:mysql://localhost:3306/mybatis ?serverTimezone=GMT"/>
  • <mappers>中配置了一个 包含完整类路径的 CountryMapper.xml  ,这是一个MyBatis的SQL语句和映射配置文件。

 

1.3.3  创建实体类和Mapper.xml文件

 MyBatis是一个 结果映射框架 ,这里创建的实体类是一个数据值对象(Data Value Object)。在实际应用中,一个表一般会对应一个实体。

 根据MyBatis官方的习惯,一般用Mapper作为XML和接口类名的后缀。通常称XML为Mapper.xml文件,称接口为Mapper接口。

  • 在src/main/java 下创建一个基础的包 cn.bjut.example ,在这个包下面再创建model包。
  • 根据数据库表 country ,在model包下创建实体类Country ,代码如下。
 1 package tk.mybatis.simple.model;
 2 
 3 public class Country {
 4     private Long id;
 5     private String countryname;
 6     private String countrycode;
 7 
 8     public Long getId() {
 9         return id;
10     }
11 
12     public void setId(Long id) {
13         this.id = id;
14     }
15 
16     public String getCountryname() {
17         return countryname;
18     }
19 
20     public void setCountryname(String countryname) {
21         this.countryname = countryname;
22     }
23 
24     public String getCountrycode() {
25         return countrycode;
26     }
27 
28     public void setCountrycode(String countrycode) {
29         this.countrycode = countrycode;
30     }
31 
32 }

     在  src/main/resources  下面创建  cn/bjut/mybatis/example/mapper  目录,再在该目录下面创建 CountryMapper.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="tk.mybatis.simple.mapper.CountryMapper"><select id="selectAll" resultType="Country">select id,countryname,countrycode from country</select>
</mapper>

SQL定义在 CountryMapper.xml文件中,里面的配置作用如下。

  • <mapper>: XML的根元素,属性namespace定义了当前XML的命名空间。
  • <select>元素: 我们所定义的一个  SELECT查询。
  • id属性: 定义了当前SELECT查询的 唯一 一个id。
  • resultType: 定义了当前查询的返回值类型,此处就是指 实体类Country。

创建好实体和Mapper.xml后,接下来要有针对性地配置 Log4j ,让MyBatis在执行数据库操作时将有关信息输出到控制台。

 

1.3.4   配置Log4j以便查看MyBatis操作数据库的过程

 在 src/main/resources 中添加 log4j.properties配置文件,输入如下内容。

 1 #\u5168\u5C40\u914D\u7F6E
 2 log4j.rootLogger=ERROR, stdout
 3 
 4 #MyBatis \u65E5\u5FD7\u914D\u7F6E
 5 log4j.logger.cn.bjut.example.mapper=TRACE 6 
 7 #\u63A7\u5236\u53F0\u8F93\u51FA\u914D\u7F6E
 8 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 9 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
10 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在MyBatis的日志实现中,所谓的包名实际上是XML配置中 namespace 属性值的一部分。由于namespace属性值必须和接口全限定类名相同,因此才会真正对应到Java中的包。

MyBatis日志的 最低级别是 TRACE ,在这个日志级别下,会输出执行SQL过程中的详细信息,这个级别适合 开发时使用。

配置好Log4j,接下来就可以编写 测试代码让MyBatis跑起来了。

 

1.3.5  编写测试代码 让MyBatis跑起来

首先在  src/test/java  中创建  cn.bjut.example.mapper 包 ,然后创建  CountryMapperTest测试类 ,代码如下。

 

 1 package tk.mybatis.simple.mapper;
 2 
 3 import java.io.IOException;
 4 import java.io.Reader;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13 
14 import tk.mybatis.simple.model.Country;
15 
16 public class CountryMapperTest {
17     
18     private static SqlSessionFactory sqlSessionFactory;
19     
20     @BeforeClass
21     public static void init(){
22         try {
23             Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
24             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
25             reader.close();
26         } catch (IOException ignore) {
27             ignore.printStackTrace();
28         }
29     }
30     
31     @Test
32     public void testSelectAll(){
33         SqlSession sqlSession = sqlSessionFactory.openSession();
34         try {
35             List<Country> countryList = sqlSession.selectList("selectAll");
36             printCountryList(countryList);
37         } finally {
38             sqlSession.close();
39         }
40     }
41     
42     private void printCountryList(List<Country> countryList){
43         for(Country country : countryList){
44             System.out.printf("%-4d%4s%4s\n",country.getId(), country.getCountryname(), country.getCountrycode());
45         }
46     }
47 }
  •  通过 Resources 工具类 将mybatis-config,xml配置文件读入 Reader。
  •  再通过 SqlSessionFactoryBuilder 建造类使用Reader创建 SqlSessionFactory工厂对象。这个过程中会读取全部的Mapper.xml进行 具体 方法的解析。
  •  使用时通过 SqlSessionFactory工厂对象获取一个 SqlSession。
  •  通过SqlSession的 selectList 方法查找到  CountryMapper.xml中id='selectAll'的方法,执行SQL查询。
  •  MyBatis底层使用 JDBC执行SQL,获取查询结果集ResultSet后,根据 resultType的配置,将结果映射为Country类型的集合,返回查询结果。

这样就得到了最后的查询结果 countryList ,简单将结果输出到控制台。最后一定不要忘记关闭 SqlSession 。否则导致数据库连接数过多,造成系统崩溃。

 

 

 

1. Junit 入门使用教程    https://www.cnblogs.com/ysocean/p/6889906.html#_label2

2. log4j 日志框架使用    https://blog.csdn.net/king_kgh/article/details/80430002

3. slf4j学习小结        https://imshare.iteye.com/blog/772770

4. MyBatis从入门到精通     https://mybatis3.github.io/downloads.html

 

 

转载于:https://www.cnblogs.com/MarlonKang/p/11167550.html


http://chatgpt.dhexx.cn/article/LZfhlC4j.shtml

相关文章

给力!低代码开发平台广州流辰信息科技助您增辉创价值!

低代码平台开发公司流辰信息深耕行业多年&#xff0c;一直以市场为导向&#xff0c;凭借敏锐的市场洞察力砥砺前行、拼搏进取&#xff0c;提升研发创新能力&#xff0c;广州流辰信息科技与各新老客户朋友风雨同舟&#xff0c;携手共创宏伟新蓝图&#xff01; 一、熔铸前沿科技 …

汇聚数据库创新力量,加速企业数字化转型

2022年12月29日&#xff0c;以“汇聚数据库创新力量&#xff0c;加速企业数字化转型”为主题的openGauss Summit 2022在线上举行。会上&#xff0c;openGauss社区理事会理事长江大勇对外公布了最近社区及生态进展&#xff0c;并宣布推出资源池化架构&#xff0c;实现软硬融合&a…

【金猿人物展】龙盈智达首席数据科学家王彦博:量子科技为AI大数据创新发展注入新动能...

‍ 王彦博 本文由龙盈智达首席数据科学家王彦博撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 回顾2022年大数据行业发展&#xff0c;令人感触最深的是数字经济时代对“数据安全”和…

MyBatis从入门到精通(一):MyBatis入门

最近在读刘增辉老师所著的《MyBatis从入门到精通》一书&#xff0c;很有收获&#xff0c;于是将自己学习的过程以博客形式输出&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;如帮助到你&#xff0c;不胜荣幸&#xff01; 1. MyBatis简介 ​ 2001年&#xff0c;Clinton …

沈定刚,雷柏英,李超 | Cell Press Live:人工智能在医学影像中的应用

交叉学科 Interdisciplinary 医学影像是临床医疗诊断的重要依据之一。近些年来&#xff0c;随着信息技术的飞速发展&#xff0c;人工智能即AI也更加广泛地应用于医学影像的处理分析中&#xff0c;包括对图像的分割分类及预测等。AI提高了诊断的精准程度和效率&#xff0c;同时也…

汇纳科技张宏俊:加强布局AI大数据,为实体商业服务

数字经济是继农业经济、工业经济之后的主要经济形态,更是稳定经济,推动经济转型的最强劲动力之一。在今年两会政府工作报告中,数字经济的关注程度远比以往更高,首次以“单独成段”的方式进行表述,并重点明确了“深入实施创新驱动发展战略,巩固壮大实体经济根基”。 从中不…

【Java架构:基础技术】一篇文章搞掂:MyBatis

本文篇幅较长&#xff0c;建议合理利用右上角目录进行查看&#xff08;如果没有目录请刷新&#xff09;。 本文主要总结于刘增辉的《MyBatisc从入门到精通》一书&#xff0c;有兴趣的朋友可以自行研读 建议仔细研读官方文档&#xff1a; http://www.mybatis.org/mybatis-3/zh/ …

Oracle的minus使用

Oracle的minus使用 minus 连接两个结果集&#xff0c;最终生成一个结果集。 功能是&#xff1a;第二个结果集&#xff0c;不会出现在最终结果集中&#xff1b; 如果第一个结果集的内容&#xff0c;在第二个结果集之内有包含&#xff0c;则包含的部分在最终结果集被舍弃。 其实…

MySQL MINUS-差集 [猿教程]

https://yuanjiaoc.com/tutorial/article/10143 在本教程中&#xff0c;您将了解 SQL MINUS 运算符以及如何在 MySQL 中使用 join 模拟 MINUS。 请注意&#xff0c;MySQL 不支持 MINUS 运算符。本教程向您展示如何使用连接子句在 MySQL 中模拟 MINUS 运算符。 SQL MINUS 运算符…

oracle函数之 minus

“minus”直接翻译为中文是“减”的意思&#xff0c;在Oracle中也是用来做减法操作的 Oracle的minus是按列进行比较的&#xff0c;所以A能够minus B的前提条件是结果集A和结果集B需要有相同的列数&#xff0c;且相同列索引的列具有相同的数据类型。此外&#xff0c;Oracle会对m…

Sql server中intersect, minus的用法

Sql server中intersect, minus的用法 一&#xff0c;Intersect Intersect常用来选择两个表格中相关联的事物&#xff0c;它是对两个SQL语句所产生的结果作处理的.它的作用有点像and的用法&#xff0c;就是说所选择的这个值要存在于第一句和第二句才会被选择出&#xff0c;上面…

编译原理 C-Minus 语法分析(Flex / Bison)

C-Minus 源代码 语法分析 文章目录 C-Minus 源代码 语法分析一、实现目标二、实现过程1. 综述2. 实现功能介绍&#xff08;1&#xff09;检测词法错误&#xff08;2&#xff09;检测文法错误&#xff08;3&#xff09;生成语法分析树 3. 代码详解&#xff08;1&#xff09;synt…

编译原理 C-Minus 代码生成(Flex / Bison)

C-Minus 源代码 代码生成 文章目录 C-Minus 源代码 代码生成一、实现目标二、实现过程&#xff08;一&#xff09;内容综述&#xff08;二&#xff09;代码分析1. 中间代码的表示2. 中间代码生成与优化3. 目标代码生成 三、结果分析1. 测试内容一2. 测试内容二 四、源代码放送s…

minus

minus指令是运用在两个SQL语句上&#xff0c;它先找出第一个SQL语句所产生的结果&#xff0c;然后看这些有没有在第二个SQL语句的结果中。如果有的话&#xff0c;那这笔资料就被去除&#xff0c;而不会在最后的结果中出现。如果第二个SQL语句所产生的结果并没有存在于第一个SQL…

MySql中的minus用法

MySql中的minus用法 在DB2和Oracle中&#xff0c;我们经常会用到minus这个函数&#xff0c;但是MySql中是没有minus的&#xff0c;那么要怎么办呢&#xff1f; 下面以一个小栗子来说下&#xff1a; 用例基础 表信息 mysql> show tables; ---------------- | Tables_in_tes…

MINUS 使用

1. sql minus运算符简介 除了union&#xff0c;union all和intersect运算符之外&#xff0c;sql还为我们提供了minus运算符&#xff0c;用于从另一个结果集中减去一个结果集。 以下是minus运算符的语法。 selectid froma minus selectid fromb;要使用minus运算符&#xff…

流形学习的解释

作者&#xff1a;知乎用户 链接&#xff1a;https://www.zhihu.com/question/24015486/answer/194284643 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 最近发现我的这篇回答被人洗稿&#xff08;未署名&#xff…

Log-Euclidean metric on Riemannian manifold 黎曼流形上的Log-Euclidean测度

Log-Euclidean测度是黎曼流形上一种常用的测度&#xff0c;Log-Euclidean测度形式简单&#xff0c;方便计算&#xff0c;因此在基于黎曼流形的算法中被广泛应用。 1.什么是测度 在黎曼流形上&#xff0c;要衡量两个点之间的距离&#xff0c;不能像欧式空间那样直接用范数计算&…

阅读笔记7:多类运动想象脑电信号识别及其在BCI中的应用研究

文章目录 论文信息笔记1.摘要2.绪论2.1 EEG信号处理方法国内外研究进展2.2存在的问题 3.脑电信号采集及预处理方法3.1 共平均参考&#xff08;CAR&#xff09;3.2Butterworth 带通滤波器 4.运动想象EEG信号特征提取4.1 基于 AF-CSP 方法的特征提取研究4.1.1 经验模态分解4.1.2共…