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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: [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. }
相关文章
|
5月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
572 1
|
5月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
640 0
|
6月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
752 64
|
6月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
474 1
|
7月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
806 0
|
7月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
629 0
|
8月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1404 1
Spring boot 使用mybatis generator 自动生成代码插件
|
11月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
871 0
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
642 2
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
703 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。