MyBatis精讲(三)一篇文章让你学会用MyBatis获取数据
序
欢迎来到全网最完整的Java系列教程!!!
本教程将包含基础知识、进阶知识、常用框架等,循序渐进地分享Java中必须掌握的知识和技术。跟着老K的教程每天学习一点,你会发现入门Java没有想象中那么难。
经过前2篇文章的介绍,我们对 MyBatis 已经有了最基本的认识。
本期的这篇文章,我们会进入到 MyBatis 最实用的部分,讲解增删改查的操作。
阅读本文,可配合前两篇文章服用,效果更好: MyBatis精讲(一)MyBatis基础配置及持久层连接创建代码实战
MyBatis精讲(二)常用工具MyBatisUtils类的实现
内容会有点多,建议收藏,等有空或者有需要的时候拿出来查看。
一、MyBatis实现CRUD的准备工作
既然要实现和数据库的交互,那自然要创建一个数据库。为了统一教学效果,我们先将下述SQL语句导入到数据库,以创建统一的数据库: DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `depart` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `salary` decimal(10, 2) NOT NULL, `age` int NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; DROP TABLE IF EXISTS `department`; CREATE TABLE `department` ( `did` int UNSIGNED NOT NULL AUTO_INCREMENT, `depart` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `member` int NULL DEFAULT NULL, PRIMARY KEY (`did`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; INSERT INTO `employee` VALUES (5001, "赵乾", "销售部", 6000.00, 28); INSERT INTO `employee` VALUES (5002, "孙礼", "销售部", 7000.00, 34); INSERT INTO `employee` VALUES (6001, "周武", "技术部", 6500.00, 27); INSERT INTO `employee` VALUES (6002, "郑望", "技术部", 7500.00, 40); INSERT INTO `department` VALUES (1, "销售部", 5); INSERT INTO `department` VALUES (2, "技术部", 6);
所有通过MyBatis实现CRUD的,本质都是通过对3个文件的配置来实现: mybatis-config.xml:配置映射文件; 数据实体的java类文件:在java中与数据库对应的实体; mapper配置文件:查询语法的实现。 1. java实体类
由于本项目中有2个数据表,分别是employee和department,所以我们也根据数据表的格式设计对应的实体类: Employee.java public class Employee { private Integer id; private String name; private String depart; private Float salary; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDepart() { return depart; } public void setDepart(String depart) { this.depart = depart; } public Float getSalary() { return salary; } public void setSalary(Float salary) { this.salary = salary; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }Department.java public class Department { private Integer did; private String depart; private Integer member; public Integer getDid() { return did; } public void setDid(Integer did) { this.did = did; } public String getDepart() { return depart; } public void setDepart(String depart) { this.depart = depart; } public Integer getMember() { return member; } public void setMember(Integer member) { this.member = member; } }应用中的java实体类万变不离其宗,都有以下特点; 类的私有属性和数据表中的列信息一一对应; 所有属性都要配置好getter和setter方法。
java实体类只要满足上述2个要求即可。 2. mapper映射表
有了实体类,我们就可以编写映射表了。
我们首先在路径 ./src/main/resources/ 下创建一个 mappers 目录,用来存放各种映射表;
在本例中,我们在该目录下创建一个名为 humanResource.xml 的文件作为映射,其内代码准备如下: <?xml version="1.0" encoding="UTF-8" ?> 此处的 是固定写法,相关资料可以查阅官网:https://mybatis.org/mybatis-3/zh/getting-started.html。 是用来管理映射方法的标签, namespace 命名空间是用来区分调用域的。如果觉得困惑,可以把这个映射表想象成java的类文件,这个命名空间起到了相当于java中类名的作用,这点我们会在后面的内容中详解。 3. mybatis-config.xml
这是MyBatis的基础配置文件,创建和设置的基础逻辑在MyBatis精讲(一)MyBatis基础配置及持久层连接创建代码实战中已经讲述了,有需要的可以回看。
要实现CRUD的话,只要在 mybatis-config.xml 文件中的 标签下,加入如下配置即可: 这里的 resource 属性要和上述mapper映射表的名称相对应。 二、第一次通过MyBatis获取数据
做好了上述准备工作,我们就可以通过MyBatis向数据库获取数据了。 1. 编写mapper映射
在 humanResource.xml 的 标签里添加相应方法: 是MyBatis中的查询操作标签,用来执行所有与查询相关的操作; 中的 id 属性即这个查询方法的名称,可用于调用; 中的 resultType 属性即这个查询方法的输出结果类型; 为了便于理解,上述标签在java语言中,就相当于: public Employee selectAll(){} ,只是函数用标签的方法表示出来。 2. 编写第一个测试用例,实现数据获取
在mapper映射中设置好查询方法后,就可以在java中直接调用该方法,获取数据了,具体方法如下: import koder.mybatis.entity.Employee; import koder.mybatis.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.*; public class MyBatisTest { @Test public void testSelectAll() { SqlSession session = null; try { session = MyBatisUtils.openSession(); List list = session.selectList("humanResource.selectAll"); for (Employee ex : list) { System.out.println(ex.getDepart() + " " + ex.getName()); } } catch (Exception e) { throw new RuntimeException(e); } finally { MyBatisUtils.closeSession(session); } } }该测试用例,是通过自写的 MyBatisUtils 实现的,关于 MyBatisUtils 的内容可以查看MyBatis精讲(二)常用工具MyBatisUtils类的实现的内容,这里是【传送门】; 调用mapper中的方法,只需要用 session.selectList("humanResource.selectAll") 即可, selectList 表示获取多结果, humanResource.selectAll 反应的是方法路径,逻辑和java的方法调用一致; 通过增强型for循环,获取并打印所获得的结果。
如果一切正常,你将会获得的结果如下: 技术部 郑望 技术部 周武 销售部 孙礼 销售部 赵乾
好了,经过前两讲的知识储备,以及本文的实战操练,我们终于可以实用MyBatis获取数据了。
但MyBatis查询功能并不这么简单,还有很多细节和知识。
为了更好的理解,我们下一篇会专门针对 MyBatis的查询操作 进行讲解,内容丰富,为了不错过后面的内容,可以现在先关注我哦!
如果你对老K分享的内容有任何疑问,欢迎随时在评论区留言或者私信我。
正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力! 阅读推荐
IT大佬推荐!学习Java的最优路径 分享多个阶段的学习资源 建议收藏
结束语
我是专注于开发领域的@老K玩代码 ,会持续生产关于如何学习编程语言的优质内容。
如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。
如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。
#头条创作挑战赛#