最新笔记链接:https://app.yinxiang.com/fx/07a20d68-0a36-4018-be6b-715450c12e87

基础操作请看: SSH - 配置Service→Dao→Hibernate
1、批处理 - Hibernate方式
前提:设置FlushMode为COMMIT
// Dao层或Service层
Session session = this.getSession();
session.setHibernateFlushMode(FlushMode.COMMIT);
1)、批量 INSERT数据
// ≤ 50 - 50条记录 批处理(数据量少于50时,建议使用该方式)
Transaction tx = session.beginTransaction();
for (int i = 0; i < 50; i++) {
    EkpOtDetailModel addModel = new EkpOtDetailModel();
    addModel.setFdId(IDGenerator.generateID());
    addModel.setFdUser("liquidTest");
    session.save(addModel);
}
tx.commit();
// ≥ 50 - 1000条记录 - 批处理 - time:13.742s(建议用该方式,根据数据量来选择每批flush的数量[10, 50])
Transaction tx = session.beginTransaction();
for ( int i = 0; i < 1000; i++ ) {
    EkpOtDetailModel addModel = new EkpOtDetailModel();
    addModel.setFdId(IDGenerator.generateID());
    addModel.setFdUser("liquidTest");
    session.save(addModel);
    if( i % 50 == 0 ) {
        session.flush();
        session.clear();
    }
}
tx.commit();
// ≥ 50 - 1000条记录 - 非批处理 - time:27.192s(千万别这么玩,更不可一条条save → flush)
List<EkpOtDetailModel> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    EkpOtDetailModel addModel = new EkpOtDetailModel();
    addModel.setFdId(IDGenerator.generateID());
    addModel.setFdUser("liquidTest");
    list.add(addModel);
    if (i % 50 == 0) {
        ekpOtDetailDao.saveOrUpdateAll(list);
        session.flush();
        session.clear();
        list.clear();
    }
}
session.flush();
2)、批量 UPDATE数据
// ≤ 50 - 50条记录 - 批处理(数据量少于50时建议使用该方式)
HQLInfo hql = new HQLInfo();
hql.setWhereBlock("fdUser = :user");
hql.setParameter("user", "liquidTest-update");
List<EkpOtDetailModel> list = ekpOtDetailDao.findList(hql);
AtomicInteger count = new AtomicInteger();
Transaction tx = session.beginTransaction();
list.forEach(model -> {
    model.setFdUser("liquidTest-update-批处理");
    session.update(model);
    if (count.incrementAndGet() % 50 == 0) {
        session.flush();
        session.clear();
    }
});
tx.commit();
// ≥ 50 - 1000条记录 - 批处理 - time:12.754s(建议用该方式,根据数据量来选择每批flush的数量[10, 50])
HQLInfo hql = new HQLInfo();
hql.setWhereBlock("fdUser = :user");
hql.setParameter("user", "liquidTest-update");
List<EkpOtDetailModel> list = this.findList(hql);
AtomicInteger count = new AtomicInteger();
Transaction tx = session.beginTransaction();
list.forEach(model -> {
    model.setFdUser("liquidTest-update-批处理");
    session.update(model);
    if (count.incrementAndGet() % 50 == 0) {
        session.flush();
        session.clear();
    }
});
tx.commit();
// ≥ 50 - 1000条记录 - 非批处理 - time:14.170s(千万别这么玩,更不可一条条update → flush)
List<EkpOtDetailModel> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    EkpOtDetailModel addModel = new EkpOtDetailModel();
    addModel.setFdId(IDGenerator.generateID());
    addModel.setFdUser("liquidTest");
    list.add(addModel);
    if (i % 50 == 0) {
        ekpOtDetailDao.saveOrUpdateAll(list);
        session.flush();
        session.clear();
        list.clear();
    }
}
session.flush();
3)、批量 DELETE数据
将2)中的update改成delete即可。
2、批处理 - JDBC(效率高,但考虑维护不便,非必要不使用)
1)、批量INSERT数据
2)、批量UPDATE数据
3)、批量DELETE数据
3、逐条数据SELECT(非特殊情况请勿使用)
HQLInfo hql = new HQLInfo();
hql.setWhereBlock("fdUser = :user");
hql.setParameter("user", "liquidTest");
Iterator it = this.findValueIterator(hql);
while (it.hasNext()) {
    System.out.println(it.next());// 每次it.next()都会产生一条select语句并执行
}
4、JOIN
HQLInfo hql = new HQLInfo();
hql.setSelectBlock("ekpOtDetailModel.fdId, sysOrgElement.fdName");
hql.setWhereBlock("ekpOtDetailModel.user.fdName=:userName");
hql.setJoinBlock("LEFT JOIN com.landray.kmss.sys.organization.model.SysOrgElement sysOrgElement ON ekpOtDetailModel.user.fdId = sysOrgElement.fdId");
hql.setParameter("userName", "黎令魁");
List<Object[]> list = ekpOtDetailDao.findList(hql);
5、DISTINCT
HQLInfo hql = new HQLInfo();
hql.setSelectBlock("DISTINCT ekpOtDetailModel.user.fdName, ekpOtDetailModel.fdId");

EKP后端/开发/SSH - Hibernate常用操作(public)相关推荐

  1. # 后端开发技巧、常用规范

    后端开发技巧.常用规范 开发技巧 equals() 方法的使用 null.equals()会出报空指针,因该是非null的值.equals() 可以使用Objects的equals()方法避免空值,完 ...

  2. 程序员后端开发苹果电脑常用快捷键(实用版)

    程序员后端开发苹果电脑常用快捷键 MBP(Mac Book Pro)快捷键 锁屏 截全屏 选择截屏 强制退出某个应用(类比windows下任务管理器) 撤销 剪切 拷贝(Copy) 粘贴 全选(All ...

  3. EKP后端/开发/常用开发 - 低代码/表单映射CRUD - 2基础操作(public)

    最新笔记链接:https://app.yinxiang.com/fx/42f42d74-4ca9-4d0a-8eb0-84abd1b7f92d <property name="fd_f ...

  4. EKP后端/开发/公式定义器 - 扩展 - 自定义函数(public)

    最新笔记连接:https://app.yinxiang.com/fx/e8613c8c-2649-498b-a8ab-bb2b423a1a5a 1.新建目录.类 1)在com.landray.kmss ...

  5. 驱动开发中的常用操作

    这篇文章会持续更新,由于在驱动中,有许多常用的操作代码几乎不变,而我自己有时候长时间不用经常忘记,所以希望在这把一些常用的操作记录下来,当自己遗忘的时候,有个参考 创建设备对象 创建设备对象使用函数I ...

  6. 嵌入式linux开发ubuntu下常用操作

    以树状图显示指定路径结构: tree -x path 显示后台暂停的进程: jobs fg number 将本地文件拷贝至远端 scp local_file remote_username@remot ...

  7. java 字符查找 截断_java字符串常用操作(查找、截取、分割)

    public class 字符串常用操作 { public static void main(String[] args) { /* * 查找子串 */ String str1="dwqae ...

  8. Linux 常用Shell脚本,后端开发必备

    Linux 常用Shell脚本,后端开发必备 文章目录 Linux 常用Shell脚本,后端开发必备 1 用户猜数字 2 查看有多少远程的 IP 在连接本机 3 helloworld 4 打印 tom ...

  9. 连夜整理了多年后端开发最常用linux指令(建议收藏,边用边学)

    0. 引言 前段时间有同学问我:linux指令那么多,怎么去学?实际上这个问题也曾经困扰着我,多年走来,我总结了一个经验:优先学习你马上要用到的,而不是上来就体系的全部学习一遍. 可能很多同学会不太适 ...

最新文章

  1. LINUX 查找tomcat日志关键词
  2. mysql的索引本质是一颗_一文揭开Mysql索引本质
  3. 四层负载均衡与七层负载均衡
  4. 完善vim bccalc_linux插件
  5. leetcode:位操作
  6. ws2812b灯带容易坏_吊灯吸顶灯筒灯壁灯射灯灯带LED线条灯……都是个啥?
  7. 我的内核学习笔记15:海思Hi3516平台GPIO使用记录
  8. 普及风险管理的一些环节
  9. SQL Server 连接查询(多表连接查询)
  10. 收集表的使用与批量图片下载
  11. SQL挂起的解决办法
  12. SpreadJS 15.0 隆重登场 SpreadJS
  13. Linux操作系统 - 01 Linux基本命令
  14. 里氏替换原则-正方形是长方形
  15. 和平精英体验服服务器怎么样维护,和平精英体验服账号怎么弄_体验服官网申请教程_3DM手游...
  16. INDEX函数与MATCH函数嵌套使用技巧
  17. 执行 this.$destroy()后原生DOM事件也无法执行
  18. Android——最佳性能实战
  19. ETL KETTLE 读取csv文件写入数据库
  20. matlab磁场计算公式,利用MATLAB计算电磁场有关分布.doc

热门文章

  1. 计算机时序控制方式,中央处理器的时序产生器和控制方式
  2. matlab不匹配分隔符,MATLAB由于分隔符问题,读取数据不完全
  3. ByShell 一个穿越主动防御的木马
  4. 2018年华为软件岗
  5. l4d2服务器难度修改,发两个自己写的插件给大家,高难度服务器必装!!!!!!!!
  6. l4d2显示所有服务器的指令,求生之路2指令大全 求生之路2指令怎么用? 地图指令-游侠网...
  7. repositoryItemButtonEdit ButtonClick没有反应的原因
  8. 【Docker】Docker可视化管理工具Portainer
  9. 什么是产品路线图?如何做产品路线图规划
  10. ARM核心板应用案例-飞凌嵌入式智慧交通领域合集