JPA在项目中的使用
项目类型:企业商场项目,分为小程序端和后台管理端
使用框架:Spring SpringBoot 采用spring-cloud-alibaba 的微服务架构nacos做注册中心,openfeign做远程调用。
问题描述:JPA如何操作数据库
之前的项目中一直使用的是mybatis和mybaitsplus操作数据库,现公司的架构是jpa操作数据库,那么JPA如何操作数据库?
直接看Repository层也就是我们之前说的Dao层
1.Dao层直接继承
JpaRepository<Commodity, String>: 操作Commodity这个实体类(关联表),String表示主键id的类型。
JpaSpecificationExecutor:让你可以直接使用其中自带写好的一些方法。
2.自定义方法,类似于mybatis写sql语句,JPA则是直接对对象进行操作
@Repository("commodityDao")
public interface CommodityDao extends JpaRepository<Commodity, String>, JpaSpecificationExecutor<Commodity> {
/**
* (逻辑删除)
*
* @param delIds
*/
@Modifying
@Transactional
@Query("update Commodity c set c.isEnabled=-1 where c.id in(?1)")
void delByModelSpecificationIds(List<String> delIds);
//查询商品表的id数量,当商品的code=传递的参数的第一个
@Query("select count(c.id) from Commodity c where c.code=?1")
int getCountByCode(String code);
//修改商品的isPutAway=?1 即修改isPutAway的值为传参的第一个,in (?2)即
@Modifying
@Transactional
@Query("update Commodity c set c.isPutAway=?1 where c.id in (?2)")
void putAwayByIds(Integer putAwayType, List<String> ids);
3.以上就实现了对商品表的操作
4.增删改查
增:直接通过commodityDao.save() , 存的对象带id即代表修改,否则为新增。
删:逻辑删即修改,通过@query注解 update 对象 别名 set 别名.字段 = ;
改:@Query(“update Commodity c set c.isPutAway=?1 where c.id in (?2)”)
查:@Query(“select count(c.id) from Commodity c where c.code=?1”)
5.刚上手时操作对象不顺手,也可支持直接使用原生的sql语句nativeQuery = true
@Query(value = "select * from tb_ally_search_history where user_id =:id order by modify_time desc limit 10 ",nativeQuery = true)
List<SearchHistory> findAllNewByUserId(@Param("id") String userId);
如上:通过原生sql直接对该用户修改时间字段排序,并取10条。
ps:表名字段需跟数据库对应上,不再是跟实体类对应。