前言
此处以一个Student案例进行演示 根据Student的ids进行批量查询和删除
1.批量查询
1.1 批量查询Dao层代码
public List<Student> excuteBatchQuery(String sql, Map<String, List<Object>> map) {
Session session = this.getSessionFactory().getCurrentSession();
SQLQuery query = session.createSQLQuery(sql).addEntity(Student.class);
if (map != null && map.size() > 0) {
for (Map.Entry<String, List<Object>> entry : map.entrySet()) {
query.setParameterList(entry.getKey(), entry.getValue());
}
}
return query.list();
}
1.2 批量查询Service层代码
@Transactional(rollbackFor = Throwable.class)
public List<Student> batchQuery(String ids) {
String sql = "select * from T_STUDENT where STUDENT_ID in (:id)";
Map<String, List<Object>> map = new HashMap<>();
List<Object> idLong = new ArrayList<>();
for (Object id : CollectionUtils.arrayToList(ids.split(","))) {
idLong.add(Long.parseLong(id.toString()));
}
map.put("id", idLong);
return studentDao.excuteBatchQuery(sql, map);
}
2.批量删除
2.1 批量删除Dao层代码
public void excuteBatchDelete(String sql, Map<String, List<Object>> map) {
Session session = this.getSessionFactory().getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
if (map != null && map.size() > 0) {
for (Map.Entry<String, List<Object>> entry : map.entrySet()) {
query.setParameterList(entry.getKey(), entry.getValue());
}
}
query.executeUpdate();
}
2.2 批量删除Service层代码
@Transactional(rollbackFor = Throwable.class)
public void batchDelete(String ids) {
String sql = "delete from T_STUDENT where STUDENT_ID in(:id)";
Map<String, List<Object>> map = new HashMap<>();
List<Object> idLong = new ArrayList<>();
for (Object id : CollectionUtils.arrayToList(ids.split(","))) {
idLong.add(Long.parseLong(id.toString()));
}
map.put("id", idLong);
this.studentDao.excuteBatchDelete(sql, map);
}
注意:
1.Dao层需要继承HibernateGenericDao接口
2.在Service层必须开启事务 否则会出错(@Transactional)