最近百忙中抽出时间,想写一些关于 JPA 的东西。另外,我也想加深对JPA的理解,这也是我写这篇博文的原因。
JPA(Java Persistence API)Java Persistence API是Sun公司Java官方制定的一套ORM规范(Sun公司尚未实现)。
JPA 是基于 O/R 映射 的标准规范。所谓规范只是定义了标准规则(如注解、接口),并不提供实现。软件提供商可以按照标准规范来实现,而用户只需按照规范中定义的方式使用即可,而不必与软件提供商的实现打交道。 Spring Data Jpa 在 JPA 之上又增加了一层抽象(Repository 层的实现),大大简化了持久层开发和 ORM 框架切换的成本。
JPA 出现有两个原因:
(1) 简化现有 Java EE 和 Java SE 应用程序的对象持久化开发; Sun希望整合ORM技术,实现持久化领域的统一。
(2)JPA的主要实现有Hibernate、EclipseLink和OpenJPA等,这也意味着只要我们使用JPA进行开发,无论使用哪种开发方式都是一样的。
JPA通过对象操作数据库(无需编写sql语句)。 好处:不同数据库的SQL语法不同。如果不需要编写SQL语句,就可以屏蔽各个数据库SQL的差异。
导入 lombok.数据;
导入javax.持久性.*;/*** 产品类别** 对应数据库中的商品表*/
@实体@桌子(名称=“商品”)
@数据
公共 类 GoodsDo {/*** 产品id** 该字段对应数据库中作为主键的列*主键增长* 对应goods表中的id列 */@Id@GenerateValue(strategy = 世代类型。 身份)@Column(名称=" id")私人长 id;/***商品名称**对应商品表中的名称列*/@Column(名称= "名称")私人字符串名称;/*** 产品Price** 对应商品表中的价格栏*/ @Column (名称="价格")私人 串价格; /*** 产品描述** 对应商品表中图片栏 */@Column(名称 = "描述") 私人字符串描述;
}
公共 接口 GoodsService {/*** 新产品*/void 添加 (GoodsDo商品);/***删除商品*/void 删除(长id);/***编辑商品信息*/voidedit(GoodsDo商品) ;/*** 通过id获取商品信息(可选的是包装类,其内容为空或者包含对象,这样可以避免空指针问题)*/可选 <GoodsDo>getById(长id) ;/*** 获取产品信息列表*/可迭代<GoodsDo>getList();
}
通过继承CrudRepository实现CRUD操作。泛型参数分别是实体类的数据类型和主键。
注意,您现在可以通过IGoodsDao对数据库goods表进行添加、删除、修改和查询。
@存储库
公共 接口 IGoodsDao扩展 CrudRepository<GoodsDo,长> {
}
@服务公共 类 GoodsServiceImpl 实现GoodsService{@Autowired私人IGoodsDaogoodsDao;@Override公共void 添加(商品做商品){好货Dao.保存(好货 );}@Override公共 空白删除(长id) ){goodsDao.deleteById(id);}@Override公共 void 编辑(GoodsDo 商品){商品Dao.保存 (商品);} @Overridepublic可选<GoodsDo>getById(长 ID) {返回 可选.空();}@Override公共 可迭代<GoodsDo> getList() ){返回空;}}
@RestController公共 类GoodsController{ @Autowired私人商品服务商品服务;/*** 通过id获取商品信息*/@GetMapping("/goods/{id}")public 可选<GoodsDo> getOne(@PathVariable() “id”)长id){退货货物服务.getById (id);} /*** 获取商品列表*/@GetMapping("/商品")public 可迭代<GoodsDo>getList(){re转商品服务.获取列表();}/***新品*/@PostMapping("/商品")公共void 添加(@RequestBodyGoodsDo商品){商品服务。 添加(商品);}/***编辑商品*/@P utMapping( "/货物/{id} ")公共void更新(@PathVariable("id")长id, @RequestBodyGoodsDo Goods) {//修改指定id的博客信息goods.setId(id);商品服务.编辑(商品); }/*** 删除产品*/@删除映射 ("/goods/{id}")public void 删除(@PathVariable(“id”)长id){商品服务.删除 (id);}}
@SpringBootTest公共 类JpaApplicationTests{@Autowired私人IGoodsDaogoodsDao; / () {GoodsDo 商品= 新GoodsDo();商品.套装名称(“金刚丹活血化瘀”);商品.设定价格("18888");GoodsDo结果=商品Dao.保存(商品);系统.出.println( “新产品ID:”+结果.getId());}
}
提供源码,欢迎star!
我的想法