使用场景:

当需要往数据库插入数据时,表的主键需要接着已经有的数据后面进行自增。比如已经wq_customer表里,主键为TBL_ID,如果是空表,那么插入的数据TBL_ID设置为1,如果已经有n条数据,那么插入的数据TBL_ID设置为n+1。

SQL语句为

  1. SELECT
  2. CASE
  3. WHEN MAX(TBL_ID) IS NULL THEN
  4. 1
  5. ELSE
  6. MAX(TBL_ID) + 1
  7. END AS MAXID
  8. FROM
  9. wq_customer
  10. WHERE
  11. TBL_ID < 100000

单纯查询某表某列MAX为:

  1. SELECT
  2. MAX(TBL_ID)
  3. FROM
  4. wq_customer
  5. WHERE
  6. TBL_ID < 100000;

mybatis的相关代码如下(仅供参考):

调用代码如下:

  1. package com.msk.batch.wq.logic;
  2.  
  3. import com.msk.batch.wq.bean.BWQ201701Bean;
  4. import com.msk.batch.wq.bean.BWQ201701Bean2;
  5. import com.msk.batch.wq.bean.BWQ201701Bean3;
  6. import com.msk.common.logic.CommonLogic;
  7. import com.msk.core.base.BaseDao;
  8. import com.msk.core.base.BaseLogic;
  9. import com.msk.core.bean.BaseParam;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13.  
  14. import java.util.List;
  15.  
  16. /**
  17. * Created by fjm on 2017/1/9.
  18. */
  19. public class BWQ201701Logic extends BaseLogic{
  20.  
  21. private static Logger logger = LoggerFactory.getLogger(BWQ201701Logic.class);
  22.  
  23. public interface SqlId {
  24. static final String SQLID_INSERT_OMSDATA = "insertCmCustomer";
  25. }
  26.  
  27. @Autowired
  28. @Override
  29. public void setBaseDao(BaseDao baseDao) {
  30. super.setBaseDao(baseDao);
  31. }
  32. @Autowired
  33. CommonLogic commonLogic;
  34.  
  35. public void insertCmCustomer(List<BWQ201701Bean3> bwq201701BeanList){
  36.  
  37. for(BWQ201701Bean3 bwq201701Beans:bwq201701BeanList){
  38. BWQ201701Bean bwq201701Bean = new BWQ201701Bean();
  39. long id=commonLogic.maxId("WQ_CUSTOMER","TBL_ID");
  40. bwq201701Bean.setTblId(id);
  41. bwq201701Bean.setCmId(bwq201701Beans.getCm_id());
  42. bwq201701Bean.setCmName(bwq201701Beans.getCm_name());
  43. bwq201701Bean.setCmCode(bwq201701Beans.getCm_code());
  44. bwq201701Bean.setCmType(bwq201701Beans.getCm_type());
  45. bwq201701Bean.setCmManager(bwq201701Beans.getCm_manager());
  46. super.save(SqlId.SQLID_INSERT_OMSDATA, bwq201701Bean);
  47. }
  48. }
  49.  
  50. }

共通代码如下:

  1. package com.msk.common.logic;
  2.  
  3. import java.util.List;
  4.  
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10.  
  11. import com.msk.core.base.BaseDao;
  12. import com.msk.core.base.BaseLogic;
  13. import com.msk.core.bean.BaseParam;
  14.  
  15. /**
  16. * CommonLogic
  17. *
  18. * @author fjm
  19. * @version 1.0
  20. **/
  21. @Service("commonLogic")
  22. public class CommonLogic extends BaseLogic {
  23. /**
  24. * logger
  25. */
  26. private static Logger logger = LoggerFactory.getLogger(CommonLogic.class);
  27.  
  28. /**
  29. * SQL Id
  30. */
  31. interface SqlId {
  32. /** 获得最大Max Id */
  33. String SQL_ID_MAX_ID = "maxId";
  34. }
  35.  
  36. /**
  37. * 获得Max Id
  38. *
  39. * @param tableName 表名
  40. * @param tableFiled 字段名称
  41. * @return Max Id
  42. */
  43. @Transactional(readOnly = true)
  44. public Long maxId(String tableName, String tableFiled) {
  45. logger.debug("获得Max Id");
  46. BaseParam param = new BaseParam();
  47. param.setFilter("tableName", tableName);
  48. param.setFilter("tableFiled", tableFiled);
  49. return (Long) super.findObject(SqlId.SQL_ID_MAX_ID, param);
  50. }
  51.  
  52. @Autowired
  53. @Override
  54. public void setBaseDao(BaseDao baseDao) {
  55. super.setBaseDao(baseDao);
  56. }
  57. }

xml代码如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.msk.common.logic.CommonLogic">
  4. <sql id="maxIdSql">
  5. SELECT
  6. CASE
  7. WHEN MAX(${filterMap.tableFiled}) IS NULL THEN 1
  8. ELSE MAX(${filterMap.tableFiled})+1 END AS MAXID
  9. FROM ${filterMap.tableName}
  10. WHERE ${filterMap.tableFiled} <![CDATA[<]]> 100000
  11. </sql>
  12. <select id="maxId" parameterType="BaseParam" resultType="java.lang.Long">
  13. <include refid="maxIdSql"/>
  14. </select>
  15. </mapper>

【Java】自动获取某表某列的最大ID数的更多相关文章

  1. EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明

    在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...

  2. 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案

    问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...

  3. oracle数据库获取指定表的列的相关信息

    1.很多时候我们需要从数据库中获取指定表的所有列的相关属性,如 name,commens,datatype,datalength,pk等.下面就是制定的语句. select c.TABLE_NAME ...

  4. Java中获取刚插入数据库中的数据Id(主键,自动增长)

    public int insert(String cName, String ebrand, String cGender) { String sql = "insert into Clot ...

  5. Python自动获取数据库表结构

    Sandman https://sandman.readthedocs.io/en/latest/#

  6. MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录

    今天第一次用MySQL的触发器,怕忘了,赶紧写篇博客记录一下. 废话不说,先上语法: 1 CREATE TRIGGER trigger_name 2 { BEFORE | AFTER } { INSE ...

  7. java工作流系统表单自动 获取数据

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 什么是数据自动获 ...

  8. Java获取数据库表 字段 存储的部分数据

    在浏览器页面,选中图片(可多选) >单击删除按钮. 重点是, 本数据库表TabHeBeiTianQi中 存在 同一id,对应的picLocalPath字段  存储了多张图片,图片地址用   逗号 ...

  9. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean

    在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...

随机推荐

  1. Drupal7 实现like(点赞)功能

    尝试了好几个模块做下总结: 1. Like Dislike Buttons 好处:代码实现简单,一看就懂,开启后无需任何配置,自动在node底部显示like和unlike的小手.而且模版改起来也容易. ...

  2. 移动端推广APP防作弊机制之依我见

    本文来自网易云社区 在广告投放过程中,虚假流量常常给广告运营人员带来麻烦,影响广告投放的效果,如何预防作弊,不妨先来重现一下流量产生的场景,用户点击广告之后,一般都会落到广告主的网页,或者安装广告主的 ...

  3. shell loop

    #!/bin/sh date i=0 while [ $i -le 30 ] do         echi $i /usr/sbin/r2/np_test_acl -f rule.txt i=$(e ...

  4. ffmpeg 踩坑实录 近期使用总结(三)

    一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结    2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...

  5. xxl_job springboot改造

    代码地址:https://gitee.com/sharehappy/xxl_job_springboot 官方文档:https://github.com/xuxueli/xxl-job/blob/ma ...

  6. jvm之对象创建过程

    常量池中定位类的符号引用                ↓ 检查符号引用所代表的类是否已被加载,解析和初始化过  →                 ↓                        ...

  7. 8个数据清洗Python代码,复制可用,最长11行 | 资源

    最近,大数据工程师Kin Lim Lee在Medium上发表了一篇文章,介绍了8个用于数据清洗的Python代码. 数据清洗,是进行数据分析和使用数据训练模型的必经之路,也是最耗费数据科学家/程序员精 ...

  8. python基础知识-03-字符串

    python其他知识目录 1.for循环遍历字符串中单个字符 s_str="mcw" for i in s_str: print(i) -----------结果: m c w 2 ...

  9. 用 Python 构建一个极小的区块链

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录 ...

  10. Scrum立会报告+燃尽图(十月十三日总第四次):前期宣传相关工作

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 Scrum立会master:刘欣 一.小组介绍 组长:付佳 组员: ...