JdbcTemplate源码介绍
桥接模式就是把一个大类拆分成多个小类,不需要过多层次的继承
在使用对象的时候,传入数据源接口
在数据源接口可以看到,有不同的数据源实现类,只需要在jdbcTemplate传入不同的实现类
就可以操作对应数据源的功能,执行增删改查
在每个数据源内部都会自己去连接数据库,使用的时候 不需要关心你内部到底是怎么实现的
我们在使用easyexcel的时候,在监听器中不能使用@Autowired 这样注入 会是null
需要通过构造注入的方式传进来,但是每一个导入模版都需要一个监听类,太过麻烦了
那么我们使用桥接模式来改造下
项目使用springcloud alibaba
引入pom
4.0.0
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
1.8
UTF-8
UTF-8
2.3.7.RELEASE
2.2.2.RELEASE
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
com.baomidou
mybatis-plus-boot-starter
3.5.1
mysql
mysql-connector-java
8.0.16
com.alibaba
druid
1.1.14
org.projectlombok
lombok
true
com.alibaba
easyexcel
3.1.0
com.alibaba
fastjson
1.2.47
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
2.3.7.RELEASE
com.example.demo.DemoApplication
repackage
repackage
配置application.properties
# 应用名称
spring.application.name=kucun
server.port=8089
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/dmg?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis-plus.mapper-locations=classpath:mappers/*.xml
# 控制台打印sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
创建表结构
CREATE TABLE `chu_chai` ( `id` bigint NOT NULL AUTO_INCREMENT, `cc_name` varchar(50) DEFAULT NULL COMMENT '出差名称', `cc_day` int DEFAULT NULL COMMENT '出差天数', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `qingjia` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL COMMENT '请假名称', `day` int DEFAULT NULL COMMENT '请假天数', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='请假表';
实体类
package com.example.demo.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class CcData {
@ExcelProperty("出差名称")
private String ccName;
@ExcelProperty("出差天数")
private Integer ccDay;
}
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("chu_chai")
public class ChuChai {
//主键
@TableId(type = IdType.AUTO)
private Long id;
//出差名称
private String ccName;
//出差天数
private Integer ccDay;
}
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("qingjia")
@Data
public class QingJia {
//主键
@TableId(type = IdType.AUTO)
private Long id;
//请假名称
private String name;
//请假天数
private Integer day;
}
package com.example.demo.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class QjData {
@ExcelProperty("请假名称")
private String name;
@ExcelProperty("请假天数")
private Integer day;
}
dao层
package com.example.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.ChuChai;
public interface ChuChaiDao extends BaseMapper {
}
package com.example.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.QingJia;
public interface QingJiaDao extends BaseMapper {
}
接口层
CommonService是公共的上传接口,其他实现类实现这个接口,在传入监听器类的时候,传入对应的实现类就可以了
package com.example.demo.service;
import java.util.List;
public interface CommonService {
/**
*
* 添加
* @param
* @return
* @throws Exception
*/
public void add(List list);
}
package com.example.demo.service.impl;
import com.example.demo.dao.ChuChaiDao;
import com.example.demo.dao.QingJiaDao;
import com.example.demo.entity.CcData;
import com.example.demo.entity.ChuChai;
import com.example.demo.entity.QingJia;
import com.example.demo.service.CommonService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CcServiceImpl implements CommonService {
@Autowired
private ChuChaiDao chuChaiDao;
@Override
public void add(List list) {
for (int i = 0; i < list.size(); i++) {
//解析对象
CcData data=(CcData) list.get(i);
//转换成操作数据库实体
ChuChai chuChai=new ChuChai();
BeanUtils.copyProperties(data,chuChai);
// todo 你们可以写成批量的接口,我这里只是模拟下数据
chuChaiDao.insert(chuChai);
}
}
}
package com.example.demo.service.impl;
import com.example.demo.dao.QingJiaDao;
import com.example.demo.entity.CcData;
import com.example.demo.entity.ChuChai;
import com.example.demo.entity.QingJia;
import com.example.demo.entity.QjData;
import com.example.demo.service.CommonService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class QjServiceImpl implements CommonService {
@Autowired
private QingJiaDao qingJiaDao;
@Override
public void add(List list) {
for (int i = 0; i < list.size(); i++) {
//解析对象
QjData data=(QjData) list.get(i);
//转换成操作数据库实体
QingJia qj=new QingJia();
BeanUtils.copyProperties(data,qj);
// todo 你们可以写成批量的接口,我这里只是模拟下数据
qingJiaDao.insert(qj);
}
}
}
公共的导入监听器
package com.example.demo.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.fastjson.JSON;
import com.example.demo.service.CommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
*
* 公共的excel导入监听器
* @param
* @return
* @throws Exception
*/
@Slf4j
public class CommonListener extends AnalysisEventListener {
private List list = new ArrayList<>();
/**
*
* 在监听器中不能使用@Autowired 这样注入 会是null
所以我们这里通过构造注入的方式传进来
* @param
* @return
* @throws Exception
*/
private CommonService commonService;
public CommonListener(CommonService commonService){
this.commonService=commonService;
}
@Override
public void invoke(Object data, AnalysisContext context) {
log.info("解析到一条数据:{}", data);
list.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
log.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", list.size());
//调用公共的添加接口
commonService.add(list);
log.info("存储数据库成功!");
}
}
请假控制层
往监听器类传参只需要传入对应的接口就行
package com.example.demo.controller;
import com.alibaba.excel.EasyExcel;
import com.example.demo.entity.QjData;
import com.example.demo.listener.CommonListener;
import com.example.demo.service.impl.QjServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
public class QingJiaController {
@Autowired
private QjServiceImpl qjService;
@PostMapping("qj/upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), QjData.class,
new CommonListener(qjService)).sheet().doRead();
return "success";
}
}
出差控制层
往监听器类传参只需要传入对应的接口就行
package com.example.demo.controller;
import com.alibaba.excel.EasyExcel;
import com.example.demo.entity.CcData;
import com.example.demo.entity.QjData;
import com.example.demo.listener.CommonListener;
import com.example.demo.service.impl.CcServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
public class CcController {
@Autowired
private CcServiceImpl ccService;
@PostMapping("cc/upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), CcData.class,
new CommonListener(ccService)).sheet().doRead();
return "success";
}
}
创建一些模拟数据
调用接口进行测试
可以看到数据已经落入到数据库中了
装饰器模式就是不改变原有的的结构,使用类包裹着这个接口,对齐进行增强
我们使用的new CommonListener就是装饰器模式,包裹着(接口)
你可能感兴趣的:(springboot,桥接模式)
OpenAPI Generator Maven 插件配置详解(SpringBoot集成)
txzq
maven spring boot java Generator OpenAPI
0-1开始Java语言编程之路一、Ubuntu下Java语言环境搭建|MacOS下使用Jenv管理多JDK版本二、Ubuntu下Docker环境安装|MacOS下Docker安装与配置三、使用Docker搭建本地NexusMaven私有仓库四、Ubuntu下使用VisualStudioCode进行Java开发五、从Swagger到OpenAPI,SpringBoot集成StepByStep六、Op
Nginx代理Redis哨兵主从配置
Rewloc
springboot redis Redis主从复制 哨兵模式 redis nginx nginx
Nginx代理Redis哨兵主从配置一、环境Nginx版本:1.21.6Center7.5及以上或MasOS搭建Redis哨兵主从模式Springboot集成Redis哨兵主从模式提示:Nginx必须安装upstream模块二、配置Nginx配置有三个方案(详见后续内容),其中:方案一将哨兵所有节点使用一个端口对外映射;方案二是每个哨兵端口配置一个对应的映射端口,总体和正常哨兵配置方式无差别;方案
redis分布式锁
JLiuli
redis 分布式锁 java
什么是分布式锁在分布式系统下,通过锁机制来控制资源的访问,与传统的单体项目中的synchronized,他是基于jvm的锁,即在一个springboot服务下能保证线程同步的问题,但现在我们大部分的项目部署不局限于一台服务器,此时会出现多把jvm锁无法保证对数据的互斥原则。分布式锁就像是把锁单独抽出来为一个应用,让所有springboot项目公用同一把锁。分布式锁的特点1.互斥性:任意时刻锁只能被
SpringBoot 启动报错 Sactive: @spring.profiles.active@
JefferyAnd
spring spring boot 后端
org.yaml.snakeyaml.scanner.ScannerException:whilescanningforthenexttokenfoundcharacter'@'thatcannotstartanytoken.(Donotuse@forindentation)in'reader',line25,column13:active:@spring.profiles.active@^解决办
社团周报系统可行性研究-web后端框架对比-springboot,django,gin
拉玛干
数据库 spring python golang
对于目前市面上web后端框架,我主要了解到的就是springboot,djangogin等,分别对应javapythongo三种语言,目前我比较熟悉的就是springboot目录springboot框架简介优点缺点适用场景与需求匹配度django框架简介优点缺点适应场景与需求匹配度gin框架简介优点缺点适用场景与需求匹配度springboot框架简介Spring是一款开源的轻量级java开发框架,
Java连接Zookeeper,创建监听通知机制
永旗狍子
Spring Linux zookeeper java
目录一.Java连接Zookeeper1.创建Springboot工程,导入依赖1.1排除log4j和桥接包2.配置application.yml3.编写连接Zookeeper的工具类4.监听通知机制4.1在zookeeper容器内部新增节点一.Java连接Zookeeper1.创建Springboot工程,导入依赖org.springframework.bootspring-boot-start
springboot+es批量新增、批量修改、根据内部id批量查询
程序小增
elasticsearch spring boot java
pom.xml配置org.elasticsearch.clientelasticsearch-rest-high-level-client7.8.0elasticsearchorg.elasticsearchelasticsearch-rest-clientorg.elasticsearch.clientorg.springframework.bootspring-boot-starter-dat
swagger-01-swagger介绍
褚师子书
swagger java spring boot restful
swagger1.学习目标:了解前后端分离了解Swagger的作用和概念在SpringBoot中集成Swagger1.1swagger由来前后端分离,当前流行的开发模式Vue+SpringBoot早先的后端时代:前端只用管理静态页面;后端将html用模板引擎JSP进行开发前后端分离式时代:后端:后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层【前端团队】mock后端数据json,
springboot生成二维码在word文档,并下载到本地
尼古拉骚
springboot+IO流 java spring javascript
springboot生成二维码在word文档,并下载到本地分为两部分演示,第一部分简单的生成word文档并保存到本地;第二部分生成二维码在word文档,并保存到本地。第一部分首先引入word的依赖资源com.lowagieitext2.1.7com.lowagieitext-rtf2.1.7com.itextpdfitext-asian5.2.0创建Word,并且写入IO流中,前端获取文件流才能保
java.lang.NoClassDefFoundError: com/google/gson/Strictness
顽皮小书生
异常问题解决 java
Springboot(版本3.4.0)项目引入Gson(版本2.10.1)包,启动一直报错报错内容java.lang.NoClassDefFoundError:com/google/gson/Strictnessatjava.base/java.lang.Class.getDeclaredFields0(NativeMethod)atjava.base/java.lang.Class.privat
【微服务】SpringBoot 整合Redis Stack 构建本地向量数据库相似性查询
小码农叔叔
AI大模型实战与应用 springboot 入门到精通 向量数据库 redis stack java使用向量数据库
目录一、前言二、向量数据库介绍2.1什么是向量数据库2.2向量数据库特点2.3向量数据库使用场景三、常用的向量数据库解决方案3.1Milvus3.1.1Milvus是什么3.1.2Milvus主要特点3.2Faiss3.2.1Faiss是什么3.2.2Faiss主要特点3.3Pinecone3.3.1Pinecone是什么3.3.2Pinecone主要特点3.4Weaviate3.4.1Weavi
实际springboot项目中如何注意jvm调优
种豆走天下
spring boot jvm 后端
在SpringBoot项目中进行JVM调优是一个重要的任务,可以帮助提高应用程序的性能和稳定性。JVM调优可以涵盖内存管理、垃圾回收、线程管理以及其他JVM配置等多个方面。以下是一些常见的JVM调优策略,适用于SpringBoot应用:1.内存配置JVM的内存管理是影响SpringBoot应用性能的关键因素之一。你可以通过调整堆内存和非堆内存的大小来优化应用的性能。a.堆内存大小(-Xms和-Xm
SpringMVC的国际化
小胖子许愿
Spring spring
SpringMVC的国际化WebMVC的核心LocaleResolver,MessageSource。WebMvcAutoConfiguration是SpringBoot中的Web方面的自动配置类。在MVC的配置类里面,如果没有自定义的LocaleResolver,那么就会使用默认的。并且自定义的名称是“localeResolver”,才不会加载默认的。默认使用的是AcceptHeaderLoca
Spring Boot整合Spring Security与JWT实现无状态认证:实战指南
老哥不老
笔记 spring spring boot 数据库
SpringBoot整合SpringSecurity与JWT实现无状态认证:实战指南一、JWT认证原理简介JSONWebToken(JWT)是一种开放标准(RFC7519),由三部分组成:Header(头部):声明令牌类型和签名算法Payload(负载):携带用户身份信息Signature(签名):防篡改验证认证流程:客户端提交登录凭证服务端验证通过后生成JWT客户端后续请求携带JWT服务端验证J
Spring Boot 集成海康SDK-Java:快速实现视频监控系统
伊勇发Drake
SpringBoot集成海康SDK-Java:快速实现视频监控系统【下载地址】SpringBoot集成海康SDK-JavaSpringBoot集成海康SDK-Java项目地址:https://gitcode.com/open-source-toolkit/1176a项目介绍在现代化的视频监控系统中,海康威视的设备广泛应用于各种场景。为了方便开发者快速集成海康SDK-Java到SpringBoot项
Spring Boot 消息队列(以RabbitMQ为例)
珠峰日记
java-rabbitmq spring boot rabbitmq
文章目录RabbitMQ简介与安装1.RabbitMQ简介2.RabbitMQ安装SpringBoot集成RabbitMQ1.创建SpringBoot项目2.配置RabbitMQ3.定义消息队列和交换机4.发送消息5.接收消息6.测试消息发送和接收RabbitMQ简介与安装1.RabbitMQ简介RabbitMQ是一个开源的消息代理和队列服务器,基于AMQP(高级消息队列协议)实现。它具有以下特点
使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控
William Dawson
spring boot
使用SpringBoot实现前后端分离的海康威视SDK视频监控系统,可以分为以下几个步骤:1.系统架构设计前端:使用Vue.js、React或Angular等前端框架实现用户界面。后端:使用SpringBoot提供RESTfulAPI,负责与海康威视SDK交互。通信:前后端通过HTTP/WebSocket进行通信。视频流:通过海康威视SDK获取视频流,并使用RTSP/RTMP/HLS等协议推送到前
Spring Boot 基础日志打印(Logback 在 application.yaml 文件中的配置)
我命由我12345
Java - 简化库与框架编程 spring boot logback java-ee java intellij-idea 后端 spring
一、Logback在SpringBoot中,日志框架默认使用的是Logback,SpringBoot提供了对日志配置的简化SpringBoot默认会将日志输出到控制台,并且日志级别为INFO可以在application.yaml或application.properties文件中进行日志配置如果需要自定义日志配置,可以使用logback-spring.xml文件,SpringBoot会自动加载该文
SpringBoot 自动配置原理详解
蒂法就是我
spring boot java mybatis
SpringBoot的自动配置是其核心特性之一,它允许开发者通过最小化配置来快速启动应用程序。自动配置基于“约定优于配置”的原则,使得javer可以更专注于业务逻辑,而不必关注繁琐的配置。自动配置的基本工作原理SpringFactoriesSpringBoot利用META-INF/spring.factories文件来加载自动配置类。在这个文件里,有一个关键的入口org.springframewo
【Spring Boot 接入 MongoDB】
龙少9543
后端 spring boot mongodb 后端
【SpringBoot接入MongoDB】在SpringBoot项目中接入MongoDB是一个常见的需求,以下是详细的步骤和配置方法:1.添加依赖在pom.xml文件中添加SpringDataMongoDB的依赖。org.springframework.bootspring-boot-starter-data-mongodb如果你使用的是Gradle,可以添加以下内容:implementation
Spring Boot 切面执行优先级配置指南
蓝田~
spring boot 后端 java
引言在SpringBoot应用开发中,切面编程(AOP)是一项强大的功能,它允许我们将横切关注点(如日志记录、事务管理、权限控制等)从业务逻辑中分离出来,以提高代码的可维护性和可扩展性。当存在多个切面时,了解和控制切面的执行优先级顺序就显得尤为重要。本文将深入介绍SpringBoot框架中切面执行优先级顺序的使用方式。切面优先级的概念在SpringAOP中,切面的优先级决定了多个切面在目标方法执行
SpringBoot对接外部API三大绝技:RestTemplate vs WebClient vs Feign,你Pick哪个?
墨瑾轩
一起学学Java【一】 java
在SpringBoot应用中调用外部接口是常见的需求,通常用于集成第三方服务、微服务间通信等场景。以下是三种常用的调用外部接口的方式,包括代码示例和详细注释:1.使用RestTemplateRestTemplate是Spring提供的一个用于访问REST服务的客户端模板类,它简化了HTTP请求的处理过程。 Javaimportorg.springframework.beans.factory.an
springboot webflux webclient 使用示例
o_瓜田李下_o
webflux
springbootwebfluxwebclient使用示例************************示例HelloController@RestControllerpublicclassHelloController{@RequestMapping("/hello")publicMaphello(ServerWebExchangeexchange){exchange.getRequest(
【Spring】WebClient之请求头设置、超时设置
九师兄
boot spring java spring boot
1.概述I.项目环境本项目借助SpringBoot2.2.1.RELEASE+maven3.5.3+IDEA进行开发1.依赖使用WebClient,最主要的引入依赖如下(省略掉了SpringBoot的相关依赖,如对于如何创建SpringBoot项目不太清楚的小伙伴,可以关注一下我之前的博文)org.springframework
springboot中Webclient对象怎么禁止缓存、保证每次数据都属来源后端
阿里嘎多学长
spring boot 缓存 数据库
在SpringBoot中,使用WebClient对象进行HTTP请求时,可以通过配置请求头来禁止缓存,确保每次请求都能从后端获取最新的数据。以下是一些常用的方法来实现这一目的:设置Cache-Control请求头:在发起请求时,可以设置Cache-Control请求头为no-cache,这会告诉服务器和任何中间缓存,不应使用缓存的响应来满足请求。WebClientwebClient=WebClie
SpringBoot集成Sentry日志收集-2 (Sentry修改语言为中文)
欢乐少年1904
spring boot sentry 后端
Sentry修改成中文英文状态是不太友好,对于我这个英文不好的人来说,我用的一切开发软件,全是中文
基于springboot+ollama实现大模型接入项目的小白笔记
河禾合和
spring boot 笔记 后端 llama
org.springframework.ai无法被maven加载的问题问题原因:阿里镜像没有这个库共用库中只保存了0.8.1的测试版本解决方法:参考了这个视频https://www.youtube.com/watch?v=dffEF9ORVUg学习视频中方法使用springinitializr这个工具进行项目的生成具体参数如下图在右边依赖中搜索ollama加载ai依赖,以及springweb依赖,
Spring Boot 缓存最佳实践:从基础到生产的完整指南
天才选手Yoke
java springboot spring boot 缓存 后端 redis
SpringBoot缓存最佳实践:从基础到生产的完整指南引言在现代分布式系统中,缓存是提升系统性能的银弹。SpringBoot通过spring-boot-starter-cache模块提供了开箱即用的缓存抽象,但如何根据业务需求实现灵活、可靠的缓存方案?本文将带您从零开始,逐步构建符合生产要求的缓存系统。一、基础篇:5分钟快速接入1.1最小化配置pom.xml依赖org.springframewo
Spring Boot 3.0深度实战:从核心特性到生产级调优
Code_Cracke
Java spring boot 后端 java
一、SpringBoot3.0核心特性解读1.1JDK17LTS支持(实测性能提升)记录类(Record)与SpringDataJPA完美适配模式匹配简化类型判断密封类(SealedClass)增强DTO安全性//使用Record优化DTOpublicrecordUserDTO(@NotBlankStringusername,@EmailStringemail){}//密封接口定义响应类型publ
MyBatis-Plus开发流程:Spring Boot + MyBatis-Plus 实现对 book_tab 表的增删改查及Redis缓存
Darling &you&
mybatis 缓存 spring boot
前言MyBatis-Plus是一个MyBatis的增强工具,旨在简化开发、减少工作量。本文将介绍如何使用SpringBoot集成MyBatis-Plus来操作数据库,并结合Redis实现数据的缓存功能。1项目搭建1.1创建SpringBoot项目可以通过SpringInitializr快速创建一个新的SpringBoot项目,选择必要的依赖如SpringWeb,MyBatisPlus,MySQLD
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
js jquery keydown keypress keyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){
AngularJS中的Promise
bijian1013
JavaScript AngularJS Promise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java 递归 scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScript ext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
java spring AOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java 算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
java netty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filter listener servelt 生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux 正则表达式 替换 查找 vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP 打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linux linux sed工具 sed工具 linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.net C# asp.net hovertree webform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构 笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组 c/c++ 指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息