大家好,又见面了,我是你们的朋友全栈君。
背景:在hibernate 应用中,需要实现按条件删除功能
场景:在方法中传入泛型对象,构建HQL语句
思路:遍历对象属性,如果有值,表明该字段是删除条件,用它构建删除HQL。
具体做法是遍历对象对象的所有get方法,然后通过方法反射获取到对象的值。然后再判断值是否为空,从而组装HQL语句
使用例子:
public class testH {
public static void main(String[] args) {
Session session = sessionFactory.getCurrentSession();
//删除
TestT<TestBean> testT = new TestT();
TestBean testBean = new TestBean();
testBean.setName("zhan");
testBean.setCode("hhaa");
/*
* @Date: 2021/1/9 11:37
* 用session删除 (这种方式没有设置id 删除不了)
*/
session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.delete(testBean);
session.getTransaction().commit();
/*
* @Date: 2021/1/9 11:37
* 采用自己 构造删除HQL的方法删除
*/
List<Object> paramList = new ArrayList<>();
// createDeleteHql 方法详情看:https://blog.csdn.net/zhan107876/article/details/112389288
// createDeleteHql 方法 演示 完整工程 github:https://github.com/zhan107876/method-invoke-demo)
String deleteHql = testT.createDeleteHql(testBean, paramList);
// 构造hibernate查询
Query query = session.createQuery(deleteHql);
if (paramList != null) {
int size = paramList.size();
for (int i = 0; i < size; i++) {
query.setParameter(i, paramList.get(i));
}
}
// 执行删除操作
query.executeUpdate();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148727.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...