Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的,其主要优势之一就是分层架构。Spring提供了更完善的开发环境,可以为POJO(Plain Ordinary Java Object,普通Java对象)对象提供企业级的服务。
Spring MVC是一个Web开发框架,可以将它理解为Servlet。在MVC模式中,Spring MVC作为控制器(Controller)用于实现模型与视图的数据交互,是结构最清晰的。
Spring MVC框架采用松耦合、可插拔的组件结构,具有高度可配置性,与其他的MVC框架相比,具有更强的扩展性和灵活性。
MyBatis 是Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis ,2013年11月MyBatis又被迁移到Github。
MyBatis是一个优秀的持久层框架,它可以在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM(Object/Relation Mapping,即对象关系映射)实现。MyBatis封装性要低于Hibernate,但它性能优越、简单易学,在互联网应用的开发中被广泛使用。
Spring Boot 框架是 Pivotal 团队基于 Spring 开发的全新框架,其设计初衷是为了简化 Spring 的配置,使用户能够构建独立运行的程序,提高开发效率。
Spring Boot 框架本身并不提供 Spring 框架的核心特性及扩展功能,它只是用于快速、敏捷地开发新一代基于 Spring 框架的应用,同时它还集成了大量的第三方类库(如Jackson、JDBC、Redis 等),使用户只需少量配置就能完成相应功能。
Spring Cloud 是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案,它利用Spring Boot 的开发便利性巧妙地简化了分布式系统的开发。例如,配置管理、服务发现、控制总线等操作,都可以使用 Spring Boot 做到一键启动和部署。可以说,Spring Cloud 将 Spring Boot 框架进行了再封装,屏蔽掉了复杂的配置和实现原理,具有简单易懂、易部署和易维护等特点。
那么开始今天的主题MyBatis的学习
MyBatis是一个支持普通SQL查询、存储过程以及高级映射的半自动化持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的“XML”或“注解”进行配置和原始“映射”,将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
PS:(名词解释)
@
符号为前缀的特殊标记。**注解可以用于提供编译时的指示、运行时的处理、文档生成等。常见的 Java 注解包括 @Override
表明是方法重写、@FunctionalInterface
函数式接口、@Nullable
表明元素可以为null、@Autowired
用于标记字段、构造器或方法,表示自动装配(自动注入)该组件 等(后面我会发一个常见注解的说明) MyBatis框架是一个ORM(Object/Relation Mapping,即对象关系映射)框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。ORM框架的工作原理可以通过一张图来展示。
(这段加粗文字如果简单理解的话,那就是可以把Java中的数据类型自动转换识别成数据库的数据类型)
不同的数据库系统可能有不同的数据类型名称,因此在特定的数据库中可能会略有差异。此外,ORM框架也允许进行自定义配置,以适应不同的数据库需求。
此外,还有一些其他特殊类型,例如日期和时间类型,也可以在ORM中进行映射,比如:
上面这些就是我们学习Java常见的8种基本数据类型在数据库中的通用映射规则。但具体的映射规则可能会因不同的ORM框架或数据库而有所区别,因此在实际开发中,还是得根据实际情况和需求进行相应的配置和调整。
了解完MyBatis的基本概念之后,我们就该到了如何使用MyBatis?想要使用首先就得引入,简单来说就是搭建MyBatis的开发环境。
创建工程后引入相关依赖。(本地lib导入jar包或者Pom.xml写入依赖信息,Maven方式导入)
数据库准备(就是指创建好准备链接的数据库) 。 比如:MySQL Oracle PostgreSQL
编写数据库连接信息配置文件(db.properties 、database.properties、dbconfig.properties
、jdbc.properties都是指同一个文件,也就是数据库连接信息配置文件)
编写核心配置文件和映射文件。
一般来说都不会自己去写,只有少部分会需要我们去写。大部分的都是可以去网上下载模板然后自己修改一下基本信息就可以用了。
引入依赖(Maven方式引入需要联网)➡编写配置文件(数据库连接信息配置文件、MyBatis核心配置文件)➡
①引入相关依赖的代码
<!--Pom文件编写依赖引入 只展示了其中一个依赖-- >
<dependencies>
<!-- MySQL Connector Java 引入java链接MySQL的依赖 -->
<dependency>
<groupId>mysql</groupId> <!-- 依赖名 -->
<artifactId>mysql-connector-java</artifactId> <!-- 组件名 ID -->
<version>8.0.11</version> <!-- 版本号 -->
</dependency>
<!-- 其他依赖项 -->
...<!--尝试模仿并写出其他项依赖引入,写不出也可以去我资源找对应的文件下载,都是敲好的-->
</dependencies>
③db.properties文件
//db.properties文件
# MySQL数据库驱动程序类名
mysql.driver=com.mysql.cj.jdbc.Driver
# MySQL数据库连接URL,指定主机、端口、数据库名称和其他参数
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
# MySQL数据库用户名
mysql.username=root
# MySQL数据库密码
mysql.password=root
④mybatis-config.xml
使用POOLED数据源的意思是:它表示使用连接池数据源,“POOLED” 是Maven配置文件中
配置项的一个属性值
连接池是一组预先创建并管理的数据库连接。当应用程序需要与数据库进行交互时,它可以从连接池中获取一个可用的数据库连接,执行操作完成后再将连接放回连接池,而不是每次都创建和关闭连接。这种方式可以提高性能和效率,避免了频繁创建和销毁数据库连接的开销。
具体到这个配置文件中,
指定了使用 POOLED 数据源类型。通过这个配置,Maven将会根据数据库连接信息和连接池配置参数,创建一个连接池数据源供应用程序使用。这样,在应用程序需要进行数据库操作时,它可以从这个连接池中获取连接,而不是每次都重新创建新的连接,从而提高性能和效率。
到这里环境就已经搭建好了。
①:数据库准备➡②:pojo类编写➡③:mapper文件(sql语句)编写➡④:mybatis-config文件中添加mapper文件resources的地址➡⑤:编写测试类。
首先要准备好一个要链接的数据库,编写好数据设计语句,设计表的同时呢,插入俩条语句进去,这样方便我们后续测试。记得若是链接的数据库有改变,那么我们前面的数据库链接信息配置文件也需要修改,就是db.properties。
首先我们要新建实体类上面也有提到的pojo包(普通JAVA对象),这里的话就要与数据库的表字段一一对应,这样才能映射过去。一般来说一个表对应一个类,也就是一个对象。
如下图:我们采用的PasswordMS表中的结构如下:
那么我们的pojo包下的成员变量应该是这样子定义的:
字段名和变量名一一对应。不要忘了生成Getter和Setter方法,因为我们的访问修饰符是private私有的,那么如果不开放公共的方法来设置或获取变量的值,这样的话会导致只有在类的内部能够访问到,所以不能忘记嗷,这也是面向对象的设计原则之一,也是封装的基本特征,合理开放,合理暴露。
编写一下Mapper.xml,里面编写sql语句,动态sql语句,这里我们要针对一下数据库表的关系,然后去对java对象进行一个映射,关系有一对一、一对多等。越复杂的sql编写,需要注意的点就越多。
编写mapper,需要在标签对里面
编写mapping文件路径配置,在mybatis-config.xml中下。这样mybatis才能够识别我们的mapper文件,才能够使用映射语句,不会导致出错。
因为我们前面引入了Junit测试依赖,那么就简单编写一下测试类吧,看看我们编写的Mapper接口能不能正常映射到数据库。
//PasswordMSTest.java
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.apache.log4j.Logger;
import pojo.PasswordMS;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
class PasswordMSTest {
private Logger logger= Logger.getLogger(PasswordMSTest.class);
@org.junit.jupiter.api.Test
void getUid() {
//读取文件名:
String resources="mybatis-config.xml";
//创建流
Reader reader = null;
try{
reader = Resources.getResourceAsReader(resources);
}catch (IOException e){
e.printStackTrace();
}
//初始化mybatis数据库,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建SqlSession实例
SqlSession session = sqlSessionFactory.openSession();
//传入参数查询,返回结果
PasswordMS passwordMS = session.selectOne("findById",1);
logger.info("姓名:"+passwordMS.getAccount()+",密码:"+passwordMS.getPassword()+",网站:"+passwordMS.getWebsiteName());
//关闭session
session.close();
}
@org.junit.jupiter.api.Test
void getAllItem() {
//读取文件名:
String resources="mybatis-config.xml";
//创建流
Reader reader = null;
try{
reader = Resources.getResourceAsReader(resources);
}catch (IOException e){
e.printStackTrace();
}
//初始化mybatis数据库,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建SqlSession实例
SqlSession session = sqlSessionFactory.openSession();
//传入参数查询,返回结果
List<PasswordMS> passwordMS = session.selectList("findAll");
for(PasswordMS s:passwordMS){
logger.info("id:"+s.getId()+",账号:"+s.getAccount()+",密码:"+s.getPassword()+",网站名:"+s.getWebsiteName()+",网站网址:"+s.getWebsiteURL()+",网站缩略图:"+s.getWebsiteImage()+",账号描述:"+s.getAccountDescription());
//关闭session
// }
session.close();
}
}
}
这里的代码逻辑用讲么?如果是有学过java基础和java高级编程的,应该代码逻辑都是能看懂得。
这里可以推荐看看我发的学习记录,基本上有看完,都是可以理解的。
输出结果如下图:
与数据库中写入的完全一致,若是出现NUll值,可能就是pojo类编写不正确,没有字段名和变量名一直,其次可能是映射类型不对等,认真往上翻看看嗷。
PS:关于findAll的sql映射语句需要自己在PasswordMSMapper.xml中编写完成嗷
Mybatis的工作原理:
MyBatis框架在操作数据库时,大体经过了8个步骤。下面结合MyBatis工作原理图对每一步流程进行详细讲解,具体如下。
(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。
(2)加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。
(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。
(4)创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
(5)创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。
(6)封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装到MappedStatement对象中。
(7)操作数据库:根据动态生成的SQL操作数据库。
(8)输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。
这是第一天对SSM框架的学习,先初识Mybatis,了解什么是半自动化持久层框架、映射、pojo、连接池连接数据源等。想要跟着学习的可以去我的资源里面找对应的文件下载,我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。上面的只是简单的俩个查询的例子,可以自己完善一下增删改查的实例。
作者:Stevedash
发表于:2023年8月20日 21点45分