快捷搜索:  汽车  科技

mybatis几种使用方法(MyBatis的前世今生与环境搭建)

mybatis几种使用方法(MyBatis的前世今生与环境搭建)但是随着互联网的极速发展、复杂业务场景的不断涌现,Hibernate 在许多方面慢慢暴露出了缺点:灵活性不够、无法根据不同条件组装不同SQL、对多表关联和复杂SQL查询支持较差、SQL优化和性能差、全表映射带来的不便等等。最初 SUN 公司推出了 Java EE 服务器端组件模型( EJB ),不过由于EJB 配置过于复杂,且适应范围小于是很快就被淘汰。后来封装度极高、开发效率极高、全表映射的 ORM 持久层框架 Hibernate 出现,成为了当时首选的 Java ORM 模型框架。可以简单的理解为:Mybatis 本身抽象了大量的 JDBC 冗余代码,同时基于对象关系映射模型,向外提供了一套灵活易用的 API 和数据库做交互。用于JDBC 书写时需要开发编写过多的代码,操作所有对象,既麻烦还特别容易出错,所以在我们实际开发中很少直接使用 JDBC 进行编程,于是 ORM 的登台显得尤为

学习指南:什么是MyBatis?

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

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

MyBatis可以使用简单的XML或注解来配置和映射原生类型、集合接口以及Java的POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis中文网:https://mybatis.net.cn/index.html

可以简单的理解为:Mybatis 本身抽象了大量的 JDBC 冗余代码,同时基于对象关系映射模型,向外提供了一套灵活易用的 API 和数据库做交互。

前世今生

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(1)

用于JDBC 书写时需要开发编写过多的代码,操作所有对象,既麻烦还特别容易出错,所以在我们实际开发中很少直接使用 JDBC 进行编程,于是 ORM 的登台显得尤为重要,ORM 全称是 Object/Relation Mapping:表示 对象-关系映射 的缩写。

ORM模型 ,简单来说,就是数据库的表和简单 Java 对象的映射关系模型。采用ORM框架后,应用程序不再直接访问底层数据库,而是以 面向对象 的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层SQL操作。ORM框架实现的效果:把对持久化对象的保存、修改、删除 等操作,转换为对数据库的操作。

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(2)

最初 SUN 公司推出了 Java EE 服务器端组件模型( EJB ),不过由于EJB 配置过于复杂,且适应范围小于是很快就被淘汰。后来封装度极高、开发效率极高、全表映射的 ORM 持久层框架 Hibernate 出现,成为了当时首选的 Java ORM 模型框架。

但是随着互联网的极速发展、复杂业务场景的不断涌现,Hibernate 在许多方面慢慢暴露出了缺点:灵活性不够、无法根据不同条件组装不同SQL、对多表关联和复杂SQL查询支持较差、SQL优化和性能差、全表映射带来的不便等等。

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(3)

于是 Mybatis 框架应运而生,弥补了Hibernate的不足,不仅简单易用,而且具有高度灵活、可优化、易维护等特点,成为如今大型互联网项目的首选框架。

Mybatis 前身是 iBATIS,2001年由Clinton Begin发起的一个开源项目,最初侧重于密码软件的开发 后来发展成为一款基于Java的持久层框架.

2004年,Clinton 将 iBATIS 的名字和源码捐赠给 Apache 软件基金会,接下来的6年中,开源软件世界发生了巨大的变化,一切开发实践、基础设施、许可,甚至数据库技术都彻底改变了。

在2010年6月,核心开发团队把这个项目由 apache software foundation 迁移到了google code,随着开发团队转投 Google Code 旗下,ibatis3.x 正式更名为 Mybatis .

代码于2013年11月迁移到 Github 。

整体架构

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(4)

MyBatis 的整体架构分为三层, 分别是基础支持层、核心处理层和接口层:

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(5)

基础支持层

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(6)

核心处理层

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(7)

MyBatis 执行一条SQL 语句的大致过程:

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(8)

核心是SqlSession 接口,该接口中定义了MyBatis 暴露给应用程序调用的API ,也就是上层应用与MyBatis 交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。

环境搭建

默认已安装 Java 开发环境、Mysql数据库、Maven 环境。

Mybatis 开发与环境搭建,我们先入门体验,步骤如下:

1、创建 maven 工程

2、添加 MyBatis 仓库坐标(非maven项目则引入jar包)

3、创建user数据表

4、编写User实体类

5、编写映射文件UserMapper.xml

6、编写核心文件SqlMapConfig.xml

7、编写测试类

  • 创建 maven 工程

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(9)

  • 添加 MyBatis 仓库坐标

<!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--日志坐标--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>

  • 创建user数据表
  • CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT `username` varchar(50) DEFAULT NULL `password` varchar(50) DEFAULT NULL `birthday` varchar(50) DEFAULT NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  • 编写User实体类

package com.panshenlian.pojo; public class User { private int id; private String username; private String password; private String birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" "id=" id " username='" username '\'' " password='" password '\'' " birthday='" birthday '\'' '}'; } }

  • 编写映射文件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 namespace="userMapper"> <select id="findAll" resultType="com.spellbind.pojo.User"> select * from User </select> </mapper>

  • 编写核心文件SqlMapConfig.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="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="/UserMapper.xml" /> </mappers> </configuration>
  • 编写测试类
  • import com.panshenlian.pojo.User; 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 MybatisTest { @Test public void testQueryUser01() throws IOException { //加载核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行sql语句 List<User> userList = sqlSession.selectList("userMapper.findAll"); // 打印结果 for (User user : userList) { System.out.println(user); } // 释放资源 sqlSession.close(); } }
最终通过 Junit 单元测试,运行结果符合预期:

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(10)

工程结构参考:

mybatis几种使用方法(MyBatis的前世今生与环境搭建)(11)

完结散花

ok以上就是对 MyBatis 的前世今生与环境搭建的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解 欢迎小伙伴私信我,我后期再补充完善。

参考文献

https://blog.csdn.net/qq_33369905

https://blog.csdn.net/weixin_47872288/

原文 https://blog.csdn.net/m0_66139206/article/details/126460677

猜您喜欢: