spring boot spring
1、增删改查sql
一、增 CaInfoRepository.save()(自带)数据库
public interface CaInfoRepository extends JpaRepository<CaInfo, Long>{}
(1)当添加的数据id为空时添加一条数据到数据库json
(2)当有id值时,修改数据库中的数据ide
二、改(删除和修改时须要加上注解 @Modifying ,与 @Transactional搭配使用)ui
@Modifying @Query("UPDATE CaInfoSET detail_json=?1,dmp58building_id=?2,state=?3 where id=?4") void updateXXXX(String detail_json, String dmp58building_id, Integer state,Long id);
三、查this
自带.net
CaInfo getFirstByQihooShopId(String shop_id);
自定义1(原生 ca_info表名) ci
@Query(value = "SELECT * from ca_info WHERE id=(SELECT MIN(id) from ca_info WHERE state =?1 )",nativeQuery = true) ShopInfo getFirstByState(Integer state);
自定义2(表对应的实体 caInfo)get
@Query("SELECT * from caInfo WHERE id=?1") ShopInfo getById(Long id);
带in的查询 需绑定参数
@Query(value = "SELECT m.name trademark,t.name from car_info t LEFT JOIN car_info m on m.id=t.parent_id WHERE t.id in (:ids)",nativeQuery = true) List<Object[]> findTrademarkAndCarNameByIds(@Param("ids")List<String> ids);
四、补充1
原本是想反回list<map>来着结果报错,用List<Object[]>来代替便可
@Query("select distinct projectId, projectName from ShopInfo") List<Object[]> getProjectNameAndIdList();
实体类例子 须要加上@Entity注解, @Id @GeneratedValue主键自增,抽象类Serializable
@Entity public class Info implements Serializable { @Id @GeneratedValue private Long id; @Column private String projectName; @Column private String shopName; @Column private String position; @Column private Integer state; public Info (){ } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getProjectName() { return projectName; } public void setProjectName(String projectName) { this.projectName = projectName; } public String getShopName() { return shopName; } public void setShopName(String shopName) { this.shopName = shopName; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } }
补充2
/** * 动态sql,分页 */ private Page<CarInfo> queryCarInfo(Integer brandId,Integer trademark, Integer trademark2,Integer page,Integer pageSize) { Specification<CarInfo> specification = new Specification<CarInfo>() { @Override public Predicate toPredicate(Root<CarInfo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> predicates = new ArrayList<>(); Path<Integer> id = root.get("id"); Path<Integer> depth = root.get("depth"); Path<Integer> parentId = root.get("parentId"); predicates.add(criteriaBuilder.equal(depth, 3)); if (!StringUtils.isEmpty(brandId)) { predicates.add(criteriaBuilder.equal(id, brandId)); } if (!StringUtils.isEmpty(trademark2)) { predicates.add(criteriaBuilder.equal(parentId, trademark2)); } // in使用 if (!StringUtils.isEmpty(trademark) && StringUtils.isEmpty(trademark2)) { List<Long> trademark2Ids=carInfoRepository.findBrandIdsByParentId(trademark); CriteriaBuilder.In<Integer> in = criteriaBuilder.in(parentId.as(Integer.class)); for (Long pp : trademark2Ids) { in.value(pp.intValue()); } predicates.add(in); } Predicate and = criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); return and; } }; Pageable pageable = new PageRequest(page-1, pageSize); Page<CarInfo> all = carInfoRepository.findAll(specification, pageable); return all; }