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

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