1.根據自定義的排序規則排序
@Query("select f from RbaseFarmInfo f")
List<RbaseFarmInfo> findByDataType(@Param("dataType") Integer dataType, Sort sort);
List<Order> orders = new ArrayList<Order>();
Order rankNo = new Sort.Order(Sort.Direction.ASC, "rankNo");
orders.add(rankNo);
Sort sort = new Sort(orders);
List<RbaseFarmInfo> farmList = rbaseFarmInfoDao.findByDataType(type, sort);
@Query("select f from RbaseFarmInfo f")
List<RbaseFarmInfo> findAllBySort(Sort sort);
List<Order> orders = new ArrayList<Order>();
Order dataType = new Sort.Order(Sort.Direction.ASC, "dataType");
Order rankNo = new Sort.Order(Sort.Direction.ASC, "rankNo");
orders.add(dataType);
orders.add(rankNo);
Sort sort = new Sort(orders);
List<RbaseFarmInfo> farms = rbaseFarmInfoDao.findAllBySort(sort);
2.多條件模糊查詢
@Query("from RbaseFarmInfo f where f.farmName like CONCAT('%',:farmName,'%') or f.otherName like CONCAT('%',:otherName,'%')")
List<RbaseFarmInfo> findByName(@Param("farmName") String farmName, @Param("otherName") String otherName, Sort sort);
3.JPA的findBy規則
注意數據庫建表時不要包含關鍵字
具體參考 博客 https://www.cnblogs.com/suizhikuo/p/9412825.html
4.JPA的CRUD操作
注意主鍵問題
增刪改要添加註釋@Transactional
remove() 方法不能移除遊離對象,只能移除持久化對象,第一個參數爲被查詢的實體類類型,第二個參數爲待查找實體的主鍵值
@Transactional
@Override
public boolean delete(Class<T> c, Object Id) {
boolean flag = false;
try {
entityManager.remove(entityManager.find(c, Id));
flag = true;
} catch (Exception e) {
System.out.println("---------------刪除出錯---------------");
e.printStackTrace();
}
return flag;
}
find() 方法,第一個參數爲被查詢的實體類類型,第二個參數爲待查找實體的主鍵值
@Override
public Object find(Class<T> entityClass, Object primaryKey) {
try {
Object t = entityManager.find(entityClass, primaryKey);
return t;
} catch (Exception e) {
System.out.println("---------------查找出錯---------------");
e.printStackTrace();
}
return null;
}
merge() 方法,存在更新,不存在插入
@Transactional
@Override
public boolean update(T entity) {
boolean flag = false;
try {
entityManager.merge(entity);
flag = true;
} catch (Exception e) {
System.out.println("---------------更新出錯---------------");
e.printStackTrace();
}
return flag;
}
persist() 方法
@Transactional
@Override
public boolean save(T entity) {
boolean flag = false;
try {
entityManager.persist(entity);
flag = true;
} catch (Exception e) {
System.out.println("---------------保存出錯---------------");
e.printStackTrace();
}
return flag;
}
createQuery()
public Object findById(Class<T> entityClass, Object id) {
String sql = "from " + entityClass.getSimpleName() + " where id='" + id+"'";
try {
Query q = entityManager.createQuery(sql, entityClass);
if (q != null) {
return q.getSingleResult();
} else {
return null;
}
} catch (Exception e) {
System.out.println("---------------查找出錯-------------" + sql);
e.printStackTrace();
}
return null;
}
//根據id集合查詢實體集合
public List<T> getByIds(List<String> ids) {
return getEntityManager().createQuery("FROM " + className
+ "WHERE id in (:ids)").setParameter("ids", ids).list();
}
具體的使用示例
@SuppressWarnings("unchecked")
public Object getComInfoById(String id, String bean) {
Object t = null;
if (id != null && bean != null) {
try {
Class<?> c = Class.forName(bean);
t = this.baseJpaDao.findById(c, id);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return t;
}
4.spring data jpa 操作視圖
工作中遇到的一些統計量,要做成基礎版和擴展版方便適用於不同網省,但是計算的話有的統計量用的一套規則,所以修改爲視圖查詢,點表基礎版本reda_count_point,擴展內容放到reda_count_point_exc,新建視圖reda_count_point_view,使用原來的RedaCountPoint做爲映射實體類(可以根據自己需要的屬性來構造視圖類)
創建視圖
create view “XNY”.“REDA_COUNT_POINT_VIEW” as
select * from xny.reda_count_point
union all
select * from xny.reda_count_point_exc
表對應的實體類
@Entity
@Table(name = “reda_count_point_exc”)
public class RedaCountPointExc{```````}
@Entity
@Data
@Table(name = “reda_count_point_view”)
public class RedaCountPoint{``````}
視圖類
@Entity
@Table(name = “reda_count_point_view”)
public class RedaCountPointView {`````}