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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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. }
相关文章
|
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
|
XML Java 数据库连接
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)
249 0
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)