JavaWeb学习路线(5)——MyBatis

news/2025/2/13 5:58:34/

准备工作:JDBC

  • 概念: JDBC(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。
  • JDBC使用数据库的五大步骤
//步骤一:注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");//步骤二:获取连接对象
String url = "jdbc:mysql://localhost:3306/mybatis";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url,username,password);//步骤三:获取执行对象,执行sql并返回结果
String sql = "select * from user";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);//步骤四:封装结果数据
List<User> userList = new ArrayList<>();
while(resultSet.next()){....
}//步骤五:释放资源
statement.close();
connection.close();

一、Mybatis概述

(一)概念: MyBatis是一款优秀的 持久层 框架,用于优化JDBC的开发。
(二)官网: https://mybatis.org/mybatis-3/zh/index.html


二、MyBatis基本使用

(一)准备工作: (例如创建Maven工程,数据库表,实体类等)

1、创建Maven工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zengoo</groupId><artifactId>springboot-mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-mybatis</name><description>springboot-mybatis</description><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--        上一个mysql版本号-->
<!--        <dependency>-->
<!--            <groupId>mysql</groupId>-->
<!--            <artifactId>mysql-connector-java</artifactId>-->
<!--            <scope>runtime</scope>-->
<!--        </dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2、数据库表

start transaction ;create table user
(id int unsigned unique auto_increment primary key,name varchar(100),age tinyint unsigned,gender tinyint unsigned,phone varchar(11)
);insert into user(name, age, gender, phone)
VALUES('xu',18,0,15385896741),('hu',19,1,18579563487),('yu',23,1,17858426389),('chi',21,0,13947456825),('qian',20,1,17855963541);commit ;
rollback ;

3、实体类


public class User {private Integer id;private String name;private Short age;private Short gender;private String phone;public User() {}public User(Integer id, String name, Short age, Short gender, String phone) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.phone = phone;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", gender=" + gender +", phone='" + phone + '\'' +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Short getAge() {return age;}public void setAge(Short age) {this.age = age;}public Short getGender() {return gender;}public void setGender(Short gender) {this.gender = gender;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}
}

(二)添加依赖并配置数据库信息: MyBatis Framework 以及 MySQL Driver

添加依赖

在这里插入图片描述
在resource/application.properties配置文件中,填写数据库配置信息

#数据库连接四要素
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_mybatis
spring.datasource.username=root
spring.datasource.password=123456

(三)编写SQL语句(注解/XML)

方式一:注解形式


@Mapper //通知IOC容器进行管理,自动生成代理对象
public interface UserMapper {//查询全部信息@Select("select * from user")List<User> list();
}

(四)数据库连接池

1、概念: 数据库连接池是一个容器,负责分配、管理数据库连接(Connection)。

2、作用: 为应用程序提供现有的数据库连接,释放空闲时间超过最大预设时间的连接,最大程度减少系统资源开销。

3、优势:

  • 资源可重用
  • 提升响应速度
  • 避免数据库连接遗漏

4、常用数据库连接池

  • 标准接口:DataSource
  • 功能:获取连接 Connection getConnection() throws SQLException;
  • 常见连接池:C3P0 (不常用)、DBCP (不常用)、Druid (常用连接池)、Hikari (springboot 默认)

5、Druid连接池

  • 概念:Druid连接池是阿里巴巴开源的数据库连接池项目,其功能强大,性能优秀。
  • 使用连接池:引入Druid连接池依赖即可。

(五)Lombok工具包

  • **概念:**是一个使用的Java类库,能通过注解的形式自动生成构造器,getter/setter,equals,hashcode,toString等方法,并可以自动化生成日志变量,简化Java开发,提高开发效率。
  • 注解表
注解说明
@Getter/@Setter为所有属性提供get/set方法
@ToString给类自动生成易读的toString方法
@EqualsAndHashcode根据类所拥有的非静态字段自动重写equals方法和hashCode方法
@Data提供以上三种方法
@NoArgsConstructor生成无参构造器
@AllArgsConstructor生成非静态变量有参构造器
  • 使用lombok工具类: 添加lombok依赖,添加注解即可。
@Data
@NoArgsConstructor
@AllArgsConstructor
class 实体类{成员变量....成员方法....
}

三、MyBatis动态SQL

(一)XML映射文件

1、规范

  • XML映射文件名必须与Mapper接口名一致,并且将XML映射文件和Mapper放置在同包下(同包同名)
  • XML映射文件的namespace属性与Mapper接口的绝对路径一致。
  • XML映射文件的sql语句的id与mapper接口下的方法名一致,并保持返回类型一致。

2、使用

Mapper接口

public interface EmpMapper{List<Emp> list(String name,Short gender, LocalDate begin, LocalDate end);
}

映射XML

<mapper namespace="xxx.xxx.xxx.EmpMapper"><select id="list" resultType="xxx.xxx.xxx.Emp">select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc</select>
</mapper>

3、快速定位XML映射文件

IDEA编辑器中安装MyBatisX插件

(二)动态SQL

1、概念: 随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL

2、动态SQL标签

  • <if test=“xxxxx”> : 用于判断条件是否成立。test属性用于填写判断条件,若为true,则拼接SQL语句
  • <where>: 只会在子元素含有内容时才会显示在自动忽略省略多余的拼接词 and / or
  • <set>: 只会在子元素含有内容时才会显示在自动忽略省略多余的逗号
  • <foreach collection=“xxx” item=“item” separator=“,” open=“(” close=“)”>: 用于循环SQL参数,collection 表示遍历集合,item 表示遍历的元素,separator 表示遍历分隔符,open 表示遍历开始前拼接的字符,close 表示遍历结束后拼接的字。
  • <sql id=“xxxx”>: 声明存储复用sql片段。
  • ** <include refid=“xxxx”>:** 用于引用sql片段

http://www.ppmy.cn/news/504903.html

相关文章

Go语言切片Slice

1、Go语言切片Slice Go 语言切片是对数组的抽象。 Go 数组的长度不可改变&#xff0c;在特定场景中这样的集合就不太适用&#xff0c;Go 中提供了一种灵活&#xff0c;功能强悍的内置类型切 片(“动态数组”)&#xff0c;与数组相比切片的长度是不固定的&#xff0c;可以追加…

【计算机网络自顶向下】简答题习题总结(二)

目录 第二章 应用层 HTTP FTP文件传输协议 电子邮件 域名系统DNS 内容分发网络CDN 常考问题 题目 第二章 应用层 HTTP 网页&#xff08;Web页&#xff0c;或称文档&#xff09;由许多对象组成&#xff0c;每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻…

建立小型医学数据库(总结)

建立小型医学数据库 小型医学数据库可以用于存储和管理医学数据&#xff0c;如患者病历、药品信息、试验结果等。这对于医疗机构和科研机构来说非常必要&#xff0c;可以提高数据管理和共享的效率&#xff0c;进而促进医学研究和诊疗水平的提升。 建立小型医学数据库有以下基本…

MSP432学习笔记10:串口接收字符串命令并执行任务

今日终于得以继续我的MSP432电赛速通之路&#xff1a; 串口通信是单片机需要学习深入的一个很重要的板块&#xff0c;通过串口&#xff0c;我们可以实现许多数据收发与调试工作&#xff0c;可谓是非常方便快捷。 今日就跟随我的脚步&#xff0c;逐步扎实地学习如何编程MSP432…

mac qq电话时其他媒体声音变小

Terminal printf "p (char)(void(*)())AudioDeviceDuck0xc3\nq" | lldb -n QQ 但是每次用都需要一次&#xff0c;或者下个程序手动调一下 sound control

Dell Inspiron 15R - QQ语音时麦克风没有声音的设置办法

右键扬声器/耳机&#xff08;任务栏的小喇叭图标&#xff09;-》播放设备&#xff08;P)&#xff0c;禁用通讯耳机&#xff1b; 右键扬声器/耳机&#xff08;任务栏的小喇叭图标&#xff09;-》录音设备&#xff08;R)&#xff0c;禁用麦克风/输入端&#xff1b; 对于QQ语音的…

电脑版微信,QQ语音通话耳机听不到对方声音

这是开组会汇报时&#xff0c;发现老师能听到我的声音&#xff0c;我的蓝牙耳机听不到他的声音发现的问题 原以为是系统问题或者是蓝牙耳机问题&#xff0c;结果发现是我的问题 解决方案&#xff1a;在打开微信通话或者QQ通话、分享屏幕前&#xff0c;选择右下角声音&#xff…

直播app与微信qq同时占用麦克风,或者播放音乐时来电,解决麦克风冲突

//来电状态监听public class PhoneVVStateListener {// 电话管理器private TelephonyManager tm;// 监听器对象private MyListener listener;private AudioManager ams null;//音频管理器public void start() {//开始监听tm (TelephonyManager) context.getSystemService(TEL…