SprinJpa的使用記錄

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 {`````}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章