Spring DataJPA的三种关联查询,SpringDataRedis

学习主题:SpringDataJPA
学习目标:
1 掌握SpringDataJPA常用接口类,常用注解

1. 自定义Repository接口

(1)什么是自定义Repository接口?

自己编写类似Repository的接口,编写更多的方法,满足不同的需求

(2)自定义Repository接口解决了什么问题?

当 Spring Data JPA 接口中不满足我们所需求的方法时,就会自定义Repository接口来实现我们想要的功能方法。

2.创建一对一关联关系

(1)创建一对一关联关系

Users实体类
@OneToOne
//@JoinColumn 维护一个外键
@JoinColumn(name = "roles_id")
private Roles roles;

Roles 实体类
@OneToOne(mappedBy = "roles")
private Users users;

3.操作一对一关联关系

(1)通过Spring Data JPA编写一个一对一的关联查询。

/**
 * 添加数据,一对一关联数据
 */
@Test
public void test1(){
    //创建roles
    Roles roles=new Roles();
    roles.setRolename("管理员");

    //创建users
    Users users=new Users();
    users.setUsername("王小婷");
    users.setUserage(14);

    //添加关联
    users.setRoles(roles);
    roles.setUsers(users);
    //添加
    this.usersDao.save(users);
}

/**
 * 查询所有数据
 */
@Test
public void test2(){
    Users user = this.usersDao.findOne(12);
    System.out.println("当前人物"+user);
    Roles role = user.getRoles();
    System.out.println("当前角色"+role);
}

4.创建一对多关联关系

(1)什么是对象的一对多关联关系?

一个角色对应多个用户,就是OneToMany

@OneToMany(mappedBy = "roles",cascade = CascadeType.PERSIST)
private Set<Users> users=new HashSet<>();

5.操作多对多关联关系

(1)通过Spring Data JPA编写多个多对多的关联查询。

Roles实体类

//fetch 放弃延时加载,立即加载
@ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
// @JoinTable 配置中间表
// joinColumns 建立当前表在中间表中的外键字段
@JoinTable(name = "t_roles_menus",joinColumns = @JoinColumn(name = "role_id"),inverseJoinColumns = @JoinColumn(name = "menu_id"))
Set<Menus> menus=new HashSet<>();

Menus 实体类
@ManyToMany(mappedBy = "menus")
Set<Roles> roles=new HashSet<>();

测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class ManyToManyTest {
    @Autowired
    RolesDao rolesDao;

    @Test
    public void test(){
        //创建roles对象
        Roles roles=new Roles();
        roles.setRolename("超级管理员");
        //创建menus对象
        Menus menus1=new Menus();
        menus1.setMenusname("xxx管理");
        menus1.setFatherid(-1);
        menus1.setMenusurl(null);

        Menus menus2=new Menus();
        menus2.setMenusname("用户管理员");
        menus2.setFatherid(1);
        menus2.setMenusurl(null);

        //建立关联关系
        roles.getMenus().add(menus1);
        roles.getMenus().add(menus2);

        menus1.getRoles().add(roles);
        menus2.getRoles().add(roles);

        //保存数据
        this.rolesDao.save(roles);
    }

    /**
     * 查询数据
     */
    @Test
    public void test2(){
        Roles roles = this.rolesDao.findOne(2);
        System.out.println("角色信息"+roles);
        Set<Menus> menus = roles.getMenus();
        for (Menus menu:menus){
            System.out.println("菜单信息"+menu);
        }
    }
}

6.Spring Data Redis-介绍

(1)什么是Spring Data Redis?

Spring DataJPA的三种关联查询,SpringDataRedis_第1张图片

7.Redis安装

(1)阐述Redis的安装过程。

1、 安装 gcc 编译器
yum install gcc-c++
2、 解压安装包
tar -zxf redis-3.0.0.tar.gz
3、 进入解压目录进行编译
cd redis-3.0.0
make
4、 将 Redis 安装到指定目录
make PREFIX=/usr/local/redis install
5、 启动 Redis
5.1 前置启动
默认的是前置启动:./redis-server
5.2 后置启动
先将 redis.conf 文件拷贝到 redis 的安装目录
cp redis.conf /usr/local/redis/bin
编辑 redis.conf 文件修改:daemonize yes
启动: ./redis-server redis.conf
查看 redis 进程:ps aux|grep redis
关闭后置启动的 Redis:./redis-cli shutdown

8.Spring整合Spring Data Redis创建项目

(1)创建Java Project项目,并导入于Spring Data Redis整合相关的jar包

Spring DataJPA的三种关联查询,SpringDataRedis_第2张图片

9.配置Spring整合Spring Data Redis

(1)在Spring的配置文件中整合Spring Data Redis。

<!-- Redis模板对象 -->
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="jedisConnectionFactory"/>
		<!-- 序列化器:能够把我们储存的key与value做序列化处理的对象 -->
		<!-- 配置默认的序列化器 -->
		<!-- keySerializer、valueSerializer 配置Redis中的String类型key与value的序列化器 -->
		<!-- HashKeySerializer、HashValueSerializer 配置Redis中的Hash类型key与value的序列化器 -->
		<property name="keySerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
		</property>
		<property name="valueSerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
		</property>
	</bean>

10.测试整合

(1)在项目中使用Junit测试整合,通过RedisTemplate向Redis中添加一条数据

。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class RedisTest {
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;
	/**
	 * 添加键值对
	 */
	@Test
	public void test1(){
		this.redisTemplate.opsForValue().set("key", "test");
	}

11.存取实体对象

(1)通过Spring Data Redis中的JDK序列化器将对一个对象添加到Redis中。

/**
 * 添加Users
 */
@Test
public void test3(){
    Users users=new Users();
    users.setId(1);
    users.setName("rr");
    users.setAge(18);
    //更换序列化器
    this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
    this.redisTemplate.opsForValue().set("users", users);
}

(2)通过Spring Data Redis中的JDK序列化器查询Redis中的数据。

/**
 * 获取Users
 */
@Test
public void test4(){
    //更换序列化器
    this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
    Users users = (Users)this.redisTemplate.opsForValue().get("users");
    System.out.println(users);
}

12.以JSON格式存取实体对象

(1)通过Spring Data Redis中的Jackson2序列化器将对一个对象添加到Redis中。

/**
 * 存json格式数据到redis中:需要更换value的序列化器
 */
@Test
public void test5(){
    Users users=new Users();
    users.setAge(20);
    users.setId(2);
    users.setName("jj");
    this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
    this.redisTemplate.opsForValue().set("usersjson",users);
}

(2)通过Spring Data Redis中的Jackson2序列化器查询Redis中的数据。

/**
 * 从redis中取数据
 */
@Test
public void test6(){
    this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
    Users usersjson =(Users) this.redisTemplate.opsForValue().get("usersjson");
    System.out.println(usersjson);
}

你可能感兴趣的:(Spring,Data,JPA,Redis)