欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-02 11:18:02
项目开发笔记用户模块开发1.session的使用2.get,post3.注解@Controller,@ResquestMapping,@responseBody使用4.serializable接口(序列化)5.注解@JsonIgnore的使用方法及其效果6.注解@JsonSerializeMybatis传参,使用@Param注解@Service("serviceName")用户模块开发1.session的使用Session简单介绍  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(ses...

用户模块开发

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)

本文地址:https://blog.csdn.net/qq_39568387/article/details/108904717