java项目后端开发-购物商场mall项目开发笔记

用户模块开发

1.session的使用

Session简单介绍
  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

session.setAttribute("sessionName",Object);
用来设置session值的,sessionName是名称,object是你要保存的对象。
session.getAttribute("sessionName");
用来得到对应名称的session值,即得到object对象,注意需要进行类型转换!

session.removeAttribute("sessionName");移除session中的某项属性,
import org.apache.shiro.session.Session; //导入方法依赖的package包/类
@Override
public void onStop(Session session) {
    if (getAllUserNumber() > 0) {
        logger.info("销毁了一个Session连接:[" + session.getId() + "]");
    }
    session.removeAttribute(Constants.CURRENT_USER);
    redisTemplate.opsForSet().remove(Constants.ALLUSER_NUMBER, session.getId());
}


session.setAttribute("xyyyy",xyyy);保存
session.getAttribute("xyyyy");取得 
你可以把自己要的数据什么的放在session里面传来传去的,很好玩的~

2.get,post

GET和POST是HTTP请求的两种基本方法;GET把参数包含在URL中,POST通过request body传递参数;

3.注解@Controller,@ResquestMapping,@responseBody使用

Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每个请求是如何处理的,这就需要使用@RequestMapping注解类型,它用于映射一个请求或一个方法。使用时可以标注在一个方法或一个类上。@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

4.serializable接口(序列化)

5.注解@JsonIgnore的使用方法及其效果

1.作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

2.使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。
eg:
生成json 时不生成age 属性,使之不在json序列化结果当中


public class user {

private String name;

@JsonIgnore

private int age;
}

6.注解@JsonSerialize

主要应用于数据转换,该注解作用在该属性的getter()方法上,用于在序列化时嵌入我们自定义的代码。
  实际开发中,我们一定遇到过这样的问题:前端显示和后台存储数据单位不统一,而且各有各自的理由,统一不了,那就只能由后端转换。
  每次返回给前端时再转换一遍,返回给前端的json数据,在后端里定义的往往是一个对象,如何做到优雅的转换呢?只需两步操作:
 
  1. 写一个负责转换的类,里面写好规则

public class MySerializerUtils extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String statusStr = "";
         switch (status) {
             case 0:
                 statusStr = "新建状态";
                 break;
             case 1:
                statusStr = "就绪状态";
                 break;
             case 2:
                 statusStr = "运行状态";
                 break;
             case 3:
                 statusStr = "阻塞和唤醒线程";
                 break;
             case 4:
                statusStr = " 死亡状态";
               break;
             default:
                 statusStr = "状态信息不符合";
         }
         jsonGenerator.writeString(statusStr);
     }
 }
  1. 在实体类上需要装换的字段上加上注解
@JsonSerialize(using = MySerializerUtils.class)
private int status;

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
//保证序列化json的时候,如果是null的对象,key也会消失
.....

Mybatis传参,使用@Param

@Param这个注解用于指定key,一旦指定了key,在SQL中即可对应的key入参
Mapper方法如下:

UserInfo selectByUserIdAndStatus(@Param("userId") String userId,@Param("status") Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
    </select>

注解@Service(“serviceName”)

该注解相当于applicationContext.xml配置文件中配置的,表示给当前类命名一个别名,方便注入到其他需要用到的类中。

@Service("iUserService")
//方便接口IUserService注入到其他需要用到的类中,将接口的属性iUserService作为serviceName写入到Service中
public class UserServiceImpl implements IUserService {
......
}

StringUtils.isNoneBlank()方法的使用

看方法名应该是字符串非空并且不是空白

UUID.randomUUID().toString() 的作用

UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法,用来生成唯一识别码。
使用本地缓存检查用户答案的接口

用户忘记密码时验证问题答案重置自己的密码的过程。

1. Guava缓存值CacheBuilder介绍
缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。
通常来说,Guava Cache适用于:
你愿意消耗一些内存空间来提升速度。
你预料到某些键会被查询一次以上。
缓存中存放的数据总量不会超出内存容量。(Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。如果这不符合你的需求,请尝试Memcached这类工具)

LRU 算法

LRU(Least recently used),即最近最少使用算法,该算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
实现过程 1. 新数据将被插入到链表表头; 2. 访问缓存中的数据时,将该数据移动到链表表头; 3. 当链表满时,将链表尾部的数据丢弃。
页面置换算法 LRU 算法,是操作系统中一种典型的内存管理算法。这种页面置换算法的原理是,对于在内存中但又不用的数据块(内存块)叫做 LRU,操作系统会根据哪些数据属于 LRU 而将其移出内存,用于腾出空间来加载另外的数据。

MD5Util加密工具类

分类管理模块开发概要与接口设计

Java泛型:Class 的使用。泛型类的使用。

public ServerResponse<List<Category>> getChildrenParallelCategory(Integer categoryId){
......
}

处理Set对于对象的时候,要注意重写问题

处理Set对于对象的时候,hashCode和equals方法是要一起都写的,
如果两个对象相同,用equals比较相同,那么他们hashCode值一定要相同;如果两个对象的hashCode相同,他们并不一定相同,

商品管理模块开发

学习目标:
FTP 服务的对接
SpringMVC文件上传
流读取Properties配置文件
抽象POJO、BO、VO对象之间的转换关系j及解决思路
joda-time快速入门
静态块
Mybatis-PageHelper高效准确地分布及动态排序
Mybatis对List集合遍历的实现方法
Mybatis对where语句动态拼装的几个版本演变

POJO、BO、VO

Controller层:VO(view object)
Service层:BO(business object)
Dao层:POJO(plain ordinary java object)
简化为POJO、VO
Controller & Service层(两层合并):VO(value object)
Dao层:POJO(plain ordinary java object)

java BigDecimal精确计算

BigDecimal构造方法

  1.public BigDecimal(double val)    
  将double表示形式转换为BigDecimal *不建议使用

  2.public BigDecimal(int val)  
  将int表示形式转换成BigDecimal

  3.public BigDecimal(String val)  
  将String表示形式转换成BigDecimal(强烈推荐,比较而言,通常建议优先使用String构造方法。)

jdbc

Class.forName(“com.mysql.jdbc.Driver”)作用:
Class.forName() 方法要求JVM查找并加载指定的类到内存中,此时将"com.mysql.jdbc.Driver" 当做参数传入,就是告诉JVM,去"com.mysql.jdbc"这个路径下找Driver类,将其加载到内存中。

Java之StringUtils

StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)。

除了构造器,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.xxx()

Mybatis动态SQL之where标签

映射文件中的where标签可以过滤掉条件语句中的第一个and或or关键字。注: where标签只能去除第一个条件中出现的前置 and 关键字,where无法去除掉后面的and关键字,此时sql语句出现语法错误。
【例子】
xml映射文件的部分内容:

<select id="selectIfCondition" resultType="com.heiketu.testpackage.pojo.Product">
    SELECT
        prod_id prodId,
        vend_id vendId,
        prod_name prodName,
        prod_desc prodDesc
    FROM Products
    <where>
        <if test="prodId != null and prodId != ''">
            AND prod_id = #{prodId}
        </if>

        <if test="prodName != null and prodName != ''">
            AND prod_name = #{prodName}
        </if>
    </where>
</select>

以上SQL当prodId!=null时会被mybatis的where标签去除掉多余的and关键字,生成的sql如下:

SELECT
    prod_id prodId,
    vend_id vendId,
    prod_name prodName,
    prod_desc prodDesc
FROM Products
WHERE
    prod_id = ?
AND
    prod_name = ?

注:本篇学习内容来自本人在慕课网购买的从0开始独立完成企业级java电商网站服务端开发(长期维护)(有想学的可以分享,微信号:Double_C9)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、学会各类开发软件安装、项目导入以及项目发布,含项目源码,需求文档,配套软件等 2、该项目主要功能完善,主要用于简历项目经验丰富,以及毕业设计或者二次开发 3、提供项目源码,设计文档、数据库sql文件以及所有配套软件,按照教程即可轻松实现项目安装部署 本课程为素材版,需要实战版的同学可以点击如下链接: 项目实战课程:代码视频讲解版如下java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008java项目之hrm人事管理项目java毕业设计)https://edu.csdn.net/course/detail/23007JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值