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