使用Jedis访问数据库中的javaBean对象

方式一和方式二两种不同的存取方式

 

学习引导:

方式一:使用Json,将对象转化为Json字符串,然后存到数据库中,再通过Json将字符串转换为我们需要的对象即可!!

方式二:Jedis可以存储byte[ ]类型的数组,我们可以将对象转化为二进制数组存入Redis数据库中,然后需要的时候再将二进制数组转化为User对象即可

序列化的概念:对象转化为二进制数组

反序列化:二进制数组转化为对象。


学习引导:

在学习了Jedis后,我们知道Jedis可以操作Redis数据库中的5种类型 分别是(String,List,Set,ScoreSet,Hash)

那么怎样往Redis数据库中存储javaBean对象呢?

思路一:我们知道使用Jedis操作数据库只能存String类型的键和Byte【】类型的数组

     所以我们是不是可以使用toString的方法来存取,但是存取出来怎样转换为对象呢?

    学习Ajax后,我们知道还有一种东西可以随意的切换字符串和对象        json!json!!!json!!!!!

 

方式一:使用Json,将对象转化为Json字符串,然后存到数据库中,再通过Json将字符串转换为我们需要的对象即可!!

我们开始操作

①:需要一个pojo类。我们创建一个实体类:

package com.bjsxt.pojo;

import java.io.Serializable;

/**
 * 用户实体类
 * */
public class User implements Serializable{
	private String name;
	
	private String sex;
	
	private Integer age;
	
	

	public User() {

	}

	public User(String name, String sex, Integer age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
	
	
	
}

②添加依赖,我们需要阿里的fastJson以及Jedis依赖还有测试Junit依赖:(在Pom文件中添加依赖)

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.bjsxt.jedis.object</groupId>
	<artifactId>jedis-object</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.2</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.58</version>
		</dependency>
	</dependencies>
</project>

③通过json将对象转化为Json类型的字符串存储进去,然后再取出Json字符串,最后转化为对象即可:

/***
	 * 将对象转化为json字符串进行存储
	 * 取出是再将json字符串转化为对象即可
	 */
	@Test
	public void jedisObjectTest() {
		User user=new User("lht","男",22);
		Jedis jedis=new Jedis("192.168.224.11",6379);
		//将user对象转化为json对象
		String userJson = JSON.toJSONString(user);
		jedis.set("user", userJson);
		//取值 此时为Json类型的字符串
		String userString = jedis.get("user");
		//将json字符串转化为User对象
		User user2 = JSON.parseObject(userString, User.class);
		System.out.println(user2);
	}

 

 

方式二:Jedis可以存储byte[ ]类型的数组,我们可以将对象转化为二进制数组存入Redis数据库中,然后需要的时候再将二进制数组转化为User对象即可

序列化的概念:对象转化为二进制数组

反序列化:二进制数组转化为对象。

所以在使用这种方法的前提是,该类必须实现序列化接口。

package com.bjsxt.pojo;

import java.io.Serializable;

/**
 * 用户实体类
 * */
public class User implements Serializable{
	private String name;
	
	private String sex;
	
	private Integer age;
	
	

	public User() {

	}

	public User(String name, String sex, Integer age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
	
	
	
}

步骤二:添加工具类实现  方法一:对象转化为二进制数组,方法二:将二进制数组转化为对象!

package com.bjsxt.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectOrBinaryUtil {
	
	/**
	 * 将对象转化为二进制数组的方法
	 * */
	public static byte[] objectToBinary(Object o) {
		try {
			//创建一个字节输出流
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			//创建一个对象输出流用于序列化为二进制数
			//
			//ObjectOutputStream只有一个public权限的构造方法:
			//该构造方法需要传入一个OutputStream表示将对象二进制流写入到指定的OutputStream。
			ObjectOutputStream oos = new ObjectOutputStream(out);
			oos.writeObject(o);
			//该方法从这个输出流返回字节数组
			byte[] byteArray = out.toByteArray();
			oos.close();
			out.close();
			return byteArray;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 将二进制数组转化为我们需要的对象
	 * byte是传入的二进制数组,class是需要转换后的对象
	 * */
	public static <T>T  binaryToObject(byte[]bty,Class<T>clazz){
		try {
			ByteArrayInputStream bi = new ByteArrayInputStream(bty);
			ObjectInputStream os = new ObjectInputStream(bi);
			//转化为传入的对象类型
			T o = (T) os.readObject();
			os.close();
			bi.close();
			return o;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}
}

步骤三:实现对象转化为二进制数组进行数组的存储,在将读取的二进制数组转化为对象

	/**
	 * 因为我们存取的不仅仅是String类型的数据
	 * 所以我们可以把对象通过序列化转化为二进制数据存储进Redis数据库
	 * 再通过反序列化取出对象
	 * 前提:对象必须要实现Serializable接口
	 * */
	@Test
	public void jedisObject2Test() {
		User user=new User("lht","男",22);
		Jedis jedis=new Jedis("192.168.224.11",6379);
		byte[] key = ObjectOrBinaryUtil.objectToBinary("user");
//		byte[] value = ObjectOrBinaryUtil.objectToBinary(user);
//		jedis.set(key, value);
		
		byte[] bs = jedis.get(key);
		User user1 = ObjectOrBinaryUtil.binaryToObject(bs, User.class);
		System.out.println("1:"+user1);
	}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值