2万字实操入门案例之在Springboot框架下用Mybatis简化JDBC开发实现基础的操作MySQL之预编译SQL主键返回增删改查

环境准备

准备数据库表

use mybatis;-- 部门管理
create table dept(id int unsigned primary key auto_increment comment '主键ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '部门表';insert into dept (id, name, create_time, update_time) values(1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业部',now(),now()),(5,'人事部',now(),now());-- 员工管理
create table emp (id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(32) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',image varchar(300) comment '图像',job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',entrydate date comment '入职时间',dept_id int unsigned comment '部门ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '员工表';INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

创建Springboot工程 引入对应的依赖

<?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><!--所有项目的父工程 指定了springboot工程的版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><!-- Generated by https://start.springboot.io --><!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --><groupId>com.bigdate</groupId><artifactId>Mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>Mybatis</name><description>Mybatis</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--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><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.3</version><scope>test</scope></dependency><!-- druid连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

引入数据库的连接信息

spring.application.name=Mybatisspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/mybatisspring.datasource.username=rootspring.datasource.password=123456spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

创建实体类并用lombok工具 通过注释简化书写

package com.bigdate.mybatis.pojo;import lombok.*;import java.time.LocalDate;
import java.time.LocalDateTime;//@Getter
//@Setter
//@ToString
//@EqualsAndHashCode@Data
@NoArgsConstructor  //无参构造
@AllArgsConstructor //带参构造public class User {//IDprivate Integer id;//用户名private String username;//密码private String password;//姓名private String name;//性别private Short gender;//图像private String image;//职位private Short job;//入职时间private LocalDate entrydate;//部门IDprivate Integer deptID;//创建时间private LocalDateTime creatTime;//修改时间private LocalDateTime updateTime;}

准备好Mapper接口 将数据库中拿到的实体类对象交给ioc容器

package com.bigdate.mybatis.mapper;import com.bigdate.mybatis.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {}

基础工程

删除操作

删除数据库表中的数据

package org.example.mybatis.mapper;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {//根据ID删除数据@Delete("delete from emp where id = #{id}")//返回值代表的是操作影响的数据数public  int delete(Integer id);}
package org.example.mybatis;import org.example.mybatis.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.sql.*;
import java.util.ArrayList;
import java.util.List;@SpringBootTest //springboot整合单元测试的注解
class MybatisApplicationTests {@Autowired//声明接口类型的对象 将此对象注入进来private UserMapper userMapper;@Testpublic void testDelete(){int ans=userMapper.delete(14);//拿到返回值 并且输出到控制台System.out.println(userMapper.delete(ans));}}

一般来说返回值是不需要的

返回值类型都设置为void

预编译SQL

我们不知道Java底层执行了什么样子的SQL语句

所以我们要打开日志

在配置文件中配置

指定输出到控制台

spring.application.name=Mybatis#驱动类名称
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=123456#换数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource#配置mybatis的日志 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

这样就能输出执行的SQL语句

这个语句叫预编译SQL语句

?是预编译过程中的数据占位符

采用这种预编译的方式 性能更高 而且更安全

#和 {} 最后会被 ?替换

SQL具有缓存机制

小结

新增操作

往员工表中插入数据

实际前端页面是一个表单提交数据

基本信息录入完毕后

就能将数据提交到服务端

然后服务端将数据写入数据库

用实体类封装参数

注意字段要一一对应

如果字段名对应不上就难以通过测试

这边改了半个小时

先定义接口方法

再获取接口 写测试类

package org.example.mybatis.mapper;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.pojo.User;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {//根据ID删除数据@Delete("delete from emp where id = #{id}")//返回值代表的是操作影响的数据数public  int delete(Integer id);//新增数据@Insert("insert into emp (id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +"values (#{id},#{username},#{password},#{name},#{gender},#{image},#{job},#{entryDate},#{deptID},#{creatTime},#{updateTime})")public void insert(User user);}
package org.example.mybatis;import org.example.mybatis.mapper.UserMapper;
import org.example.mybatis.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.sql.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest //springboot整合单元测试的注解
class MybatisApplicationTests {@Autowired//声明接口类型的对象 将此对象注入进来private UserMapper userMapper;@Testpublic void testDelete(){int ans=userMapper.delete(14);//拿到返回值System.out.println(userMapper.delete(ans));}@Testpublic void testInsert(){User user=new User();//-- 插入数据//insert into emp(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)//values (133,'Dduo',1234,'多多','1','100.jpg','1',now(),1,now(),now());user.setId(1332);user.setUsername("Dduo");user.setPassword("1234");user.setName("多多");user.setGender((short) 1);user.setImage("1.jpg");user.setJob((short)1);user.setEntryDate(LocalDate.of(2000,1,1));user.setDeptID(1);user.setCreatTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());//执行新增员工信息的操作userMapper.insert(user);}}

写在Mapper接口里的方法

写在测试类里面的启动测试案例

主键返回

在数据添加成功后

需要获取插入数据库数据的主键

例如在添加套餐数据时 还需要维护套餐菜品关系表的数据

我们需要怎么去做呢

代码演示

package org.example.mybatis.mapper;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.example.mybatis.pojo.User;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {//根据ID删除数据@Delete("delete from emp where id = #{id}")//返回值代表的是操作影响的数据数public  int delete(Integer id);//新增数据@Options(useGeneratedKeys = true , keyProperty = "id")@Insert("insert into emp (id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +"values (#{id},#{username},#{password},#{name},#{gender},#{image},#{job},#{entryDate},#{deptID},#{creatTime},#{updateTime})")public void insert(User user);}

更新修改操作

点击操作的编辑按钮时

就会根据当前数据的主键ID

来查找这条数据并将数据回填

我们直接修改

然后提交表单到服务端去完成数据库表结构中数据的修改

写在Mapper接口里的

写在测试类里面

package org.example.mybatis.mapper;import org.apache.ibatis.annotations.*;
import org.example.mybatis.pojo.User;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {//根据ID删除数据@Delete("delete from emp where id = #{id}")//返回值代表的是操作影响的数据数public  int delete(Integer id);//新增数据@Options(useGeneratedKeys = true , keyProperty = "id")@Insert("insert into emp (id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +"values (#{id},#{username},#{password},#{name},#{gender},#{image},#{job},#{entryDate},#{deptID},#{creatTime},#{updateTime})")public void insert(User user);//更新数据@Update("update emp set username=#{username},password=#{password},name=#{gender}," +"gender=#{gender},image=#{image},job=#{job}," +"entrydate=#{entryDate},dept_id=#{deptID},create_time=#{creatTime} ,update_time=#{updateTime} " +"where id=#{id}")public void update(User user);}
package org.example.mybatis;import org.example.mybatis.mapper.UserMapper;
import org.example.mybatis.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.sql.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest //springboot整合单元测试的注解
class MybatisApplicationTests {@Autowired//声明接口类型的对象 将此对象注入进来private UserMapper userMapper;@Testpublic void testDelete(){int ans=userMapper.delete(14);//拿到返回值System.out.println(userMapper.delete(ans));}@Testpublic void testInsert(){User user=new User();//-- 插入数据//insert into emp(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)//values (133,'Dduo',1234,'多多','1','100.jpg','1',now(),1,now(),now());user.setId(14);user.setUsername("Dduo1");user.setPassword("1234");user.setName("多多");user.setGender((short) 1);user.setImage("1.jpg");user.setJob((short)1);user.setEntryDate(LocalDate.of(2000,1,1));user.setDeptID(1);user.setCreatTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());//执行新增员工信息的操作userMapper.insert(user);}@Testpublic void testUpdata(){User user=new User();user.setId(14);user.setUsername("Dduo1");user.setPassword("1234");user.setName("多多");user.setGender((short) 1);user.setImage("1.jpg");user.setJob((short)1);user.setEntryDate(LocalDate.of(2000,1,1));user.setDeptID(1);user.setCreatTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());//执行新增员工信息的操作userMapper.update(user);}}

查看日志 更新的数据为一条

根据ID查询

写在Mapper接口里

写在测试类里面

package org.example.mybatis;import org.example.mybatis.mapper.UserMapper;
import org.example.mybatis.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.sql.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest //springboot整合单元测试的注解
class MybatisApplicationTests {@Autowired//声明接口类型的对象 将此对象注入进来private UserMapper userMapper;@Testpublic void testDelete(){int ans=userMapper.delete(14);//拿到返回值System.out.println(userMapper.delete(ans));}@Testpublic void testInsert(){User user=new User();//-- 插入数据//insert into emp(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)//values (133,'Dduo',1234,'多多','1','100.jpg','1',now(),1,now(),now());user.setId(14);user.setUsername("Dduo1");user.setPassword("1234");user.setName("多多");user.setGender((short) 1);user.setImage("1.jpg");user.setJob((short)1);user.setEntryDate(LocalDate.of(2000,1,1));user.setDeptID(1);user.setCreatTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());//执行新增员工信息的操作userMapper.insert(user);}@Testpublic void testUpdata(){User user=new User();user.setId(14);user.setUsername("Dduo1");user.setPassword("1234");user.setName("多多");user.setGender((short) 1);user.setImage("1.jpg");user.setJob((short)1);user.setEntryDate(LocalDate.of(2000,1,1));user.setDeptID(1);user.setCreatTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());//执行新增员工信息的操作userMapper.update(user);}@Testpublic void testGetById(){User user=userMapper.getById(2);System.out.println(user);}}

控制台进行反馈

但是在控制台中 字段值没有全部封装

而日期类的数据没有封装

在我们进行单元测试的时候我们会发现有些字段没有封装到实体类对象里面

处理方案

但是这种方案比较繁琐 不使用

我们应该打开Mybatis 自动映射开关

驼峰命名自动映射的开关

mybatis.configuration.map-underscore-to-camel-case=true

这样在Mapper接口中既不用手动封装也不用去取别名了

直接把原代码放开

package org.example.mybatis.mapper;import org.apache.ibatis.annotations.*;
import org.example.mybatis.pojo.User;@Mapper//表示当前是Mybatis的一个接口 此时程序运行时框架会自动生成实现类对象(代理对象) 并交给spring的ioc容器
public interface UserMapper {//根据ID删除数据@Delete("delete from emp where id = #{id}")//返回值代表的是操作影响的数据数public  int delete(Integer id);//新增数据@Options(useGeneratedKeys = true , keyProperty = "id")@Insert("insert into emp (id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +"values (#{id},#{username},#{password},#{name},#{gender},#{image},#{job},#{entryDate},#{deptID},#{creatTime},#{updateTime})")public void insert(User user);//更新数据@Update("update emp set username=#{username},password=#{password},name=#{gender}," +"gender=#{gender},image=#{image},job=#{job}," +"entrydate=#{entryDate},dept_id=#{deptID},create_time=#{creatTime} ,update_time=#{updateTime} " +"where id=#{id}")public void update(User user);//查询数据@Select("select * from emp where id=#{id}")public User getById(Integer id);//方案1 给字段起别名 让别名与实体类的属性一致
//    @Select("select id, username, password, name, gender, image, job, " +
//            "entrydate entryDate, dept_id  deptID, create_time creatTime, update_time updateTime" +
//            " from emp where id=#{id}")
//    public User getById1(Integer id);//方案2 通过@Results @Result注解手动映射封装
//    @Results({
//            @Result(column = "entrydate",property = "entryDate"),
//            @Result(column = "dept_id",property = "deptID"),
//            @Result(column = "create_time",property = "creatTime"),
//            @Result(column = "update_time",property = "updateTime")
//    })
//    @Select("select * from emp where id=#{id}")
//    public User getById2(Integer id);}

小结

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

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

相关文章

Naive RAG 、Advanced RAG 和 Modular RAG 简介

简介&#xff1a; RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统是一种结合了检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;的机制&#xff0c;用于提高大型语言模型&#xff08;LLMs&#xff09;在特定任务上的表现。随…

EEL中 python端的函数名是如何传递给js端的

python端的函数名是如何传递给js端的 核心步骤&#xff1a;将函数名列表注入到动态生成的 eel.js 中&#xff0c;这样前端一开始引用的eel.js本身已经包含有py_function的函数名列表了。你打开开发者工具看看浏览器中的 eel.js文件源代码就知道了。 具体实现&#xff1a; # 读…

启明智显分享|国产RISC-V@480MHz“邮票孔”工业级HMI核心板,高品质低成本,仅34.9元!

「Model系列」芯片是启明智显针对工业、行业以及车载产品市场推出的系列HMI芯片&#xff0c;主要应用于工业自动化、智能终端HMI、车载仪表盘、串口屏、智能中控、智能家居、充电桩显示屏、储能显示屏、工业触摸屏等领域。此系列具有高性能、低成本的特点&#xff0c;支持工业宽…

Transformers实战01-开箱即用的 pipelines

文章目录 简介安装pipelines图片转文本文本生成情感分析零训练样本分类遮盖词填充命名实体识别自动问答自动摘要 pipeline 背后做了什么&#xff1f;使用分词器进行预处理将预处理好的输入送入模型对模型输出进行后处理 简介 Transformers 是由 Hugging Face 开发的一个 NLP 包…

读人工智能时代与人类未来笔记03_演变

1. 演变 1.1. 每个社会都找到了属于自己的一套适应世界的方法 1.1.1. 适应的核心&#xff0c;是有关人类心智与现实之间关系的概念 1.1.2. 人类认识周围环境的能力 1.1.2.1. 这种能力通过知识获得&#xff0c;同时也受到知识…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的&#xff0c;也不是多了不起的功能&#xff01;有朋友问&#xff0c;加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果&#xff01; 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法&#xff0c;没有优劣…

【提示学习论文】TCP:Textual-based Class-aware Prompt tuning for Visual-Language Model

TCP:Textual-based Class-aware Prompt tuning for Visual-Language Model&#xff08;CVPR2024&#xff09; 基于文本的类感知提示调优的VLMKgCoOp为baseline&#xff0c;进行改进&#xff0c;把 w c l i p w_{clip} wclip​进行投影&#xff0c;然后与Learnable prompts进行…

您可以使用WordPress创建的19种网站类型

当人们决定为什么他们应该使用WordPress时&#xff0c;我们经常会被问到“WordPress可以做[空白]吗&#xff1f;答案大多是肯定的。在本文中&#xff0c;我们将向您展示您可以使用WordPress创建的19种不同类型的网站&#xff0c;而无需学习任何编程技巧。 目录 隐藏 1 开始使用…

html--地图

<!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><title>ECharts</title><!--Step:1 引入一个模块加载器&#xff0c;如esl.js或者require.js--><script src"js/esl.js"></scr…

SpringBoot项目的项目部署全过程

一、前端 安装nginx 1.将提前准备好的nginx的安装包上传到Linux中/opt目录下(我用的是Xftp) 2.解压 2.1:在xshell中解压该文件: tar -zxvf nginx-1.20.1.tar.gz 2.2:进入解压后的目录 cd nginx-1.20.1/ 2.3:安装需要的依赖 yum -y install zlib zlib-devel openssl openssl-de…

【Doris的安装与部署】

1 集群规划和环境准备 Doris作为一款MPP架构的OLAP数据库&#xff0c;可以在绝大多数主流的商用服务器上运行。 1.1 环境要求 一般推荐使用Linux系统&#xff0c;版本要求是CentOS 7.1及以上或者Ubuntu 16.04及以上&#xff0c;这也是目前服务器市场最主流的操作系统。 操作…

在 CSS 中使用 text-emphasis 来增强文本的趣味性

在CSS中设置文本样式的方法有很多。您可以更改颜色、大小、字体&#xff0c;甚至添加阴影和轮廓等效果。但最近&#xff0c;我了解到一个我以前没有听说过的时尚 CSS 属性&#xff0c;它非常棒&#xff01; 它被称为文本强调&#xff08;text-emphasis&#xff09;&#xff0c…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

基于STM32F401RET6智能锁项目(BS82166A_3触摸按键)

一、BS81x 特征 • 工作电压&#xff1a;2.2V~5.5V • 低待机电流 • 自动校准功能 • 可靠的触摸按键检测 • 自动切换待机 / 工作模式 • 最长按键输出时间检测 • 具备抗电压波动功能 • Level Hold&#xff0c;可选高有效或低有效 • NMOS 输出内建上拉电阻 /CMOS 直接 输出…

TypeScript学习日志-第二十三天(装饰器Decorator)

装饰器Decorator 一、类装饰器 ClassDecorator 其中返回的 target 是 Http 的构造函数&#xff0c;有了构造函数就不会去破坏其自身原有的结构&#xff0c;当我们 Http 里面有多个属性或者方法的&#xff0c;当是我们不想看或者改变它&#xff0c;这时候可以在构造函数中增加即…

【C++】每日一题 17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 可以使用回溯法来解决这个问题。首先定义一个映射关系将数字与字母对应起来…

数学建模——线性回归模型

目录 1.线性回归模型的具体步骤和要点&#xff1a; 1.收集数据&#xff1a; 2.探索性数据分析&#xff1a; 3.选择模型&#xff1a; 4.拟合模型&#xff1a; 5.评估模型&#xff1a; 1.R平方&#xff08;R-squared&#xff09;&#xff1a; 2.调整R平方&#xff08;Ad…

2024CCPC全国邀请赛(郑州)暨河南省赛

2024CCPC全国邀请赛&#xff08;郑州站&#xff09;暨河南省赛 一铜一银&#xff0c;虽不是线下第一次参赛但是第一次拿xcpc奖牌&#xff0c;还有个国赛奖真是不戳。感谢学长&#xff0c;感谢队友&#xff01; 虽然遗憾没有冲到省赛金&#xff0c;不过还有icpc商丘&#xff08…

Golang RPC实现-day01

导航 Golang RPC实现一、主体逻辑设计二、服务设计1、监听和接收请求2、处理请求(1)服务结构体定义(2)确认请求方和服务方编解码格式(3)循环读取请求(4)解析请求的内容(5)响应请求 三、读取和发送数据到连接中代码 Golang RPC实现 先来一个最简单的版本&#xff0c;后续更新。…

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…