MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统_idea mybatis
MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
- 一、什么是MyBatis
-
- 1. MyBatis 是什么?
- 2. JDBC 的三大痛点
- 3. MyBatis 的核心优势
-
- 1. 告别重复代码,专注核心逻辑
- 2. 灵活控制 SQL,适应各种场景
- 3. 自动映射数据,减少人为错误
- 二、搭建你的第一个MyBatis系统
-
- 步骤一:配置并添加Maven文件
- 步骤二:新建一个MyBatis项目
- 步骤三:导入MyBatis的包
- 步骤四:创建实体类
- 步骤五:创建Mapper接口
- 步骤六:创建MyBatis配置文件
- 步骤七:创建SQL映射文件
- 步骤八:编写测试代码
在之前的学习中,我们已经掌握了Java Web开发的基础知识:
- 通过Servlet和JSP实现了动态Web页面的开发
- 利用HTML/CSS/JavaScript搭建了美观的前端界面
- 理解了MVC架构模式,学会了分层开发
现在,我们的Java Web开发框架已经初具雏形。
- 但在实际项目中,还有一个重要的环节需要解决——如何高效地与数据库进行交互?
传统的JDBC编程存在大量重复代码,开发效率低下;而完全自动化的ORM框架又不够灵活。这时,MyBatis框架应运而生。
MyBatis是什么?
- 它是一款优秀的持久层框架
- 支持自定义SQL、存储过程以及高级映射
- 避免了几乎所有的JDBC代码和手动设置参数
- 可以通过XML或注解的方式配置和映射原生信息
让我们一起开启MyBatis的学习之旅,为你的Java Web开发技能栈增添强大的工具!
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的MyBatis知识文章专栏
https://blog.csdn.net/2402_83322742/category_12969707.html?spm=1001.2014.3001.5482
欢迎来阅读指出不足
一、什么是MyBatis
1. MyBatis 是什么?
如果把开发软件比作盖房子,那么 「持久层」 就像是房子的地基:专门负责把数据(比如用户信息、订单记录)存到数据库(类似数据仓库)里,或者从数据库取出来。
- MyBatis 就是这个地基的高效施工队,帮你轻松搞定 Java 程序和数据库之间的交互。
简单来说:
- MyBatis 是一个能让 Java 代码和数据库友好对话的桥梁。它解决了传统 JDBC 编程的痛点,让你不用再写大量重复的「连接数据库 - 执行 SQL - 处理结果」的代码,只需要专注写核心的 SQL 语句和定义数据映射规则。
2. JDBC 的三大痛点
假设用 JDBC 实现「查询用户信息」功能,需要手动完成以下 5 步重复操作:
- 获取数据库连接(处理异常)
- 拼接 SQL 语句(易出错,如引号未闭合)
- 设置 SQL 参数(如给
SELECT * FROM user WHERE id=?
赋值) - 遍历结果集,手动将数据库行转为 Java 对象(如
User
实例) - 关闭连接、释放资源
而用 MyBatis,这些体力活全由框架自动完成!你只需要做两件事:
- 写接口(定义功能,如
User getUserById(int id)
) - 写 SQL 映射文件(定义具体 SQL,如
SELECT * FROM user WHERE id=#{id}
)
3. MyBatis 的核心优势
1. 告别重复代码,专注核心逻辑
- JDBC 开发中,80% 代码是重复的(连接、关闭、结果处理);
- MyBatis 封装底层操作,开发者只需写 业务 SQL 和对象映射,效率提升 50%+。
2. 灵活控制 SQL,适应各种场景
- 简单场景:用注解(如
@Select(\"SELECT * FROM user WHERE id=#{id}\")
)直接在接口中写 SQL,快速开发; - 复杂场景:用 XML 文件写 SQL,支持 动态 SQL(条件拼接
AND/OR
)、存储过程、多表关联查询,可优化 SQL 性能。
3. 自动映射数据,减少人为错误
- 数据库字段(如
user_id
、user_name
)自动映射到 Java 对象属性(userId
、userName
),支持驼峰命名转换; - 无需手动写
resultSet.getString(\"user_name\")
等代码。
二、搭建你的第一个MyBatis系统
- 我们的任务是使用MyBatis的知识来连接我们数据库中emp表的信息,并打印到终端中
步骤一:配置并添加Maven文件
- 首先打开利用vscode打开maven文件里面的conf文件
- 找到setting.xml文件
-
单击利用vscode或者其他编辑软件打开它
-
找到里面的mirros文件,替换为国内阿里云镜像(国外的网速慢)
-
国内阿里云镜像
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url></mirror>
-
粘贴过去替换掉原来的镜像文件
-
然后保存
-
点击最右边的maven按钮
-
找到maven设置
-
将自己的maven文件导入里面
步骤二:新建一个MyBatis项目
-
接着我们需要打开IDEA然后新建一个MyBatis项目
-
然后删除java文件里面多余的内容
- 接着右键单击MyBatis项目,新建一个MyBatis模板
- 继续按照上面的操作,删除MyBatis01java文件下所有的文件
步骤三:导入MyBatis的包
- 接着在Maven网站搜索找到并导入MyBatis的包
Maven官网
https://mvnrepository.com/search?q=mybatis
- 我们在导入MyBatis的包之前必须有jdbc的驱动包,这里我直接把jdbc和MyBatis的依赖包打出来
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version></dependency>
- 接着为了更加方便我们运行项目,我们还需要下载
junit
的依赖包
Maven junit依赖包官网
https://mvnrepository.com/search?q=junit
- 找到第二个junit依赖包下载junit
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope></dependency>
- 接着为了方便我们以后跟好的编写java类,我们需要下载lombok
-
- Lombok 是一个 Java 库,能通过注解的方式自动生成 Java 类中的样板代码(如 getter/setter、构造函数、toString 方法等),从而减少代码冗余,提高开发效率。
- Lombok 是一个 Java 库,能通过注解的方式自动生成 Java 类中的样板代码(如 getter/setter、构造函数、toString 方法等),从而减少代码冗余,提高开发效率。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.38</version> <scope>provided</scope></dependency>
- 一共下载4个驱动包
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.38</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies>
步骤四:创建实体类
- 首先我们需要在main/java包下创建com.niit的包
- 接着在com.niit包里再创建俩个包mapper和pojo
- 在基于 MyBatis 的开发中,
mapper
包和pojo
包承担着不同但关键的角色:
pojo
包(Plain Old Java Object,简单 Java 对象)
- 作用:用于存放实体类,这些类的属性与数据库表的字段一一对应,主要作为数据载体,用于封装从数据库查询到的数据,或作为向数据库插入数据的对象。
- 特点:通常只包含属性及其对应的
getter
和setter
方法(使用 Lombok 时可通过注解简化代码),不包含业务逻辑。例如,数据库中有emp
表,pojo
包下的Emp
类就会有eid
(员工 ID)、ename
(员工姓名)等属性,用于映射表中字段,方便程序对数据进行操作。
mapper
包
- 作用:存放 MyBatis 的 Mapper 接口及对应的 SQL 映射文件(如
XML
)。- Mapper 接口:定义与数据库交互的抽象方法,如查询、插入、更新、删除等操作。例如
EmpMapper
接口中定义selectAllEmps()
方法表示查询所有员工。 - SQL 映射文件:编写具体的 SQL 语句,通过
namespace
与 Mapper 接口绑定,通过id
与接口中的方法对应。例如在EmpMapper.xml
中定义SELECT * FROM emp
,实现对数据库的查询操作。
- Mapper 接口:定义与数据库交互的抽象方法,如查询、插入、更新、删除等操作。例如
- 特点:将 SQL 语句与业务代码分离,提高代码的可维护性和复用性,同时支持面向接口编程,解耦业务逻辑与数据访问层。
- 在
pojo
包下创建Emp.java
,映射数据库表结构:
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;@AllArgsConstructor@NoArgsConstructor@Data@ToStringpublic class Emp { private int eid; private String ename; private String fid;}
步骤五:创建Mapper接口
在mapper
包下创建EmpMapper.java
,定义数据库操作方法:
package com.niit.mapper;import com.niit.pojo.Emp;import java.util.List;public interface EmpMapper { List<Emp> selectAllEmps();}
步骤六:创建MyBatis配置文件
在resources
目录下创建mybatis-config.xml
,配置数据库连接:
数据库连接官网模板
https://mybatis.net.cn/getting-started.html
<!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.cj.jdbc.Driver\"/> <property name=\"url\" value=\"jdbc:mysql://localhost:3306/your_database\"/> <property name=\"username\" value=\"root\"/> <property name=\"password\" value=\"your_password\"/> </dataSource> </environment> </environments> <mappers> <mapper resource=\"mapper/EmpMapper.xml\"/> </mappers></configuration>
<!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.cj.jdbc.Driver\"/> <property name=\"url\" value=\"jdbc:mysql://localhost:3306/2023se3\"/> <property name=\"username\" value=\"root\"/> <property name=\"password\" value=\"123456\"/> </dataSource> </environment> </environments> <mappers> <mapper resource=\"mapper/EmpMapper.xml\"/> </mappers></configuration>
步骤七:创建SQL映射文件
在resources/mapper
目录下创建EmpMapper.xml
,编写SQL语句:
SQL语句官网模板
https://mybatis.net.cn/getting-started.html
<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\"><mapper namespace=\"com.niit.mapper.EmpMapper\"> <select id=\"selectAllEmps\" resultType=\"com.niit.pojo.Emp\"> SELECT * FROM emp </select></mapper>
步骤八:编写测试代码
在test/java
目录下创建MyTest.java
,验证功能:
import com.niit.pojo.Emp;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MyTest { @Test public void testSelectAllEmps() throws IOException { // 加载MyBatis配置文件 String resource = \"mybatis-config.xml\"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 执行SQL查询 try (SqlSession session = sqlSessionFactory.openSession()) { EmpMapper mapper = session.getMapper(EmpMapper.class); List<Emp> emps = mapper.selectAllEmps(); // 打印结果 for (Emp emp : emps) { System.out.println(emp); } } }}
- 然后运行
- 可以看到我们的数据库信息打印到控制台了
以上就是这篇博客的全部内容,下一篇我们将继续探索MyBatis的更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的MyBatis知识文章专栏
https://blog.csdn.net/2402_83322742/category_12969707.html?spm=1001.2014.3001.5482
我的JSP知识文章专栏
https://blog.csdn.net/2402_83322742/category_12950980.html
我的java-servlet知识文章专栏
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482
我的HTML专栏
https://blog.csdn.net/2402_83322742/category_12834817.html?spm=1001.2014.3001.5482
欢迎来阅读指出不足