大湖之子 发表于 2017-12-15 06:26:32

springboot学习笔记

  一.整合redis
  1.1 建立实体类
  

@Entity  
@Table(name
="user")  

public>@Id  @GeneratedValue(strategy
=GenerationType.AUTO)private Long>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>  }
  public void setId(Long>  this.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;
  }
  @Override
  public String toString() {
  return "User ";
  }
  
}
  

  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>@Value(
"${spring.redis.hostName}")private String hostName;  @Value(
"${spring.redis.port}")private Integer port;  

  @Bean
public RedisConnectionFactory redisConnectionFactory() {  JedisConnectionFactory cf
= new JedisConnectionFactory();  cf.setHostName(hostName);
  cf.setPort(port);
  cf.afterPropertiesSet();
return cf;  }
  @Bean
public 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>@Autowired
private 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>@Autowired
  UserRedis 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>  

  @Autowired
  private Environment env;
  @Override
  protected String getDatabaseName() {
  return env.getRequiredProperty("mongo.name");
  }
  

  @Override
  @Bean
  public 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>  @Id
  private String userId;
  @NotNull @Indexed(unique=true)
  private String username;
  @NotNull
  private String password;
  @NotNull
  private String name;
  @NotNull
  private String email;
  @NotNull
  private Date registrationDate=new Date();
  private Set<String> roles=new HashSet<>();
  public SysUser(){}
  @PersistenceConstructor
  public 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;
  }
  @Override
  public 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>@Autowired
  SysUserRepository repository;
  @Before
public 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);
  }
  @Test
public void findAll() {  List
<SysUser> users=repository.findAll();for(SysUser user:users) {  System.out.println(user);
  }
  }
  
}
  
页: [1]
查看完整版本: springboot学习笔记