第08章—整合Spring Data JPA

spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html

码云源码地址:https://gitee.com/jinxiaohang/springboot

 

一、引入依赖

如果是新建项目的,可以在这页添加依赖:

如果是原有项目,还可以在pom.xml 引入JPA和数据库驱动的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 

二、添加数据源

在application.yml 添加数据源

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

三、编写各层代码

// entity类如下:
public class UserInfo {
    private String userId;
    private String userName;
    private String password;
    // Getters & Setters ..
}

// dao层代码如下:
public interface UserInfoRepository extends JpaRepository<UserInfo,String> {

}

//service层
public interface UserService {
    /**
     * 获取所有UserInfo信息
     * @return
     */
    List<UserInfo> list();

    /**
     * 获取单个UserInfo信息
     * @param userId
     * @return
     */
    UserInfo getOne(String userId);

    /**
     * 添加单个UserInfo
     * @param user
     * @return
     */
    UserInfo save(UserInfo user);

    /**
     * 更新当个UserInfo信息
     * @param user
     * @return
     */
    UserInfo update(UserInfo user);

    /**
     * 删除单个UserInfo
     * @param userId
     * @return
     */
    boolean delete(String userId);
}

//serviceimpl层
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserInfoRepository userInfoRepository;

    @Override
    public List<UserInfo> list() {
        return userInfoRepository.findAll();
    }

    @Override
    public UserInfo getOne(String userId) {
        return userInfoRepository.findOne(userId);
    }

    @Override
    public UserInfo save(UserInfo user) {
        return userInfoRepository.save(user);
    }

    @Override
    public UserInfo update(UserInfo user) {
        return userInfoRepository.save(user);
    }

    @Override
    public boolean delete(String userId) {
        userInfoRepository.delete(userId);
        return true;
    }
}

//controller层
@RestController
@RequestMapping("/api/user/*")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("list")
    public List userList() {
        return userService.list();
    }

    /**
     * 使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
     * 使用@PathVariable时,URL是这样的:http://host:port/path/参数值
     */
    @GetMapping("list/{userId}")
    public UserInfo getOne(@PathVariable String userId){
        return userService.getOne(userId);
    }

    @PostMapping("save")
    public String save(@RequestBody UserInfo userInfo) {//请求中需要带Content-Type: application/json
        if (userService.save(userInfo)!=null)
            return userInfo.toString();
        return "{\"msg\":\"error\"}";
    }

    @PutMapping("update")
    public String update(@RequestBody UserInfo userInfo) {//请求中需要带Content-Type: application/json
        if(userService.update(userInfo)!=null)
            return userInfo.toString();
        return "{\"msg\":\"error\"}";
    }

    @DeleteMapping("delete/{userId}")
    public String delete(@PathVariable String userId) {
        if (userService.delete(userId))
            return "{\"msg\":\"success\"}";
        return "{\"msg\":\"error\"}";
    }
}

易错点:

  1、在集成Mybatis时,通常设置表字段名和类属性一致,在集成JPA时实体类要与数据库表对应,不然会出错。

    举个例子:类名UserInfo->表名user_info ,属性userId->字段user_id,属性password->字段password。

  2、dao层通常继承JpaRepository<类名,主键类型>就能满足基本的数据库操作。

  3、service层和往常一样,实现层需要调用父类中的一些方法,比如:findAll()、save()、findOne()根据主键查找。。。

  4、controller层,遇到了些问题:

    使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值

    使用@PathVariable时,URL是这样的:http://host:port/path/参数值

    在集成Mybatis时使用的是@PathVariable,在写Swagger2时使用的是@RequestParam,使用另一种注解,测试时会失败。

    使用@RequestBody,将json格式数据转化为实体对象。测试时,请求头中需要:Content-Type: application/json,否则会报415错误。

 

四、添加数据库记录

-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
  `user_id` varchar(50) NOT NULL,
  `user_name` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of user_info
-- ----------------------------
INSERT INTO `user_info` VALUES ('1', '3', '2');
INSERT INTO `user_info` VALUES ('2', '4', '3');
INSERT INTO `user_info` VALUES ('3', '6', '4');

 

五、启动测试

运用火狐浏览器或者postman进行测试,如果集成swagger2可以用它测试,但注意上面的易错点。

posted @ 2018-01-16 08:44  zhihang!  阅读(422)  评论(0编辑  收藏  举报