(十四)JavaWeb后端开发——MyBatis

目录

1.MyBatis概述

2.MyBatis简单入门

3.JDBC(了解即可)

4.数据库连接池​

5.lombok 

6.MyBatis基本操作

7.XML映射文件

8.动态SQL

8.1 if标签

8.2 foreach标签

8.3 sql/include标签​


1.MyBatis概述

MyBatis是一款优秀的持久层(DAO)框架,用于简化JDBC的开发,和数据库打交道。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

比如说如果想要查询所有用户的数据,普通SQL语句是select * from users;而MyBatis就是通过java语句操作数据库查询

2.MyBatis简单入门

Day08-14. Mybatis-入门-快速入门程序_哔哩哔哩_bilibili

下面是SpringBoot的MyBatis项目创建后pom.xml配置文件中的常见依赖:

<!-- springboot父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><!-- mybatis起步依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- mysql驱动包,一般默认是最新版本 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- springboot单元测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

在Spring Boot项目中,pojo文件夹通常用来存放“Plain Old Java Objects”,也就是简单的Java对象,比如简单的User类对象

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

接着在mapper文件夹中新建对应的mapper接口,加上Mapper注解,表示是MyBatis中的Mapper接口,@Mapper注解的作用是在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理,在使用时只需要依赖注入即可

import com.mzz.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//加上Mapper注解,表示是MyBatis中的Mapper接口
//注解作用:在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
//在使用时只需要依赖注入即可
@Mapper
public interface UserMapper {@Select("select * from user")public List<User> list();
}

在test测试类中依赖注入,使用@AutoWired注解

import com.mzz.mapper.UserMapper;
import com.mzz.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest //springboot整合单元测试的注解
class MybatisDemoApplicationTests {@Autowired //依赖注入注解private UserMapper userMapper; //依赖注入@Testpublic void testListUser(){List<User> userList = userMapper.list();userList.stream().forEach(System.out::println);}}

3.JDBC(了解即可)

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API,Java程序想要操作MySQL、Oracle等数据库就得通过JDBC这套API实现,但是各个数据库厂商的底层实现是不同的,所以JDBC仅仅只是提供了接口,由各个厂商去实现,封装在一起也就是驱动

JDBC的缺点:不方便,资源浪费,相比之下SpringBoot+MyBatis效率高很多,写在配置文件中

现在都是用MyBatis,不会去用原始的JDBC

4.数据库连接池

需要学习如何切换数据库连接池

5.lombok 

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

使用场景:数据库配套的use类,明明只需要tostring方法但却需要生成一个完整的Javabean类,很麻烦,此时就可以使用lombok的注解优化

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDate;
import java.time.LocalDateTime;@Data //提供get()和set()方法
@NoArgsConstructor //提供无参构造
@AllArgsConstructor //提供全参构造
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;private Integer deptId; //部门IDprivate LocalDateTime createTime;private LocalDateTime updateTime;
}

6.MyBatis基本操作

public interface EmpMapper {//根据主键删除数据@Delete("delete from emp where id = #{id}")public int delete(Integer id);//返回值是影响的记录数,也可以不需要返回值//新增员工@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" + " values (#{username}, #{name}, " +"#{gender}, #{image}, #{job}, #{entrydate}, #{dept_id}, #{create_time}, #{update_time} )");public void insert(User emp);//更新员工//查询员工
}

7.XML映射文件

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL语句更加混乱不堪,因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句

8.动态SQL

随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL,也就是学习各种动态SQL 标签,以下面的SQL语句为例,即使搜索栏只输入一个条件,也会根据三个条件进行查询,比较死板,所以就引出了动态SQL

8.1 if标签

<if></if>

<select id="list" resultType="com.mzz.pojo.Emp">select *from emp<where><if test = "name != null">name like concat('%', #{name},'%')</if><if test = "gender != null">and gender = #{gender}</if><if test = "begin != null and end != null">and entrydate between #{begin} and #{end}</if></where>order by update time desc</select>

8.2 foreach标签

<foreach></foreach>

批量删除员工信息

8.3 sql/include标签

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

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

相关文章

Elasticsearch可视化工具Elasticvue插件用法

目录 1.打开浏览器扩展程序(示例Edge浏览器) ​2.搜索elasticvue并安装 3.打开elasticvue ​4.连接Es 5.有些浏览器无法下载安装扩展&#xff0c;例如谷歌。可以打包扩展给别的浏览器使用。 5.1打开浏览器扩展&#xff0c;打开开发人员模式&#xff0c;记住扩展程序id 5…

数据结构之排序补充

1. 非比较排序 上一篇文章我们罗列了数据结构中排序的八种方法。这八种方法都是需要比较才能实现的&#xff0c;那怎么样才可以通过非比较的方法来实现数组的排序呢&#xff1f;这里就提供一种非比较排序的方法。 具体的操作思路如下&#xff1a; 1. 先统计待比较数组arr中重…

1.62亿元!812个项目立项!上海市2024年度“科技创新行动计划”自然科学基金项目立项

本期精选SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 免费匹配期…

危!这些高危端口再不知道问题就大了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 端口作为网络通信的基本单元&#xff0c;用于标识网络服务和应用程序。 但某些端口由于其开放性和易受攻击的…

C/C++|关于“子线程在堆中创建了资源但在资源未释放的情况下异常退出或挂掉”如何避免?

文章目录 主线程监控子线程状态并负责清理资源使用智能指针&#xff08;RAII模式&#xff09;线程清理处理函数(pthread_cleanup_push、pthread_cleanup_pop)使用资源管理器或资源吃集中管理资源通过信号或全局变量监控线程状态使主线程负责分配和释放资源 在 C/C 中处理子线程…

Excel中截取中文地址转换为省、市、区

使用方法/步骤 首先我们在网页打上方方格子&#xff0c;进入官网&#xff0c;下载方方格子。 解压后进行安装&#xff0c;打开OFFIE中的EXCEL&#xff0c;可以发现新新添加一个DIY工具箱&#xff0c;其中的提取地址功能可以将字符串地址解析为省、市、区 如下图所示

OpenSIPS 转发 JSSIP 注册消息到 FreeSWITCH

OpenSIPS IP 地址&#xff1a;192.168.31.213 FreeSWITCH IP 地址&#xff1a; 192.168.31.166 转发注册消息的路由代码应该是&#xff1a; if (is_method("REGISTER")) {save("location", "r");if ($pr "ws" || $pr "wss&q…

人民法院报:环境侵权诉讼中“虚假鉴定意见”提供者的刑事责任

2023年8月&#xff0c;最高人民法院发布了《关于审理生态环境侵权责任纠纷案件适用法律若干问题的解释》和《关于生态环境侵权民事诉讼证据的若干规定》&#xff08;以下简称《规定》&#xff09;&#xff0c;旨在进一步健全完善生态环境审判法律适用规则体系&#xff0c;推动生…

React.lazy() 懒加载

概要 React.lazy() 是 React 16.6 引入的一个功能&#xff0c;用于实现代码分割&#xff08;code splitting&#xff09;。它允许你懒加载组件&#xff0c;即在需要时才加载组件&#xff0c;而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能&#xff0c…

引入 axios,根据 api 文档生成调用接口

起步 | Axios Docs 安装 axios npm install axios 生成 api 调用接口【可选】 https://github.com/ferdikoomen/openapi-typescript-codegen 安装 npm install openapi-typescript-codegen --save-dev 然后执行生成代码 # http://localhost:8805/api/user/v3/api-docs&a…

Swift 扩展

Swift 扩展 Swift 是一种强大的编程语言&#xff0c;由苹果公司开发&#xff0c;用于iOS、macOS、watchOS和tvOS应用程序的开发。自2014年发布以来&#xff0c;Swift因其易于阅读和编写的语法、现代化的设计以及出色的性能而广受欢迎。本文将探讨Swift的一些关键特性&#xff…

2款使用.NET开发的数据库系统

今天大姚给大家分享2款使用.NET开发且开源的数据库系统。 Garnet Garnet是一款由微软研究院基于.NET开源的高性能、跨平台的分布式缓存存储数据库&#xff0c;该项目提供强大的性能&#xff08;吞吐量和延迟&#xff09;、可扩展性、存储、恢复、集群分片、密钥迁移和复制功能…

ARM-8 定位发布版本 pstree 程序的 main 地址

逆向时如何找到main&#xff0c;如下&#xff1a; 1.readelf -h pstree ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2s complement, little endian Versi…

13.UE5流星火雨,引导施法技能制作

2-15 流星火雨&#xff0c;引导施法技能制作、随机数_哔哩哔哩_bilibili 目录 1.为流星火雨添加按键映射 2.创建流星火雨的动画蒙太奇 3.实现播放动画蒙太奇的逻辑 ​编辑 4.定义发射一波流星火雨的发射物 5.使用动画通知释放流星火雨 1.为流星火雨添加按键映射 创建名为流…

Zabbix5 通过 Rsyslog 实现设备日志收集分析syslog及监控告警

一、概述 本文档详细描述了如何使用 Zabbix5 和 Rsyslog 实现对设备日志的收集、监控以及在满足特定条件下触发告警的完整流程&#xff0c;包括环境准备、Rsyslog 配置、Zabbix5 配置以及常见问题排查等内容。 二、环境准备 服务器环境 操作系统&#xff1a;CentOS&#xff08;…

开源竞争-利用kimi编程助手搭建小程序(11)

开源竞争&#xff1a; 当你无法彻底掌握技术的时候&#xff0c;你就开源这个技术&#xff0c;让更多的人了解这个技术&#xff0c;培养出更多的技术依赖&#xff0c;你会说&#xff0c;这不就是在砸罐子吗&#xff1f;一个行业里面总会有人砸罐子的&#xff0c;不是你先砸罐子&…

mybatis连接PGSQL中对于json和jsonb的处理

pgsql数据库表字段设置了jsonb格式&#xff1b;在java的实体里使用String或者对象转换会一直提示一个错误&#xff1a; Caused by: org.postgresql.util.PSQLException: ERROR: column "xx" is of type jsonb but expression is of type character varying 需要加一…

Web大型网站的性能测试要求和工具方法

Web大型网站的性能测试要求和工具方法涉及多个层面的考量&#xff0c;旨在确保网站在高并发访问、大数据量处理、复杂交互场景下仍能保持良好的用户体验和系统稳定性。以下是针对大型网站性能测试的主要要求和相应的工具与方法&#xff1a; 性能测试要求 1. 高并发处理能力&…

Java 处理 json 格式数据解析为 csv 格式

Java处理json格式数据解析为csv格式 如果不使用 JSON 工具库&#xff0c;你可以手动解析 JSON 格式字符串并将其转换为 CSV 格式字符串。 以下是一个简单示例&#xff0c;展示如何实现这一功能。 示例代码 下面的示例代码手动处理 JSON 字符串&#xff0c;将其转换为 CSV 格式字…

python+智谱AI-实现钉钉消息自动回复

python智谱AI-实现钉钉消息自动回复 实现了电脑窗口切换&#xff0c;截图识别未读消息&#xff0c;与语言模型交互后&#xff0c;将答案带入到钉钉窗口中。偷个懒&#xff0c;直接贴代码了&#xff0c;后续不断完善注释&#xff0c;如果遇到读不懂的地方&#xff0c;欢迎交流。…