6、JavaWeb-Mybatis

P116 Mybatis-入门

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

持久层就是三层控制中的Dao层,数据访问层/持久层,

P117 Mybatis-入门-快速入门程序

步骤:

  • 创建springboot工程,数据表和实体类

  • 引入mybatis依赖,配置Mybatis,数据库连接信息,在properites中编写

  • 编写sql语句,基于注解或者基于xml方式

要引入Mybatis Framework和mysql driver

mybatis操作数据库就是在java中编写sql,

按照mybatis规范需要定义一个持久接口mapper,加上注解@Mapper,表明是mybatis的持久接口,

在mybatis中只需要定义mapper接口就可以了,不需要定义实现类,因为程序在运行时框架底层就自动定义了实现类,

依赖解释:

<!--        mysql驱动包--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

建立表格和数据,如图:

在这里插入图片描述

属性与字段是一一对应的。

配置数据库的连接信息可以如下:

#四要素#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc://localhost::3306/javawebstudy-mybatis
#连接数据库的用户
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=12345

SQL语句使用注解的方式实现,放在mapper包中,例如:

@Mapper  // 框架运行时会自动生成该接口的实现类对象(代理对象)
// 并且将该对象交给IOC容器管理
public interface UserMapper {
//    查询全部用户信息// 多条信息封装到集合当中// 加上注解,表名是SQL查询@Select("select * from user")public List<User> list();
}

单元测试的方法应该在test目录中进行,其中@SpringBootTest注解就是springboot整合单元测试的注解,有这个注解单元测试方法在运行的就会自动加载整个环境,创建IOC容器,再通过依赖注入获取到需要的bean对象,

进行单元测试,输出效果如下所示:

在这里插入图片描述

P118 Mybatis-入门-配置SQL提示

默认mybatis中编写SQL语句是不识别的,可以如下配置:
在这里插入图片描述

不提示表名,是因为idea和数据库没有建立连接,不识别表信息,应在idea中配置mysql数据库连接。

P119 Mybatis-入门-JDBC

mybais简化JDBC的使用

JDBC:java database connectivity,使用java操作关系型数据库的一套API

JDBC仅仅是借口,具体的实现依据数据库的不同而不同,各个厂商提供的实现就是驱动,提供数据库驱动jar包。

在这里插入图片描述

使用的是JDBC的接口,真正执行的代码是驱动Jar包中的实现类。

在原始JDBC中,连接数据库信息是写死在java代码中,硬代码,一旦发生变动,代码需要重新更改后打包编译运行,解析封装字段也很繁琐,频繁获取连接,资源浪费

在mybatis中解决方法为:

  • 直接操作properties配置文件

  • Mybatis自动将查询结果进行封装

  • 通过spring.datasource,spring底层会自动采用数据库连接池技术统一管理好分配这些连接,因此执行sql语句的时候,每次从连接池中获取连接就可以了,然后执行sql语句,执行完毕后再将连接归还给连接池,起到复用,类似线程池

P120 Mybatis-数据库连接池

数据库连接池类似线程池,也是一个容器,存储的是数据库的一个个连接对象connection,即负责分配、管理数据库连接connection.

允许应用程序重复使用一个现有的数据库连接,而不是重新再建立一个。

会释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。

优势:

  • 资源重用

  • 提升系统响应速度

  • 避免数据库连接遗漏

实现的标准接口:DataSource

要想获取一个连接,可以使用getConnection()

常见的数据连接池:

  • C3P0

  • DBCP

  • Druid,常用

    • Durid连接池是阿里巴巴开源的数据库连接池项目

    • 功能强大,性能优秀,是java语言最好的数据库连接池之一

  • Hikari,springboot中默认自带

在项目中使用Druid,例如:

  • 先引入相关的起步依赖,假设是springboot2x版本则是下面的
<!--        引入Druid依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>

假设是springboot3x版本则是下面的,

<!--        引入Druid依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version></dependency>

进行单元测试则成功切换到Druid数据池,

在这里插入图片描述

  • 配置数据库连接信息

P121 Mybatis-lombok工具包介绍

使用lombok解决实体类创建的臃肿现象,使用一些注解解决了问题,就不需要再去声明一系列get、set等方法。

lombok是一个实用的java类库,通过注解的形式自动生成构造器、getter/setter、equals、hashcode、tostring等方法,可以自动化生成日志变量,简化java开发,提高效率。

在这里插入图片描述

引入依赖:

<!--        添加lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>

然后实体类可以是:

@Data
public class User {private Integer id;private String name;private Integer age;private Integer gender;private String phone;
}

以后就可以使用lombok的注解简化实体类的定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509376.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【力扣 - 盛最多水的容器】

题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

深入理解MySQL事务:保证数据的一致性和可靠性

摘要&#xff1a;MySQL事务是一种重要的数据库管理技术&#xff0c;能够确保数据的一致性和可靠性。本文将深入探讨MySQL事务的概念、特性、隔离级别以及如何正确使用事务来处理并发访问和保护数据的问题。 一. 什么是MySQL事务&#xff1f; MySQL事务是一系列对数据库进行读写…

AI蠕虫病毒威胁升级,揭示AI安全新危机

一组研究人员成功研发出首个能够通过电子邮件客户端窃取数据、传播恶意软件以及向他人发送垃圾邮件的AI蠕虫&#xff0c;并在使用流行的大规模语言模型&#xff08;LLMs&#xff09;的测试环境中展示了其按设计功能运作的能力。基于他们的研究成果&#xff0c;研究人员向生成式…

Aigtek电压放大器选购注意事项及要求有哪些

电压放大器是电子设备中常用的一种放大器&#xff0c;广泛应用于各种电子设备和通信系统中。选购电压放大器时&#xff0c;需要考虑一些重要的注意事项和要求。下面安泰电子将为大家介绍选购电压放大器时需要注意的一些事项和要求&#xff0c;帮助您在购买过程中作出明智的决策…

Pytorch Geometric 将表格数据集(CSV 文件)转换为图形数据集

导 读 如今图数据集正在以惊人的速度出现&#xff0c;所有化学分子、社交网络和推荐系统主要以图数据结构的形式存储数据 有需要的朋友关注公众号【小Z的科研日常】&#xff0c;获取更多内容。 01、如何转换CSV文件至图形数据结构 确定图形数据所需的基本信息 节点&#xff08;…

LeetCode 刷题 [C++] 第108题.将有序数组转换为二叉搜索树

题目描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 题目分析 由于二叉搜索树的中序遍历是升序的&…

性能问题分析排查思路之机器(3)

本文是性能问题分析排查思路的展开内容之一&#xff0c;第2篇&#xff0c;主要分为日志1期&#xff0c;机器4期、环境2期共7篇系列文章&#xff0c;本期是第三篇&#xff0c;讲机器&#xff08;硬件&#xff09;的网络方面的排查方法和最佳实践。 主要内容如图所示&#xff1a…

Python + Selenium —— 多窗口!

首先我们先理解下什么是窗口的概念&#xff1a;浏览器的 window 概念&#xff0c;一个tab就是一个window。 什么时候会产生多窗口&#xff1a; <a target"_blank" class"cate_menu_lk" href"//jiadian.jd.com">家用电器</a>target&…

巧【二叉搜索树的最近公共祖先】【二叉搜索树的性质】Leetcode 235. 二叉搜索树的最近公共祖先

【二叉搜索树的最近公共祖先】【二叉搜索树性质】Leetcode 235. 二叉搜索树的最近公共祖先 【巧】解法1 利用二叉搜索树有序的性质解法2 采用二叉树求最近公共祖先的方法——后序遍历 ---------------&#x1f388;&#x1f388;235. 二叉搜索树的最近公共祖先 题目链接&#x…

深度学习PyTorch 之 RNN-中文多分类【代码解析】

上篇文章给出了RNN-中文多分类的代码实现&#xff0c;本次主要是对RNN的架构进行一个详细的解析 1、主代码 class RNN(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout):super().__init__()# 初始化函数…

香杆箐骑行记,春回大地

2024年3月2日春回大地之际我们校长骑行群再次踏上征程前往香杆箐。这次骑行不仅是一次对身体的锻炼更是一次心灵的洗礼。 清晨的阳光洒满大地我们从郊野公园后门出发踏上了前往香杆箐的道路。沿途的风景如画绿树成荫鲜花盛开让人心旷神怡。我们沿着山路蜿蜒前行感受着大自然的韵…

UNIapp实现局域网内在线升级

首先是UNIapp 生成apk 用Hbuilder 进行打包 可以从网站https://www.yunedit.com/reg?gotocert 使用自有证书&#xff0c;目测比直接使用云证书要快一些。 发布apk 网站 用IIS发布即可 注意事项中记录如下内容 第一、需要在 iis 的MiMe 中添加apk 的格式&#xff0c;否则无法…