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

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

1、简介

MyBatis 是一款优秀的持久层框架用于简化 JDBC 开发。

MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

官网:https://mybatis.org/mybatis-3

中文网:https://mybatis.org/mybatis-3/zh/index.html

介绍:

MyBatis是一款开源的持久层框架,用于Java应用程序,可以将Java对象映射到数据库中

它允许用户使用简单的XML或注解来配置和映射原生类型、接口和Java POJO(Plain Old Java Objects)到数据库表,减少了几乎所有的JDBC代码和手写设置参数的工作,它提供了一种灵活的查询机制,支持动态SQL,允许在查询期间动态生成SQL,并将其映射到Java对象。

总的来说,MyBatis是一款非常有用的工具,可以简化数据库应用程序的开发,使Java开发人员能够专注于应用程序逻辑,而不必关注数据库和SQL语句细节。

1.1、持久层

负责将数据到保存到数据库的那一层代码

以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。

JavaEE三层架构:表现层、业务层、持久层

1.2、框架

框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

2、JDBC->Mybais

JDBC缺点:

1.硬编码

       1.1、注册驱动、获取连接:

JDBC的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。

       1.2、SQL语句:如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护。

2.操作繁琐:

       2.1、手动设置参数

       2.2、手动封装结果集

代码对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间

Mybatis优化:

  1. 硬编码可以配置到配置文件
  2. 操作繁琐的地方,Mybatis都可以自动完成

持久层框架使用占比:

3、使用Mybatis

3.1、步骤概述

  1. 创建数据库创建数据表
  2. 创建Mybatis项目
  3. 配置pom.xml
  4. 配置logback.xml
  5. 配置mybatis-config.xml
  6. 配置UserMapper.xml
  7. 创建pojo类User
  8. 创建MybatisDemo

3.2、步骤详述

下面是Mybatis详细使用步骤:

①开启数据库服务,创建数据库,创建表单

②创建Maven项目:Mybatis->项目结构如下:

③配置pom.xml,导入依赖

->所需依赖为:mybatis,mysql,junit,slf4j日志,logback

1. <?xml version="1.0" encoding="UTF-8"?>
2. <!--项目依赖为:mybatis,mysql,junit,slf4j日志,logback-->
3. <project xmlns="http://maven.apache.org/POM/4.0.0"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
6. <modelVersion>4.0.0</modelVersion>
7. 
8. <groupId>org.example</groupId>
9. <artifactId>Mybatis</artifactId>
10. <version>1.0-SNAPSHOT</version>
11. 
12. <properties>
13. <maven.compiler.source>17</maven.compiler.source>
14. <maven.compiler.target>17</maven.compiler.target>
15. </properties>
16. 
17. <dependencies>
18. <dependency>
19. <groupId>org.mybatis</groupId>
20. <artifactId>mybatis</artifactId>
21. <version>3.5.5</version>
22. </dependency>
23. 
24. <dependency>
25. <groupId>mysql</groupId>
26. <artifactId>mysql-connector-java</artifactId>
27. <version>5.1.48</version>
28. </dependency>
29. 
30. <dependency>
31. <groupId>junit</groupId>
32. <artifactId>junit</artifactId>
33. <version>4.13.2</version>
34. <scope>test</scope>
35. </dependency>
36. 
37. <dependency>
38. <groupId>org.slf4j</groupId>
39. <artifactId>slf4j-api</artifactId>
40. <version>1.7.16</version>
41. </dependency>
42. 
43. <dependency>
44. <groupId>ch.qos.logback</groupId>
45. <artifactId>logback-classic</artifactId>
46. <version>1.2.3</version>
47. </dependency>
48. 
49. <dependency>
50. <groupId>ch.qos.logback</groupId>
51. <artifactId>logback-core</artifactId>
52. <version>1.2.3</version>
53. </dependency>
54. </dependencies>
55. 
56. </project>

④配置logback.xml

1. <?xml version="1.0" encoding="UTF-8"?>
2. <configuration>
3. <!--
4.         CONSOLE :表示当前的日志信息是可以输出到控制台的。
5.     -->
6. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
7. <!--输出流对象 默认 System.out 改为 System.err-->
8. <target>System.out</target>
9. <encoder>
10. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
11.                 %msg:日志消息,%n是换行符-->
12. <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>-->
13. <pattern>
14.                 %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %cyan([%thread]) %boldGreen(%logger{15}) : %msg %n
15. </pattern>
16. </encoder>
17. </appender>
18. 
19. <!-- File是输出的方向通向文件的 -->
20. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
21. <encoder>
22. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
23. <charset>utf-8</charset>
24. </encoder>
25. <!--日志输出路径-->
26. <file>C:/code/itheima-data.log</file>
27. <!--指定日志文件拆分和压缩规则-->
28. <rollingPolicy
29. class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
30. <!--通过指定压缩文件名称,来确定分割文件方式-->
31. <fileNamePattern>C:/code/itheima-data2-%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
32. <!--文件拆分大小-->
33. <maxFileSize>1MB</maxFileSize>
34. </rollingPolicy>
35. </appender>
36. 
37. <!--
38.     level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR    |    ALL 和 OFF
39.    , 默认debug
40.     <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
41.     -->
42. <root level="ALL">
43. <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
44. <appender-ref ref="CONSOLE" />
45. </root>
46. </configuration>

⑤配置Mybatis核心配置文件->mybatis-config.xml

功能:替换连接信息,解决硬编码问题。

1. <?xml version="1.0" encoding="utf-8" ?>
2. <!DOCTYPE configuration
3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
5. <configuration>
6. <typeAliases>
7. <package name="com.xzl.pojo"/>
8. </typeAliases>
9. <!--environments:配置数据库连接环境信息。
10.             可以配置多个environment,通过default属性切换不同的environment-->
11. <environments default="development">
12. <environment id="development">
13. <transactionManager type="JDBC"></transactionManager>
14. <dataSource type="POOLED">
15. <!--数据库连接信息-->
16. <property name="driver" value="com.mysql.jdbc.Driver"/>
17. <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
18. <property name="username" value="root"/>
19. <property name="password" value="xzlXZGK680"/>
20. </dataSource>
21. </environment>
22. 
23. <environment id="test">
24. <transactionManager type="JDBC"></transactionManager>
25. <dataSource type="POOLED">
26. <!--数据库连接信息-->
27. <property name="driver" value="com.mysql.jdbc.Driver"/>
28. <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
29. <property name="username" value="root"/>
30. <property name="password" value="xzlXZGK680"/>
31. </dataSource>
32. </environment>
33. </environments>
34. 
35. <mappers>
36. <!--加载sql映射文件-->
37. <!--        <mapper resource="com/xzl/pojo/UserMapper.xml"/>-->
38. <mapper resource="com.xzl.pojo/UserMapper.xml"></mapper>
39. </mappers>
40. </configuration>

⭐Mybatis连接数据库的方式:mybatis-config.xml文件中的<environment>标签,<environments default>标签可以切换不同的environment:

⑥配置SQL映射文件UserMapper.xml->方便统一管理SQL语句,解决硬编码问题

1. <?xml version="1.0" encoding="UTF-8" ?>
2. <!DOCTYPE mapper
3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5. 
6. <!--</mapper>-->
7. <mapper namespace="com.xzl.pojo.User">
8. <select id="selectAll" resultType="com.xzl.pojo.User">
9.         select * from tb_user;
10. </select>
11. </mapper>

namespace命名空间可随意编写,但编写正确的包和类的关系作为命名空间,则在源码中可以方便查看跳转:

⑦创建User类

1. package com.xzl.pojo;
2. 
3. public class User {
4. private int id;
5. private String username;
6. private String password;
7. private String gender;
8. private String address;
9. 
10. //省略getter和setter
11. 
12. @Override
13. public String toString() {
14. //这里的password用PSD来代替,因为CSDN不让发,大家见谅
15. return "User{" +
16. "id=" + id +
17. ", username='" + username + '\'' +
18. ", PSD='" + password + '\'' +
19. ", gender='" + gender + '\'' +
20. ", address='" + address + '\'' +
21. '}';
22.     }
23. 
24. public int getId() {
25. return id;
26.     }
27. 
28. public void setId(int id) {
29. this.id = id;
30.     }
31. 
32. public String getUsername() {
33. return username;
34.     }
35. 
36. public void setUsername(String username) {
37. this.username = username;
38.     }
39. 
40. public String getPassword() {
41. return password;
42.     }
43. 
44. public void setPassword(String password) {
45. this.password = password;
46.     }
47. 
48. public String getGender() {
49. return gender;
50.     }
51. 
52. public void setGender(String gender) {
53. this.gender = gender;
54.     }
55. 
56. public String getAddress() {
57. return address;
58.     }
59. 
60. public void setAddress(String address) {
61. this.address = address;
62.     }
63. }
相关文章
|
7天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
32 7
|
30天前
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
59 20
|
29天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
96 6
|
29天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
|
29天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
60 1
|
29天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
32 1
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
72 9
|
1月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
98 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
3月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
87 7

热门文章

最新文章