A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liweihao5253 初级黑马   /  2019-9-16 16:19  /  1132 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JSON解析
常见的JSON解析器
Jsonlib        官方
Gson        谷歌
fastjson        阿里
jackson(SpringMVC框架内置)

使用jackson
导入jar包
创建Jackson核心对象
入口:ObjectMapper对象
调用ObjectMapper的相关方法进行转换
Java对象转json
writeValue(参数1, obj):  返回void
        参数1:
        File:将obj转换为json保存到文件中
        Writer:将obj转换为json并填充到流
        OutputStream:将obj转换为json并填充到流
        mapper.writeValue(response.getWriter(),obj);
writeValueAsString(obj) //转成json字符串

注解:(注解加在JavaBean的成员变量上)(了解)
@JsonIgnore:忽略属性
@JsonFormat:属性格式转化
        @JsonFormat(pattern="yyyy-MM-dd")

复杂java对象转换
List 转成json会变成json数组  [{},{},{}]
Map 转成json就是普通的json对象  {},注意map的key对应的json的key,map的value是json的value

json反序列化成对象(一般不用,框架自动封装)
mapper = new ObjectMapper();
mapper.readValue(json字符串,类的Class对象);

两种方式将json传递给前端:


#######################################################
redis
概念:是一款高性能的NOSQL系列的非关系型数据库
NoSql:Not Only SQL
特点:
1、数据之间没有关联关系(使用键值对存储)
2、数据存储在内存中(这一点很重要)
3、没有统一标准

操作关系型数据库非常耗时

web1.0 关系型数据库
web2.0 (快手、抖音) nosql数据库脱颖而出

nosql数据库简单部署,免费开源,查询快,扩展方便
缺点:缺乏统一的标准,切换学习成本高

关系型与nosql不是对立的,而是互补的
一般将数据存储在关系型数据库中,然后再nosql的数据库中备份存储关系型数据库的数据
相当于用nosql做缓存

redis应用:
缓存
聊天室
秒杀抢购
应用排行榜
网站访问统计
数据过期处理
分布式集群架构中的session分离

redis端口:6379
使用:先启动server,再启动cli
命令操作
redis的数据结构
        redis存储的是key,value格式的数据
        key是字符串,value有五种数据类型
value的五种数据结构
string:字符串(最基本的类型)
hash:map格式
list:列表,相当于LinkedList
set:相当于HashSet
sortedset:相当于TreeSet

string 用法:
set name zhangsan
get name
del name

hash 用法:相当于map
hset myhash username lisi
hset myhash password 123
hget myhash username
hget myhash password
hgetall myhash
hdel myhash username

list 用法:可以添加一个元素到列表的头部或者尾部(左或者右)
lpush mylist a
lpush mylist b
rpush mylist c
rpush mylist d
顺序为bacd
lrange mylist 0 -1  (取出范围,0到-1代表从0开始取,取到倒数第一个,负数代表倒着数)
lpop mylist (每次删除一个)
rpop mylist

set 用法:无序不可重复
sadd myset a
sadd myset b
smembers myset  (取出所有)
srem myset a(删除a)

sortedset 用法:有序的set
zadd mysort 10 zhangsan      (需要有一个整数值确定排序规则)
zadd mysort 20 lisi
zadd mysort 30 wangwu
zrange mysort 0 -1           (取出范围)
zrange mysort 0 -1 withscores
zadd mysort 40 lisi
zrem myset lisi

通用命令:
keys *:查询所有的键    *可以换成正则表达式
type mylist:根据键获取数据结构类型
del myset:删除指定的键值对

redis持久化(了解)
服务或计算机重启之前会进行持久化
持久化机制:
RDB:默认方式,无需配置
        在一定的时间间隔中,检测key数量的变化情况,然后持久化
AOF:日志记录方式,可以记录每一条命令的操作,可以每一次命令操作后持久化数据,对计算机性能要求高
appendonly no -> appendonly yes
appendfsync 每次操作持久化一次
appendfsync 每隔一秒进行一次持久化
appendfsync 不持久化


Jedis入门
使用java程序操作redis
导入相关jar包
使用步骤:
获取连接
操作
关闭连接

获取连接:
Jedis jedis = new Jedis("localhost",6379);   //空参构造默认localhost,6379,连接本机可以不写参数
操作:
jedis.set("username","zhangsan");
关闭连接
jedis.close();

操作详解:
注意带//注释的api
字符串类型(基本类型):
        jedis.set("","");
        jedis.get("");
        jedis.del("");
        使用
        setex("activecode",20,"5RP2E")     //指定过期时间,将activecode-5RP2E存入redis,20s后自动删除
        应用场景:设定激活码时间
哈希结构:
        jedis.hset("user","name","lisi");
        jedis.hget("user","name");
        jedis.hgetall("user");
        jedis.hdel("user","name");
列表结构:
        List<String> mylist = jedis.lrange("mylist",0,-1);      //列表使用List接收查询结果,其他的同理

集合结构:
        jedis.sadd("myset","java","php","c++");         //这个api可以一次性存储多个值


有序集合结构:
        jedis.zadd("mysort",3,"yase");         //分数是double类型


Jedis连接池:JedisPool
使用方法:
创建JedisPool连接池对象
调用方法 getResource() 方法获取连接池
代码:
JedisPool jedisPool = new JedisPool();
Jedis jedis = jedisPool.getResource();
直接使用jedis即可,然后close()

配置连接池
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal();
config.setMaxIdle();
JedisPool jedisPool = new JedisPool(config,"localhost",6379);

自定义Jedis连接池的工具类
//加载配置文件,提供获取链接的方法
public class JedisPoolUtils {
        private static JedisPool;
        static {
                JedisPoolUtils.class.getClassLoader().
                Properties prop = new Properties();
                prop.load(is);
                JedisPoolConfig config = new
                config.setMaxTotal(prop.getProperty())
                config.setMaxIdle(prop.getProperty())
                JedisPool = new JedisPool(config,prop.getProperty(),prop.getProperty);
        }
        //获取方法的方法
        public static Jedis getJedis(){
                return jedisPool.getResource();
        }

}

案例分析:
缓存在service层
先查缓存
如果缓存没内容
调用dao查询数据库
如果有,直接返回缓存的内容

注意:使用redis缓存一些不经常发生变化的数据
数据库的数据一旦发生改变,则需要更新缓存
数据库表的执行,增删改的相关操作,需要将缓存数据情况,再次存入
在service对应的增删改方法中,将redis数据删除

开发web项目时,代码的编写从哪一层开始,
设置响应格式(text/json)的方式有很多,开发中用哪种方法好?










0 个回复

您需要登录后才可以回帖 登录 | 加入黑马