- 博客(143)
- 资源 (1)
- 收藏
- 关注
原创 springboot整合mybatis
首先创建一个基本的Spring Boot工程,添加Web依赖,MyBatis依赖以及MySQL驱动依赖创建成功后,添加Druid依赖,完整依赖如下<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
2020-06-27 11:40:25 312
原创 springboot整合jpa
基本概述JPA:Java Persistence API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中的接口规范。jpa具有什么优势?(1)标准化JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。(2)容器级特性的支持JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超
2020-06-26 22:03:00 255
原创 springboot使用jdbc操作数据库
添加相关依赖信息<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connec
2020-06-26 15:57:05 268
原创 SpringBoot构建RESTful API
RESTful介绍RESTful是一种软件架构风格!RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作HTTP协议请求方法 SpringBoot注解 URL 功能说明POST @PostMap
2020-06-25 11:12:17 276
原创 秒杀模块的实现
需求分析所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。秒杀商品通常有两种限制:库存限制、时间限制。(1)商品详细页显示秒杀商品信息,点击立即抢购实现秒杀下单,下单时扣减库存。当库存为0或不在活动期范围内时无法秒杀。(2)秒杀下单成功,直接跳转到支付页面(支付宝扫码),支付成功,跳转到成功页,填写收货地址、电话、收件人等信息,完成订单。(3)当用户秒杀下单5分钟内未支付,取消预订单,调用支付宝支付的关闭订单接口,恢复库存。秒杀技术实现核心思想是运用缓存
2020-06-13 20:37:39 514
原创 支付宝支付的实现
创建youxin_pay_interface的jar工程,依赖pojo创建youxin_pay_service的war工程,除了项目依赖,需要加入支付的依赖<!-- 支付宝支付所需类库包 --><dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.4.27.ALL<
2020-06-12 13:28:37 1202
原创 购物车列表的存储实现
需求分析当我们点击加入购物车的时候,将商品加入到我们的购物车,页面传递到后台的信息是商品的id和数量,我们根据id和数量将商品放进购物车,购物车数据存储到cookie或者是服务器端购物车列表在cookie的存储指的是我们在不登录的情况下也能将商品添加到购物车,这时购物车中的商品信息存储在浏览器端的cookie,用户清除浏览器缓存或者cookie过期后,购物车中就不存在商品信息创建购物车的单个商家对象Cart,List Cart构成了购物车,Cart对象存储的是像京东自营、xx专卖店所包含商品的数据
2020-06-10 00:15:42 437
原创 开源单点登录系统CAS
基本概述什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式
2020-06-08 20:39:47 653
原创 短信微服务
文章目录发送短信测试微服务搭建发送短信测试创建aldy_demo的jar工程导入依赖信息<dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version> </dependency> &l
2020-06-08 11:19:28 265
原创 消息中间件——ActiveMQ
文章目录基本概述ActiveMQ下载与安装消息传递类型类型的点对点和发布订阅Spring整合JMS基本概述模块之间的依赖也称之为耦合。而耦合越多,之后的维护工作就越困难。改善系统模块调用关系、减少模块之间的耦合的一种解决方案----消息中间件。什么是消息中间件?消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色有Producer(生产者)Consumer(消
2020-06-07 00:20:34 569
原创 网页静态化技术Freemarker在分布式项目中的应用
文章目录Freemarker的概述工程搭建需求分析及实现Freemarker的概述网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息,这样的情况同样也适用于使用网页静态化来解决。网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO。另外我们如果将网
2020-06-06 21:57:47 485 1
原创 activeMQ启动失败
执行./activemq start启动后过1秒自动停止查看控制台报错信息./activemq console关键显示java.net.URISyntaxException: Illegal character in hostname at index 13主机名中索引13处的非法字符原主机名:centos6.5修改:centos后启动activemq正常查看主机名:hostname修改主机名:vim /etc/sysconfig/network修改完成后要进行重启linux...
2020-06-05 23:17:25 285
原创 solr的应用(五)多关键字搜索、搜索结果排序、同步索引库
文章目录多关键字搜索处理搜索结果排序多关键字搜索处理在添加条件查询时先对搜索关键字进行替换处理String keywords = (String) searchMap.get("keywords");if (keywords!=null && !"".equals(keywords)){ searchMap.put("keywords",keywords.replace(" ",""));}搜索结果排序导入Sort的包如图所示Sort s = new Sort(
2020-06-05 10:01:30 597
原创 solr的应用(四)商品搜索的过滤查询以及分页显示
前端请求查询的参数{ "keywords": "手机", "category": "", "brand": "三星", "spec": { "网络": "移动3G", "机身内存": "16G" }, "price": "", "pageNo": 1, "pageSize": 20}后端使用 Map进行接收fq 值是一个查询,用于过滤查询结果,在负责查询时,可以很好的提高查询效率判断字符串是否为空用空串和equals方法判断,判断对象是否为空使用n
2020-06-04 17:13:58 309 1
原创 redis的应用(三)与solr的联合查询
文章目录需求分析缓存实现前端接口查询缓存的实现测试需求分析根据搜索关键字,页面显示相关的商品分类,根据相关的商品分类借助分类模板从后台查询出品牌、规格以及规格选项进行显示为了应对高并发,将根据相关的商品分类借助分类模板从后台查询出品牌、规格以及规格选项保存到redis数据库中,查询的时候不再从关系数据库中查询,直接从更快的redis数据库中查询涉及到的数据库表有三个:缓存实现缓存这些数据要在运营商后台管理中进行(因为运营商后台管理对这些数据进行增删改查的操作),查询这些数据是在搜索服务中调
2020-06-04 13:54:31 722
原创 solr的应用(三)solr在分布式项目中的查询
solr在分布式项目中的查询创建jar工程youlexuan_search_interface和war工程youlexuan_search_serviceyoulexuan_search_interface需要依赖youlexuan_pojo<dependencies> <dependency> <groupId>com.youxin</groupId> <artifactId>youlexuan_p
2020-06-03 21:39:03 347
原创 启动服务dubbo报错:连接失败
具体的报错信息:Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /dubboException sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
2020-06-03 20:38:27 892
原创 solr的应用(二)在分布式电商项目中批量导入数据
文章目录项目搭建导入数据到solr项目搭建在父工程中添加依赖<spring-data-solr.version>1.5.5.RELEASE</spring-data-solr.version><dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> <
2020-06-03 16:13:41 266
原创 solr的应用(一)
基本概述Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。Solr是企业级的,快速的,高度可扩展的。为了在CNET网络的公司网站上添加搜索功能,Yonik Seely于2004年创建了Solr。并在2006年1月,它成为Apache软件基金会下的一个开源项目。并于2016年发布最新版本Solr 6.0,支持并行SQL查询的执行。Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Sol
2020-06-03 12:02:00 281
原创 redis缓存应用(二)增删改查的redis
在service层注入redisTemplate对象,在业务代码中通过操作redisTemplate对象的方法实现对redis数据库的增删改查操作redisTemplate的bean是在spring-redis.xml中创建的,交给spring容器管理。@Autowiredprivate RedisTemplate redisTemplate;先在数据库中查询数据,如果查询结果为空,再从数据库中查询,数据库中查询到结果后存入缓存中,这样下次再进行查询的时候就能从缓存中查询到public Li..
2020-06-02 15:22:08 742 1
原创 redis缓存应用(一)
文章目录基本概述安装Spring Data Redis入门Demo基本概述对于网站首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪。那如何解决呢?我们通常的做法有两种:一种是数据缓存、一种是网页静态化redisredis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。jedisJedis是Redis官方推出的一款面向Java的客户端,提供了很多接口
2020-06-02 14:40:36 247
原创 dubbo多个生产者启动报错
报错信息ERROR org.springframework.web.context.ContextLoader - Context initialization failedcom.alibaba.dubbo.rpc.RpcException: Fail to start server具体表现是两个服务相继启动的时候,第二个启动的服务会报错,调换启动顺序后,第一个服务正常启动,第二个服务启动失败原因在于我配置了两个service(生产者),但是这两个生产者的port是相同的,(配置文件是直接粘的第
2020-06-02 09:43:33 454
原创 后端验证用户修改的商品是否属于当前登录用户
后端验证用户修改的商品是否属于当前登录用户分两个验证一个是根据用户修改的商品数据中的商家信息和当前登录的商家信息进行对比另一个是根据用户修改的商品信息中的id,在数据库中进行查询,将查询出来数据中的商家信息和当前登录信息进行对比@RequestMapping("/update")public Result update(@RequestBody Goods goods){ //验证商品是否是当前商家的id Goods goods2 = goodsService.findOne(goods.get
2020-06-01 11:24:13 286 1
原创 接近实际的电商平台添加商品——spu与sku
基本概述什么是spu?SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。什么是sku?SKU=stock keeping unit(库存量单位)SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最多最普遍。
2020-05-31 21:18:16 801
原创 数据库转map类型的list集合以及组合查询
在数据库中brand_ids存储的是字符串类型,我们在后端查询出来的结果也是字符串类型,也就是说我们在后端编辑器里无法对这些map类型的list集合字符串进行list或map操作但这并不影响前端展示这些数据,我们只需要把这些数据以字符串的形式或者整个表返回给前端前端页面将json格式的字符串数组转化成json对象,之后就可以就进行遍历$scope.list = JSON.parse(resp.brandIds);那后端如何将map集合类型的字符串转化成List<Map ?List<.
2020-05-31 13:41:37 431
原创 spring-security密码加密解析
spring security中的BCryptPasswordEncoder方法采用SHA-256 +随机盐+密钥对密码进行加密。SHA系列是Hash算法,不是加密算法,使用加密算法意味着可以解密(这个与编码/解码一样),但是采用Hash处理,其过程是不可逆的。(1)加密(encode):注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进行hash处理,得到密码的hash值,然后将其存入数据库中。(2)密码匹配(matches):用户登录时,密码匹配阶段并没有进行密码解密(因为密码经过Has
2020-05-30 15:17:05 853
原创 spring-security之生产环境的用户登录(查询数据库)
spring-security通过认证类查询数据库中的表:spring-security把用户在前端页面提交的用户名传参给认证类认证类通过用户名在数据库中查询数据认证类将查询结果返回给spring-security,spring-security将认证类返回的数据和页面提交的数据进行比对,如果用户名和密码匹配就登录成功,不匹配则登录失败导入依赖信息<!-- 身份验证 --><dependency> <groupId>org.springframewo
2020-05-30 11:56:11 374
原创 spring-security之生产环境的用户登录(身份验证)以及用户名回显和用户退出
文章目录超级管理员的用户登录(内置,不连接数据库)用户名回显用户退出超级管理员的用户登录(内置,不连接数据库)导入依赖 <!-- 身份验证 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spri
2020-05-29 22:59:16 619
原创 spring_security的demo演示
文章目录spring security简介使用spring_security生成的登陆页面使用自己创建的登陆页面spring security简介Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统
2020-05-29 21:13:32 366
原创 后端返回自定义数组类型数据
返回数据形式:[{“id”:1,“text”:“联想”},{“id”:3,“text”:“三星”},{“id”:2,“text”:“华为”},{“id”:5,“text”:“OPPO”},{“id”:4,“text”:“小米”},{“id”:9,“text”:“苹果”},{“id”:8,“text”:“魅族”},{“id”:6,“text”:“360”},{“id”:10,“text”:“VIVO”},{“id”:11,“text”:“诺基亚”},{“id”:12,“text”:“锤子”}]对应数据表形式
2020-05-29 16:01:54 494
原创 后端接收复杂数据类型——json对象包含类对象和类对象数组
定义一个接收数据的实体类public class Specification implements Serializable { private String specName; private List<TbSpecificationOption> specificationOptionList; public Specification() { } public Specification(String specName, List<Tb
2020-05-29 11:36:32 691
原创 @RequestBody配合@JsonFormat注解实现字符串自动转换成Date
在controller中使用@RequestBody可以自动将字符串转换成int或者将int转换成字符串,但是Date类型则不行比如:@PostMapping("/clockRecords")public String clockRecordsPost(@RequestBody Query query){ return query.getDate()+"";}Query对象中有Date类型的字段,@RequestBody会帮我们把前台传来的json映射成Query对象,为了能够自动转换D
2020-05-27 21:00:36 718
原创 mybatis报错以及dubbo调用方法返回值为空,报空指针异常
本文主要分为起因、经过、结果,由三部分组成,报错异常贯穿全文,如何解决这个异常就成了主线任务。起因是在使用dubbo搭建分布式项目的时候,访问controller,service层返回结果为null,无法拿到数据库中的数据尝试各种解决办法无果无奈在非分布式里测试,报如下异常在pom文件中加入如下所示,成功拿到 数据<resources> <resource> <directory>src/main/java</directory&g
2020-05-27 14:55:36 426
原创 分页返回类PageResult
1、实现序列化接口2、返回数据的rows属性,为了确保传递不同类型的数据,要设置为泛型(其他实体类也都要实现序列化接口)3、无参和有参构造方法public class PageResult implements Serializable { private Long total; private List<?> rows; public PageResult() { } public PageResult(Long total, List<
2020-05-26 21:15:26 1560 1
原创 spring整合mybatis配置sqlSessionFactory时是否要配置mapperLocations
当mybatis的xml文件和mapper接口不在相同包下时,需要用mapperLocations属性指定xml文件的路径。*是个通配符,代表所有的文件,**代表所有目录下但是当mybatis的xml文件和mapper接口在相同包下时,不需要配置mapperLocations属性指定xml文件的路径...
2020-05-26 14:28:05 957
原创 使用dubbo搭建分布式项目
dubbo概述idea搭建项目流程创建如上图所示的项目结构目录,其中record_manager_web和record_service为web项目,父工程为pom工程,其他项目默认为jar工程在父工程的pom文件中添加依赖信息和版本号数据访问模块(record_dao)的依赖对于自己创建的项目只依赖pojo通用实体类模块(pojo)不需要依赖信息服务接口模块仅需要依赖pojo服务模块需要依赖自己的有common、dao和interface其中pojo已经被dao依赖,所以不需要重复依赖m
2020-05-26 13:43:21 370
原创 duubo分布式项目得依赖信息
父工程的依赖信息<properties> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <mysql.version>5.1.41</mysql.version> <druid.version>1.1.5</druid.version> <servle
2020-05-24 16:28:52 184
原创 三级下拉选择框——三级联动
ng-options属性可以在表达式中使用数组或对象来自动生成一个select中的option列表。as前面为真实值,后面为显示值。ng-options与ng-repeat很相似,很多时候可以用ng-repeat来代替ng-options。但是ng-options提供了一些好处,例如减少内存提高速度,以及提供选择框的选项来让用户选择。ng-options="item.id as item.name for item in selectItemCat1List"item in selectIte..
2020-05-18 16:35:17 523
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人