#注:整个流程为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 路径访问问题