jpa级联添加_SpringDataJPA级联操作并整合redis

训练大纲(第109天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第217次(SpringDataJPA)

学习主题: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)

privateSet users=newHashSet<>();

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第218次(SpringDataJPA)

学习主题:SpringDataJPA

学习目标:

1 掌握SpringDataJPA常用接口类,常用注解

对应视频:

对应文档:

对应作业

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=new HashSet<>();

Menus 实体类

@ManyToMany(mappedBy = "menus")

Set 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 = roles.getMenus();

for (Menus menu:menus){

System.out.println("菜单信息"+menu);

}

}

}

6. Spring Data Redis-介绍

(1) 什么是Spring Data Redis?

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包

9. 配置Spring整合Spring Data Redis

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

10. 测试整合

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

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:applicationContext.xml")

public class RedisTest {

@Autowired

private RedisTemplate 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);

}

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。


版权声明:本文为weixin_30673719原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。