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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: [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. }
相关文章
|
9天前
|
SQL Java
20:基于EL与JSTL的产品管理页-Java Web
20:基于EL与JSTL的产品管理页-Java Web
21 5
|
1天前
|
SQL Java
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
|
1天前
|
SQL druid Java
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
|
3天前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
8 0
|
9天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
29 4
|
9天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
19 4
|
9天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
24 4
|
9天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
3天前
|
存储 程序员 API
python web开发示例详解
python web开发示例详解
12 0
|
3天前
|
XML 前端开发 JavaScript
CSR(客户端渲染)和AJAX在Web开发中各自扮演不同的角色
【5月更文挑战第8天】CSR(客户端渲染)与AJAX在Web开发中各司其职。CSR提供初始HTML框架,通过JavaScript在浏览器端获取并渲染数据,提升交互性和响应速度。AJAX则实现页面局部更新,如实时搜索,不刷新页面即可获取数据。CSR可能因DOM操作多而引发性能问题,但可优化解决;AJAX适合频繁交互场景,提高响应性。两者在不同需求下各有优势,需按项目选择适用技术。
13 4