Springboot快速入门教程(五)Spring Boot JPA-Hibernate实现

版权声明:原创版权为博主所有,博主项目网址www.github.com/994683607,转载请注明出处。 https://blog.csdn.net/qq_35180973/article/details/82316438

#注:整个流程为Controller接收请求-调用Service方法-Repository(下一章替换为dao)进行数据库交互。
记下来步骤比较快,想整合一下几个接口。项目名更改为firstboot(可以采用原来的)。
##1.首先新建实体类Cat,接收实例化对象属性(和刚才Demo类似)。上一节中配置application后,配置@Entity注解,运行后数据库会自动新建表。表名为驼峰命名,查看驼峰命名法规则

package com.zhang.firstboot.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * 创建了一个实体类
 *
 * @author created by Zhangdazhuang
 * @version v.0.1
 * @date 2018/9/2
 * @备注 1。如何持久化? 使用@Entity进行实体类的持久化操作
 * @Entity 会在数据库中生成对应的表结构
 * 2.@Id 指定主键
 * @GeneratedValue(strategy =GenerationType.AUTO )指定表生成策略
 **/


@Entity
public class Cat {
    /**
     * 使用@Id 指定主键
     * 使用@GeneratedValue(strategy =GenerationType.AUTO )指定表生成策略
     * mysql默认自增长
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;//主键
    //对应表字段cat_name
    private String catName;//姓名
    //cat_age
    private int catAge;//年龄

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCatName() {
        return catName;
    }

    public void setCatName(String catName) {
        this.catName = catName;
    }

    public int getCatAge() {
        return catAge;
    }

    public void setCatAge(int catAge) {
        this.catAge = catAge;
    }
}



##2.新建repository包,dao包(这里用不到,采用接口来实现数据库操作),controller包,service包。
在repository包中新建两个接口CatRepository 和CatRepository 2,两种实现JPA的方式。代码如下:
CatRepository :

package com.zhang.firstboot.repository;

import com.zhang.firstboot.bean.Cat;
import org.springframework.data.repository.CrudRepository;

/**
 * @author created by Zhangdazhuang
 * @version v.0.1
 * @date 2018/9/2
 * @备注 源码CrudRepository的delete参数不一样
 * 继承接口 常用方法
 **/

public interface CatRepository extends CrudRepository<Cat,Integer> {





}

CatRepository 2:

package com.zhang.firstboot.repository;

import com.zhang.firstboot.bean.Cat;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;

/**   手写接口
 * @author created by Zhangdazhuang
 * @version v.0.1
 * @date 2018/9/2
 * @备注 源码CrudRepository的delete参数不一样
 *  PagingAndSortingRepository继承crudRepository,增加排序分页
 **/
//public interface CatRepository2 extends PagingAndSortingRepository<Cat,Integer>
public interface CatRepository2 extends Repository<Cat,Integer> {

    /**  手写接口
     * 1.查询方法以find | read | get开头;
     * 2.涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以
     * 首字母大写。
     */
    //根据catName进行查询
    public Cat findByCatName(String catName);

    /**
     *  如何编写JPQL语句
     *  Hibernate  --HQL语句与jpql语句类似 :catName代表参数名字
     *  如果参数名字不同 用@param传参
     */
    //@Query("from Cat where catName=:catName")
    @Query("from Cat where catName=:cn")
    public Cat findBycatName2(@Param("cn")String catName);
  

}






##3.编写service层

package com.zhang.firstboot.service;

import com.zhang.firstboot.bean.Cat;

import com.zhang.firstboot.dao.CatDao;
import com.zhang.firstboot.repository.CatRepository;
import com.zhang.firstboot.repository.CatRepository2;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * @author created by Zhangdazhuang
 * @version v.0.1
 * @date 2018/9/2
 * @备注 测试
 **/
@Service
public class CatService {

    @Resource
    private CatRepository catRepository;
    //不常用,直接继承
    @Resource
    private CatRepository2 catRepository2;

 


    /**
     * CRUD使用@Transactional进行事物绑定
     */
    @Transactional
    public void save(Cat cat) {
        catRepository.save(cat);
    }

    @Transactional
    public void delete(int id) {
        catRepository.deleteById(id);

    }

    @Transactional
    public void getAll() {
        catRepository.findAll();
    }

    public Cat findByCatName(String catName) {
        return catRepository2.findByCatName(catName);
    }

    public Cat findByCatName2(String catName) {
        return catRepository2.findBycatName2(catName);
    }

   
}

采用@Resource 分别注入两个不同的接口,实现不同的调用方法。


##4.编写controller层

package com.zhang.firstboot.controller;

import com.zhang.firstboot.bean.Cat;
import com.zhang.firstboot.service.CatService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/** controller-service-dao
 * @author created by Zhangdazhuang
 * @version v.0.1
 * @date 2018/9/2
 * @备注 测试
 **/
@RestController
@RequestMapping("/cat")
public class CatController {

    @Resource
    private CatService catService;

    @RequestMapping("/save")
    public String save(){
        Cat cat=new Cat();
        cat.setCatName("Zhangsan");
        cat.setCatAge(3);
        catService.save(cat);
        return "save success";
    }

    @RequestMapping("/delete")
    public String delete(){
      catService.delete(1);
      return "delete success";
    }
    //不能确定唯一性
    @RequestMapping("/findByCatName")
    public Cat findByCatName(String catName)
    {
        return catService.findByCatName(catName);
    }

    //不能确定唯一性,数据库中有两个相同的catName
    @RequestMapping("/findByCatNameJPQL")
    public Cat findByCatName2(String catName)
    {
        return catService.findByCatName2(catName);
    }
    //controller-service-dao
    //@RequestMapping("/selectByCatName")
    //public Cat selectByCatName(String catName){
     //   return catService.selectByCatName(catName);
    //}

}

##4.测试findByCatName和findByCatNameJPQL方法,即两个不同的接口。

 @RequestMapping("/findByCatName")
    public Cat findByCatName(String catName)
    {
        return catService.findByCatName(catName);
    }

    //不能确定唯一性
    @RequestMapping("/findByCatNameJPQL")
    public Cat findByCatName2(String catName)
    {
        return catService.findByCatName2(catName);
    }

结果:注记得在数据库中添加数据,对应url中
1.输入127.0.0.1:8080/cat/findByCatName?catName=Andy
这里写图片描述

2.输入http://127.0.0.1:8080/cat/findByCatNameJPQL?catName=Andy
这里写图片描述
测试成功。


专栏目录:

Springboot快速入门教程(一) 搭建Springboot
Springboot快速入门教程(二) 返回JSON
Springboot快速入门教程(三) 热部署
Springboot快速入门教程(四) Spring Boot JPA-Hibernate介绍
Springboot快速入门教程(五) Spring Boot JPA-Hibernate实现
Springboot快速入门教程(六) Spring Boot JdbcTemplate
Springboot快速入门教程(七)全局异常捕捉
Springboot快速入门教程(八) Spring Boot 路径访问问题

猜你喜欢

转载自blog.csdn.net/qq_35180973/article/details/82316438
今日推荐