[Java Web]Mybatis->超八千字详细介绍,带你由浅入深认识了解mybatis(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: [Java Web]Mybatis->超八千字详细介绍,带你由浅入深认识了解mybatis(下)

pojo类和Java been的区别:pojo类可以不提供全部的getter和setter方法,以及有参无参构造器等,而javaBeen的流程则更为繁琐一些。

⑧创建Mybatis的示例类:MybatisDemo

1. package com.xzl;
2. 
3. import com.xzl.pojo.User;
4. import org.apache.ibatis.io.Resources;
5. import org.apache.ibatis.session.SqlSession;
6. import org.apache.ibatis.session.SqlSessionFactory;
7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
8. 
9. import java.io.IOException;
10. import java.io.InputStream;
11. import java.util.List;
12. 
13. public class MybatisDemo {
14. public static void main(String[] args) throws IOException{
15. //1、加载mybatis核心配置文件,获取SqlSessionFactory
16. String resource = "mybatis-config.xml";
17. InputStream inputStream = Resources.getResourceAsStream(resource);
18. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
19. //2、获取sqlSession对象,用来执行sql
20. SqlSession sqlSession = sqlSessionFactory.openSession();
21. //3、执行sql
22.         List<User> users = sqlSession.selectList("com.xzl.pojo.User.selectAll");
23.         System.out.println(users);
24.         sqlSession.close();
25.     }
26. }

3.3、注意事项

3.3.1、⭐MybatisDemo步骤

1.加载Mybatis核心配置文件,获取SqlSessionFactory对象

       1.1、先获取字节缓存输入流

InputStream inputStream = Resources.getResourceAsStream(resource);

通过getClass可以看到,最终获取的是一个字节缓冲输入流

       1.2、获取SqlSessionFactory->

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2.获取SqlSession对象,用来执行sql->

SqlSession sqlSession = sqlSessionFactory.openSession();

3.执行sql->List<User> users = sqlSession.selectList("com.xzl.pojo.User.selectAll");

4.释放资源->sqlSession.close();

3.3.2、bug

如果代码检查了并无问题,但是却报错:

可能是SQL映射文件的加载除了问题:需要检查mybatis配置文件中加载SQL映射文件的部分:

可能是resource的资源路径书写有误,可以尝试去直接复制路径看看:

还有一个可能就是,MySQL驱动包的版本较高。MySQL 8+版本的驱动包中,在mybatis核心配置文件配置MySQL连接的url时,参数部分的连接不能用"&"而要使用"&"替代

例如:

3.3.3、映射文件警告信息

在映射配置文件中存在报红的情况。问题如下:

产生的原因:Idea和数据库没有建立连接,不识别表信息。但是它并不影响程序的执行。

解决方式:在Idea中配置MySQL数据库连接。

步骤:

点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

在弹出的界面进行基本信息的填写,点击完成后就能看到如下界面

而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句

4、代理开发

4.1、简介

之前的代码是基本使用方式,它也存在硬编码的问题,如下:

这里调用 selectList() 方法传递的参数是映射配置文件中的namespace.id值

这样写也不便于后期的维护。如果使用Mapper 代理方式则不存在硬编码问题:

通过上面的描述可以看出 Mapper 代理方式的目的:

解决原生方式中的硬编码

简化后期执行SQL

Mybatis 官网也是推荐使用 Mapper 代理的方式。下图是截止官网的图片:

4.2、使用要求

使用Mapper代理方式,必须满足以下要求:

①定义 与 SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。如下:

②设置SQL映射文件的namespace属性为Mapper接口全限定名

③在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

4.3、代理代码实现

步骤:

①创建UserMapper接口:

②UserMapper.xml 映射配置文件

③创建MybatisDemo2类:

4.3.1、注意事项

如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将mybatis核心配置文件的加载映射配置文件的配置修改为:

4.4、mapper代理的bug

这个部分请查看我的另一篇文章:


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
12天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
37 4
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
107 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
23天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
30 6
|
12天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
30 0
WK
|
18天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
24 0
|
1月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
23 1
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
Java Docker 微服务
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。每个服务负责特定功能,通过轻量通信机制协作。利用Spring Boot与Spring Cloud等框架可简化开发流程,支持模块化设计、独立部署、技术多样性和容错性,适应快速迭代的需求。
75 1