
框架系列
文章平均质量分 62
框架
陈鹏的博客
保持常态
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
@Around简单使用示例——SpringAOP增强处理
spring中的aop原创 2023-03-02 14:07:37 · 664 阅读 · 1 评论 -
@Pointcut 使用
spring中的aop转载 2023-03-02 14:00:30 · 724 阅读 · 0 评论 -
spring 中的bean和@Bean
一.Spring bean定义 由Spring IoC容器所管理的对象称为bean。bean被实例化,组装,并通过Spring IoC容器所管理的对象。Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用。bean 就是spring管理的对象二.对bean的理解1.Java原创 2021-05-27 13:34:10 · 404 阅读 · 1 评论 -
resultMap的用法以及关联结果集映射
一.resultType resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中。二.resultMap resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。先在Mapper文件中,配置基本的sql语句<!转载 2021-06-02 10:26:04 · 1162 阅读 · 1 评论 -
SpringMVC 中 @ControllerAdvice 注解的三种使用场景!(*)
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:1.全局异常处理2.全局数据绑定3.全局数据预处理灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用,下面分别来看。全局异常处理使用 @ControllerAdvice 实现全局异常处理,只需要定义原创 2021-10-08 17:11:38 · 169 阅读 · 0 评论 -
spring security系列教程
1.Spring Security最简单全面教程(带Demo)2.Spring Security 工作原理概览3.SpringBoot集成Spring Security(1)——入门程序原创 2021-05-26 17:09:02 · 188 阅读 · 1 评论 -
mybatis 批量将list数据插入到数据库
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法。具体实现代码如下:1.mapper层中创建 insertForeach(List < Fund > list) 方法,返回值是批量添加的数据条数 package com.center.manager.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.cent转载 2021-06-02 15:42:11 · 413 阅读 · 1 评论 -
浅谈Spring @Order注解的使用(*)
注解@Order的作用是定义Spring容器加载Bean的顺序,接下来我们通过分析源码和示例测试详细的学习。1.@Order的注解源码解读注解类:@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})@Documentedpublic @interface Order { /** * 默认是最低优先级 */ in转载 2021-12-20 20:01:17 · 880 阅读 · 0 评论 -
Spring的注解@Qualifier用法(*)
Spring的注解@Qualifier用法在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢?根据注入资源的注解不同实现的方式有一点小小的区别下面上铺垫图请忽略我的红线##在Controller中使用 @Autowired注入时Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一。#转载 2022-02-22 11:25:12 · 241 阅读 · 0 评论 -
for update的作用和用法
一.for update定义for update是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。只有当出现如下之一的条件,才会释放共享更新锁:1.执行提交(COMMIT)语句2.退出数原创 2021-09-21 08:33:22 · 23787 阅读 · 4 评论 -
什么是悲观锁和乐观锁
1.什么悲观锁?顾名思义,悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身锁的机制都是基于悲观锁的机制实现的;特点:可以完全保证数据的独占性和正确性,因为每次请求都会先对数据进行加锁, 然后进行数据操作,最后再解锁,而加锁释放锁的过程会造成消耗,所以性能不高;手动加悲观锁:读锁LOCK tab原创 2021-09-21 15:19:57 · 217 阅读 · 1 评论 -
redis 主从模式,哨兵模式,cluster(集群)模式 简介(*)
详细可以参看《redis官网文档》《redis官网文档》或者《redis中文网》Redis集群方式共有三种:主从模式,哨兵模式,cluster(集群)模式一.主从模式主从模式:是三种集群方式里最简单的。它主要是基于Redis的主从复制特性架构的。通常我们会设置一个主节点,N个从节点;默认情况下,主节点负责处理使用者的IO操作,而从节点则会对主节点的数据进行备份,并且也会对外提供读操作的处理。主要的特点如下:1.主从模式下,当某一节点损坏时,因为其会将数据备份到其它Redis实例上,这样做在很大程度上转载 2021-10-26 20:15:56 · 1901 阅读 · 0 评论 -
一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)
前言:redis有多种模式:单机模式、主从模式、哨兵模式、集群模式1.单机模式安装一个redis,启动起来,业务调用即可。单机在很多场景也是有使用的,例如在一个并非必须保证高可用的情况下。优点:部署简单,0成本。成本低,没有备用节点,不需要其他的开支。高性能,单机不需要同步数据,数据天然一致性。缺点:可靠性保证不是很好,单节点有宕机的风险。单机高性能受限于CPU的处理能力,redis是单线程的。2.主从复制主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服转载 2021-10-27 16:33:08 · 4132 阅读 · 1 评论 -
细说Spring——AOP详解(*)
spring-aop转载 2022-08-18 17:10:59 · 117 阅读 · 0 评论 -
SpringMVC框架理解
springmvc转载 2022-08-18 15:06:40 · 260 阅读 · 0 评论 -
Java MyBatis 插入数据库返回主键
问题?如何在Java MyBatis 插入数据库返回主键?最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记。类似下面这段代码一样获取插入后的主键User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主原创 2021-07-05 17:10:46 · 635 阅读 · 1 评论 -
在SpringBoot中Mybatis显示SQL语句
在SpringBoot中MyBatis显示SQL语句在application.properties中logging.level.com.spring.jiminshiro.mapper=debugMyBatis的interface的包路劲为:com.spring.jiminshiro转载 2021-06-10 17:17:10 · 3502 阅读 · 1 评论 -
mysql/mybatis 批量新增/删除/修改
1.mybatis相关:新增:–返回值为增加的的行数int insertLableBatch(@Param("list")List<UserGroupFilterLabel> list);<insert id="insertLableBatch" parameterType="com.sf.cps.mana.model.UserGroupFilterLabel"> insert into ti_user_group_filter_label (emp_group_i转载 2021-06-10 12:39:32 · 1983 阅读 · 1 评论 -
Mybatis实现批量删除操作
一. 这里主要考虑两种参数类型:数组或者集合而这点区别主要体现在EmpMapper.xml文件中标签的collection属性:(1)当collection=”array“时,表名参数为数组(2)当collection=”list“时,表名参数为集合二. 注意:无论Mybatis是与mysql数据库结合,还是与Oracle数据库,都同样适合如下设置与操作。三. 具体示例如下EmpMapper.xml: <!-- 批量删除员工信息 --> <delete id=转载 2021-06-02 10:15:15 · 4555 阅读 · 1 评论 -
Mybatis介绍
一.Mybatis简介?1.什么是Mybatis?MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement原创 2021-05-12 11:11:29 · 8532 阅读 · 2 评论 -
mybatis常用标签
一.定义sql语句1.select 标签属性介绍:(1)id :唯一的标识符.(2)parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user(3)resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用)<select id="selectByPrimaryKey" resultMap="BaseResultMap" parame.转载 2021-05-27 16:09:02 · 13185 阅读 · 2 评论 -
mybatis缓存机制
一.MyBatis 缓存详解 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。 缓存体系结构: MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache 接口,只有一个默认的实现类 PerpetualCache,它是用HashMap 实现的。我们可以通过 以下类找到这个缓存的庐山真面目DefaultSqlSession -> B转载 2021-05-23 14:01:23 · 176 阅读 · 1 评论 -
Dubbo介绍(*)
一.前言Dubbo是一个分布式、高性能、透明化的 RPC 服务框架,作用是提供服务自动注册、自动发现等高效服务治理方案。二.Dubbo架构图1.Provider:提供者,服务发布方2.Consumer:消费者,服务调用方3.Container:Dubbo容器,依赖于spring容器4.Registry::注册中心,当 Container 启动时把所有可以提供的服务列表上 Registry 中进行注册,作用是告诉 Consumer 提供了什么服务和服务方在哪5.Monitor:监听器6.虚线原创 2021-05-18 10:03:13 · 312 阅读 · 3 评论 -
Shiro框架学习(*)
shiro(java安全框架)Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。主要功能三个核心组件:Subject, SecurityManager 和 Realms.Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物转载 2021-11-04 20:08:02 · 231 阅读 · 0 评论 -
shiro之Realm及相关对象AuthenticationInfo(*)
AuthenticationInfo有两个作用:1)如果Realm 是AuthenticatingRealm 子类(包括AuthorizingRealm,它继承AuthenticationRealm),则提供给AuthenticatingRealm 内部使用的CredentialsMatcher进行凭据验证;(如果没有继承它需要在自己的Realm中自己实现验证);2)提供给SecurityManager来创建Subject(提供身份信息);MergableAuthenticationInfo 用于提.转载 2021-11-16 17:05:52 · 365 阅读 · 0 评论 -
shiro之授权(二) Permission(*)
字符串通配符权限规则:“资源标识符:操作:对象实例ID” 即对哪个资源的哪个实例可以进行什么操作。其默认支持通配符权限字符串,“:”表示资源/操作/实例的分割;“,”表示操作的分割;“*”表示任意资源/操作/实例。1. 单个资源单个权限subject().checkPermissions("system:user:update");用户拥有资源"system:user"的"update"权限2. 单个资源多个权限ini配置文件[users]zhang=123,role1,role2,ro转载 2021-11-17 09:52:09 · 583 阅读 · 0 评论 -
shiro之授权(三)授权流程(*)
流程如下:1.首先调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而SecurityManager接着会委托给Authorizer;2.Authorizer是真正的授权者,如果我们调用如isPermitted(“user:view”),其首先会通过PermissionResolver把字符串转换成相应的Permission实例;3.在进行授权之前,其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限;4.A.转载 2021-11-17 09:55:52 · 271 阅读 · 0 评论 -
shiro之Realm及相关对象AuthorizationInfo(*)
AuthorizationInfo用于聚合授权信息的:public interface AuthorizationInfo extends Serializable { Collection<String> getRoles(); //获取角色字符串信息 Collection<String> getStringPermissions(); //获取权限字符串信息 Collection<Permission> getObjectPermissions(); //获.转载 2021-11-16 16:24:44 · 402 阅读 · 0 评论 -
Shiro过滤器配置(ShiroFilterFactoryBean)(*)
/** * Shiro过滤器配置 */ @Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilter() { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); // Shiro的核心安全接口,这个属性是必须的 shiroFilter.setSecurityM....转载 2021-12-23 21:56:35 · 2097 阅读 · 0 评论 -
shiro之AccessControlFilter(*)
AccessControlFilterAccessControlFilter提供了访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等:abstract boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception; boolean onAccessDenied(ServletRequest request, ServletRespo原创 2021-12-20 21:21:50 · 2906 阅读 · 0 评论 -
Shiro简介(*)
一. Shrio基本功能点:二. 在应用程序角度来观察如何使用Shiro完成工作Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject 都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;SecurityManager:安全管理器;即所有与安全转载 2021-11-16 14:02:46 · 116 阅读 · 0 评论 -
shiro之身份验证 (二) 身份认证流程(*)
流程如下:1.首先调用Subject.login(token)进行登录,其会自动委托给Security Manager,调用之前必须通过SecurityUtils. setSecurityManager()设置;2.SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;3.Authenticator才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现;4.Authenticator可能会委托给相应的Authe.转载 2021-11-17 09:19:23 · 543 阅读 · 0 评论 -
shiro之Realm及相关对象 PrincipalCollection(*)
之前使用过的(来点印象)login("classpath:shiro-authenticator-all-success.ini");Subject subject = SecurityUtils.getSubject();//得到一个身份集合,其包含了Realm验证成功的身份信息PrincipalCollection principalCollection = subject.getPrincipals();Assert.assertEquals(2, principalCollection..原创 2021-11-16 16:56:05 · 926 阅读 · 0 评论 -
shiro之身份验证 (一) 登录、退出(*)
身份验证:即在应用中谁能证明他就是他本人。一般提供如他们的身份ID 一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。在 shiro 中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份:principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。credentials:证明/凭证转载 2021-11-17 09:16:21 · 632 阅读 · 0 评论 -
shiro学习之LifecycleBeanPostProcessor的作用(*)
在使用spring整合shiro的系统中,配置bean的时候往往要配置LifecycleBeanPostProcessor,一直没有深究这个的具体作用,只大概知道是用来管理shiro一些bean的生命周期。今天查了一下源码,总算揭开它的神秘面纱。先来看看日常的配置:<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /><bean id="a转载 2021-12-21 15:35:50 · 1131 阅读 · 1 评论 -
Shiro的Subject对象详解(*)
什么是Subject对象通常我们会将Subject对象理解为一个用户,同样的它也有可能是一个三方程序,它是一个抽象的概念,可以理解为任何与系统交互的“东西”都是Subject。如何获得Subject对象首先创建一个初始化文件shiro.ini[users]root=123,admin,personmanage=123,campaign[roles]admin=*person = xiaoming:*campaign = xiaoming:drive:carusers用户用户名=转载 2021-11-04 16:13:18 · 409 阅读 · 0 评论 -
shiro 之 AuthenticationToken(*)
public interface AuthenticationToken extends Serializable { Object getPrincipal(); Object getCredentials();}上面定义了接口源码,主要是两个接口,一个是获取委托人信息,一个是获取证明,常用的是用户名和密码的组合。这里AuthenticationToken只提供接口,一般我们的实体类包含了get/set方法,但是这里抽出了get方法,方便用户自己扩展所需要的实现。Authe原创 2021-12-21 15:22:09 · 1819 阅读 · 0 评论 -
Shiro 之 SimpleAuthenticationInfo使用(*)
SimpleAuthenticationInfo这里原理很简单,又有一些值得挖掘的东西。 //此处使用的是user对象,不是username SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( user, user.getPassword(), getName() )转载 2021-12-21 15:27:48 · 5386 阅读 · 0 评论 -
Shiro AbstractValidatingSessionManager设计概念(*)
AbstractValidatingSessionManager具体实现了ValidatingSessionManager的行为,覆盖AbstractNativeSessionManager的行为,定义抽象行为具备了SessionValidationScheduler(Session校验任务调度器,set注入方式)、sessionValidationSchedulerEnabled(Session校验任务调度器开关,set注入方式,默认开启);// 如果有必要的话开启Session校验private转载 2021-12-26 14:23:35 · 990 阅读 · 0 评论 -
shiro之授权(一)访问控制(*)
一.简介授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作),其中包括如下对象:1. 主体即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有在授权后才允许访问相应的资源。2. 资源在应用中用户可以访问的任何东西,比如访问JSP 页面、查看/编辑某些数据、访问某个业务方法、打印文本等等都是资源。用户只要授权后才能访问。3. 权限权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作允不允许,不反映谁去执行这个操作。所以后续还需要把权限转载 2021-11-17 09:32:37 · 842 阅读 · 0 评论