简介
JPA即Java Persistence API,Java持久化API,官方这么解释Spring Data JPA是更大的Spring Data系列的一部分,
可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的
Spring驱动应用程序变得更加容易。
实现
实体类
@Entity
@Table(name="tb_brand")
public class Brand implements Serializable{
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Id
private Long id;
//品牌名称
private String name;
//品牌首字母
private String firstChar;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFirstChar() {
return firstChar;
}
public void setFirstChar(String firstChar) {
this.firstChar = firstChar;
}
}
持久层
public interface BrandDao extends JpaRepository<Brand,Long>,JpaSpecificationExecutor<Brand>{
}
服务层
@Service
public class BrandService {
@Autowired
private BrandDao brandDao;
/**
* 查询全部列表
* @return
*/
public List<Brand> findAll() {
return brandDao.findAll();
}
/**
* 根据ID查询实体
* @param id
* @return
*/
public Brand findById(Long id) {
return brandDao.findById(id).orElse(null);
}
/**
* 增加
* @param brand
*/
public void add(Brand brand) {
brandDao.save(brand);
}
/**
* 修改
* @param brand
*/
public void update(Brand brand) {
brandDao.save(brand);
}
/**
* 删除
* @param id
*/
public void deleteById(Long id) {
brandDao.deleteById(id);
}
控制层
@RestController
@RequestMapping("/brand")
public class BrandController {
@Autowired
private BrandService brandService;
/**
* 查询全部数据
* @return
*/
@RequestMapping(method= RequestMethod.GET)
public Result findAll(){
return new Result(true,StatusCode.OK,"查询成功",brandService.findAll());
}
/**
* 根据ID查询
* @param id ID
* @return
*/
@RequestMapping(value="/{id}",method= RequestMethod.GET)
public Result findById(@PathVariable Long id){
Brand brand=brandService.findById(id);
if (brand==null){
return new Result(false, StatusCode.ERROR, "无数据");
}
return new Result(true,StatusCode.OK,"查询成功",brand);
}
/**
* 增加
* @param brand
*/
@RequestMapping(method=RequestMethod.POST)
public Result add(@RequestBody Brand brand ){
brandService.add(brand);
return new Result(true,StatusCode.OK,"增加成功");
}
/**
* 修改
* @param brand
*/
@RequestMapping(value="/update",method= RequestMethod.PUT)
public Result update(@RequestBody Brand brand){
brandService.update(brand);
return new Result(true,StatusCode.OK,"修改成功");
}
/**
* 删除
* @param id
*/
@RequestMapping(value="/delete/{id}",method= RequestMethod.DELETE)
public Result delete(@PathVariable Long id){
brandService.deleteById(id);
return new Result(true,StatusCode.OK,"删除成功");
}
如果要做一个条件查询应该怎么实现呢?
方式一
持久层
@Modifying
@Query(value = "SELECT id,category_id,title,url,pic,sort_order,status from tb_content WHERE status=1",nativeQuery = true)
public List<Content> findByStatus();
服务层
public List<Content> findByStatus() {
return contentDao.findByStatus();
}
其他的地方与其他接口写法无异,值得注意的是sql在写的时候,where跟的这个字段必须得在select查的字段里面,否则
报错找不到这个字段
方式二
持久层
public List<Content> findByStatus(String status);
服务层
public List<Content> findByStatus() {
return contentDao.findByStatus("1");
}
这种方式更加简单,不需要写sql,其原理与根据id查询类似。
推荐使用这种方式,更加优雅,更加简洁。