项目结构
1.为项目添加依赖
上一篇中已经建好了项目,接下来我们为项目添加依赖
pom.xml
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--jackson 解决使用jackson将对象json化的时候出现的错误 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
2.修改application.properties,配置相关信息
application.properties
# db
spring.datasource.url=jdbc:mysql://localhost:3306/user
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# jpa 让控制器输出json字符串格式
spring.jackson.serialization.indent-output=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
3.创建实体类
User.java
package com.wd.demo.entity;
import lombok.Data;
import javax.persistence.*;
@Data //自动生成get set方法
@Entity //自动生成相应的表,表名默认与实体类名相同 (JPA)
@Table(name = "user")
//@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
public class User {
@Id //设置主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //自动增长
private Integer userId;
// @Column 指定在表中的名字,默认与属性名相同
private String userName;
private String userPassword;
private Integer userAge;
private String userPhone;
}
4.创建Dao
IUserDao.java
package com.wd.demo.dao;
import com.wd.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
//Jpa提供了增删改查的功能
public interface IUserDao extends JpaRepository<User, Integer>{ //第一个泛型为实体类,第二个为实体类的主键类型
}
在这里看看JpaRepository的源代码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.data.jpa.repository;
import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
5.创建Service
创建接口IUserService.java
package com.wd.demo.service;
import com.wd.demo.entity.User;
public interface IUserService {
/**
* 添加新用户
* @param user
*/
void addUser(User user);
/**
* 根据ID查找用户信息
* @param id
* @return
*/
User findUserById(Integer id);
/**
* 根据ID删除用户信息
* @param id
*/
void deleteUserById(Integer id);
}
创建实现类UserServiceImpl.java
package com.wd.demo.service.impl;
import com.wd.demo.dao.IUserDao;
import com.wd.demo.entity.User;
import com.wd.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
IUserDao userDao;
/**
* 添加新用户
* @param user
*/
@Override
public void addUser(User user) {
userDao.save(user);
}
/**
* 根据ID查找用户信息
* @param id
* @return
*/
@Override
public User findUserById(Integer id) {
return userDao.getOne(id);
}
/**
* 根据ID删除用户信息
* @param id
*/
@Override
public void deleteUserById(Integer id) {
userDao.deleteById(id);
}
}
6.创建Controller
创建UserController.java
package com.wd.demo.controller;
import com.wd.demo.entity.User;
import com.wd.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@Autowired
private IUserService userService;
/**
* 添加新用户
* @return
*/
@ResponseBody
@RequestMapping("/save")
public String saveUser(){
User user = new User();
user.setUserName("yyy");
user.setUserPassword("12223");
user.setUserAge(23);
user.setUserPhone("1266658910");
userService.addUser(user);
return "success";
}
/**
* 根据ID查找用户信息
* @param id
* @return
*/
@ResponseBody
@RequestMapping("/find/{id}")
public User findUserById(@PathVariable("id") Integer id){
return userService.findUserById(id);
}
/**
* 根据ID删除用户
* @param id
* @return
*/
@ResponseBody
@RequestMapping("/delete/{id}")
public String deleteUserById(@PathVariable Integer id){
userService.deleteUserById(id);
return "delete ok";
}
}
7.解决使用jackson将对象json化的时候出现的错误(json化没问题则不需要这一步)
问题如下:
org.springframework.http.converter.HttpMessageNotWritableException: Could not write
content: Noserializer found for class com.google.common.cache.CacheStats and no properties
discovered to createBeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
方法一:
在实体类上面加上注解:
@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})
方法二:
注册一个objectMapper覆盖掉默认的,这样就不用在每个类上面使用@JsonIgnoreProperties:
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
在这里我使用方法二
1.添加jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
2.创建WebConfig.java
package com.wd.demo.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
/**
* 解决使用jackson将对象json化的时候出现的错误
* @return
*/
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
}
8.运行结果
只展示查找结果
9.源代码
源代码链接