学习主题:SpringDataJPA
学习目标:
1 掌握SpringDataJPA常用接口类,常用注解
自己编写类似Repository的接口,编写更多的方法,满足不同的需求
当 Spring Data JPA 接口中不满足我们所需求的方法时,就会自定义Repository接口来实现我们想要的功能方法。
Users实体类
@OneToOne
//@JoinColumn 维护一个外键
@JoinColumn(name = "roles_id")
private Roles roles;
Roles 实体类
@OneToOne(mappedBy = "roles")
private Users users;
/**
* 添加数据,一对一关联数据
*/
@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);
}
一个角色对应多个用户,就是OneToMany
@OneToMany(mappedBy = "roles",cascade = CascadeType.PERSIST)
private Set<Users> users=new HashSet<>();
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);
}
}
}
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
<!-- 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>
。
@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");
}
/**
* 添加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);
}
/**
* 获取Users
*/
@Test
public void test4(){
//更换序列化器
this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
Users users = (Users)this.redisTemplate.opsForValue().get("users");
System.out.println(users);
}
/**
* 存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);
}
/**
* 从redis中取数据
*/
@Test
public void test6(){
this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
Users usersjson =(Users) this.redisTemplate.opsForValue().get("usersjson");
System.out.println(usersjson);
}