springboot学习笔记-3 整合redismongodb
一.整合redis
1.1 建立实体类
@Entity @Table(name="user") public class User implements Serializable {@Id@GeneratedValue(strategy=GenerationType.AUTO)private Long id;private String name;@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date createDate;@JsonBackReference //防止json的重复引用问题private Department department;private Set<Role> roles;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}public Set<Role> getRoles() {return roles;}public void setRoles(Set<Role> roles) {this.roles = roles;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", createDate=" + createDate + ", department=" + department+ ", roles=" + roles + "]";}}
1.2 建立Redis的配置类
首先导入pom.xml相应的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId> </dependency>
在springboot中,没有去提供直接操作Redis的Repository,但是我们可以使用RedisTemplate去访问Redis.想要去使用RedisTemplate,首先需要完成一些必要的配置.这里使用配置类去完成.
在application.properties中建立Redis的相关配置:
建立配置类,配置RedisTemplate,而要使用RedisTemplate还需要配置RedisConnectionFactory:
@ConfigurationProperties("application.properties") @Configuration public class RedisConfig {@Value("${spring.redis.hostName}")private String hostName;@Value("${spring.redis.port}")private Integer port;@Beanpublic RedisConnectionFactory redisConnectionFactory() {JedisConnectionFactory cf = new JedisConnectionFactory(); cf.setHostName(hostName); cf.setPort(port); cf.afterPropertiesSet(); return cf; }@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {StringRedisTemplate template=new StringRedisTemplate(factory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om=new ObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;} }
1.3 建立UserRedis类,它实现了与Redis的交互
注意,在UserRedis中,使用了Redis的数据结构中最常用的key-value都是字符串的形式,采用Gson将对象转化为字符串然后存放到redis中.
@Repository public class UserRedis {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public void add(String key,User user) {Gson gson=new Gson();redisTemplate.opsForValue().set(key,gson.toJson(user));}public void add(String key,List<User> users) {Gson gson=new Gson();redisTemplate.opsForValue().set(key,gson.toJson(users));}public User get(String key ) {Gson gson=new Gson();User user=null;String userStr=redisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(userStr))user=gson.fromJson(userStr, User.class);return user;}public List<User> getList(String key) {Gson gson=new Gson();List<User> users=null;String listJson=redisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(listJson)) {users=gson.fromJson(listJson,new TypeToken<List<User>>(){}.getType());}return users;}public void delete(String key) {redisTemplate.opsForValue().getOperations().delete(key);} }
1.4 建立UserController类
它自动注入了UserRedis类,通过不同的url实现了向redis存储数据,获取数据的功能.
@Controller public class UserController {@AutowiredUserRedis userRedis;@RequestMapping("/user/testRedisSave")public String testRedis() {Department department=new Department();department.setName("开发部");Role role=new Role();role.setName("admin");User user=new User();user.setName("hlhdidi");user.setCreateDate(new Date());user.setDepartment(department);Set<Role> roles=new HashSet<>();roles.add(role);user.setRoles(roles);userRedis.delete(this.getClass().getName()+":username:"+user.getName());userRedis.add(this.getClass().getName()+":username:"+user.getName(), user);return null;}@RequestMapping("/user/testRedisGet")public String testRedis2() {User user=userRedis.get(this.getClass().getName()+":username:hlhdidi");System.out.println(user);return null;} }
先访问localhost:8080/user/testRedisSave,再访问localhost:8080/user/testRedisGet,即可测试成功!
二.整合MongoDB
MongoDB是一种文档类型的NoSql数据库.它内部有三个层次的概念,分别为数据库,集合,文档.使用springboot可以非常方便的整合MongoDB
2.1 建立mongo.properties配置文件
导入依赖:
<dependency><groupId>org.pegdown</groupId><artifactId>pegdown</artifactId><version>1.4.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-hateoas</artifactId></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId></dependency>
2.2 建立MongoConfig配置类,完成对于MongoDB的配置
@Configuration @EnableMongoRepositories(basePackages={"com.hlhdidi.springboot.mongo"})//MongoRepository的扫描包 @PropertySource("classpath:mongo.properties")//注入配置文件属性 public class MongoConfig extends AbstractMongoConfiguration{@Autowiredprivate Environment env;@Overrideprotected String getDatabaseName() {return env.getRequiredProperty("mongo.name");}@Override@Beanpublic Mongo mongo() throws Exception {ServerAddress serverAddress=new ServerAddress(env.getRequiredProperty("mongo.host"));List<MongoCredential> credentials=new ArrayList<>();return new MongoClient(serverAddress, credentials);}}
2.3 建立SysUser实体类.
该实体类需要被存储到MongoDB数据库中.
@Document(collection="user")//配置collection的名称,如果没有将会自动建立对应的Collection public class SysUser {@Idprivate String userId;@NotNull @Indexed(unique=true)private String username;@NotNullprivate String password;@NotNullprivate String name;@NotNullprivate String email;@NotNullprivate Date registrationDate=new Date();private Set<String> roles=new HashSet<>();public SysUser(){}@PersistenceConstructorpublic SysUser(String userId, String username, String password, String name, String email, Date registrationDate,Set<String> roles) {super();this.userId = userId;this.username = username;this.password = password;this.name = name;this.email = email;this.registrationDate = registrationDate;this.roles = roles;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getRegistrationDate() {return registrationDate;}public void setRegistrationDate(Date registrationDate) {this.registrationDate = registrationDate;}public Set<String> getRoles() {return roles;}public void setRoles(Set<String> roles) {this.roles = roles;}@Overridepublic String toString() {return "SysUser [userId=" + userId + ", username=" + username + ", password=" + password + ", name=" + name+ ", email=" + email + ", registrationDate=" + registrationDate + ", roles=" + roles + "]";}}
2.4 建立SysUserRepository
由于springboot已经帮我们提供了操作MongoDB数据库的API,因此直接继承对应的类即可(和JPA一致)
@Repository public interface SysUserRepository extends MongoRepository<SysUser, String>{}
2.5 测试
测试类先向MongoDB中存储了一个实体类对象,随后获取指定对象的指定Collections下面的所有文档
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={MongoConfig.class}) @FixMethodOrder public class MongoTest {@AutowiredSysUserRepository repository;@Beforepublic void setup() {Set<String> roles=new HashSet<>();roles.add("manage");SysUser sysUser=new SysUser("1", "hlhdidi", "123", "xiaohulong", "email@com.cn", new Date(), roles);repository.save(sysUser);}@Testpublic void findAll() {List<SysUser> users=repository.findAll();for(SysUser user:users) {System.out.println(user);}} }
转载于:https://www.cnblogs.com/hlhdidi/p/6347719.html
springboot学习笔记-3 整合redismongodb相关推荐
- SpringBoot学习笔记(7)-整合Mybatis
文章目录 一.配置mybatis依赖 二.配置application.properties 三.在启动类上加@MapperScan注解 四.配置资源文件读取 五.结合SpringMVC完成测试 整合环 ...
- SpringBoot学习笔记(16)----SpringBoot整合Swagger2
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...
- 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
更多文章 更多系列文章在个人网站 springBoot学习系列笔记文章 springBoot学习笔记(1)-- 搭建springBoot项目 文章目录 更多文章 springBoot学习系列笔记文章 ...
- SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- SpringBoot(学习笔记)
SpringBoot学习笔记 从今天开始就进入微服务阶段 一些小问题 1.HelloWorld 1.1回顾什么是Spring 1.2什么是SpringBoot 1.3微服务架构 2.第一个Spring ...
- SpringBoot 学习笔记
SpringBoot 学习笔记 文章目录 SpringBoot 学习笔记 1. SpringBoot简介 1.1 什么是Spring 1.2 Spring 是如何简化Java开发的 1.3 什么是 S ...
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...
- SpringBoot学习笔记(3):静态资源处理
SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...
最新文章
- Python中的Lambda表达式
- 深度学习 Optimizer 梯度下降优化算法总结
- 禁止冒名顶替Exchange用户发送邮件
- 常考数据结构与算法:容器盛水问题
- Python实现学生信息管理(面向对象)
- python-给对象添加属性与方法
- 解决 IntelliJ 乱码问题
- 生产环境服务器部署kvm虚拟化6,KVM虚拟化平台环境部署
- 【C语言】C语言从入门到精通 | 第3章 数据类型(一)— 自学笔记
- 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle
- Pigsty是什么?
- 技术系统进化法则包括_八大技术系统进化法则主要包括哪些
- 加权算数平均大于等于几何平均
- CodeForce-476D-Dreamoon and Sets
- C#使用WebProxy实现代理访问webservice
- oracle如何把误删的数据恢复,oracle误删数据恢复方法小结
- 第6.3章:ARM架构下手动编译StarRocks(拓展篇)
- 作数学题应不该用计算机,【中考备考】最新关于初一年级数学题在线解答汇总讲解...
- Secret的三种形式
- 一些符号及颜色的英语写法总结
热门文章
- LIRe 源代码分析 5:提取特征向量[以颜色布局为例]
- C语言堆栈入门 —— 堆和栈的区别
- html如何隐藏二进制字符串,如何用二进制代码隐藏字符串?
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)签到题K Co-prime Permutation,L Let‘s Play Curling
- 玩家国度ROG 幻14 拆机 升级 换固态 换配件 教程
- 分段式多级离心泵_溧阳耐磨矿用多级泵水泵厂
- sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!
- git版本回退(3)
- 二叉查找树--插入、查找、遍历、打印、删除(重点)
- Java用swing实现的贪吃蛇