【Java】自动获取某表某列的最大ID数
使用场景:
当需要往数据库插入数据时,表的主键需要接着已经有的数据后面进行自增。比如已经wq_customer表里,主键为TBL_ID,如果是空表,那么插入的数据TBL_ID设置为1,如果已经有n条数据,那么插入的数据TBL_ID设置为n+1。
SQL语句为
- SELECT
- CASE
- WHEN MAX(TBL_ID) IS NULL THEN
- 1
- ELSE
- MAX(TBL_ID) + 1
- END AS MAXID
- FROM
- wq_customer
- WHERE
- TBL_ID < 100000
单纯查询某表某列MAX为:
- SELECT
- MAX(TBL_ID)
- FROM
- wq_customer
- WHERE
- TBL_ID < 100000;
mybatis的相关代码如下(仅供参考):
调用代码如下:
- package com.msk.batch.wq.logic;
- import com.msk.batch.wq.bean.BWQ201701Bean;
- import com.msk.batch.wq.bean.BWQ201701Bean2;
- import com.msk.batch.wq.bean.BWQ201701Bean3;
- import com.msk.common.logic.CommonLogic;
- import com.msk.core.base.BaseDao;
- import com.msk.core.base.BaseLogic;
- import com.msk.core.bean.BaseParam;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import java.util.List;
- /**
- * Created by fjm on 2017/1/9.
- */
- public class BWQ201701Logic extends BaseLogic{
- private static Logger logger = LoggerFactory.getLogger(BWQ201701Logic.class);
- public interface SqlId {
- static final String SQLID_INSERT_OMSDATA = "insertCmCustomer";
- }
- @Autowired
- @Override
- public void setBaseDao(BaseDao baseDao) {
- super.setBaseDao(baseDao);
- }
- @Autowired
- CommonLogic commonLogic;
- public void insertCmCustomer(List<BWQ201701Bean3> bwq201701BeanList){
- for(BWQ201701Bean3 bwq201701Beans:bwq201701BeanList){
- BWQ201701Bean bwq201701Bean = new BWQ201701Bean();
- long id=commonLogic.maxId("WQ_CUSTOMER","TBL_ID");
- bwq201701Bean.setTblId(id);
- bwq201701Bean.setCmId(bwq201701Beans.getCm_id());
- bwq201701Bean.setCmName(bwq201701Beans.getCm_name());
- bwq201701Bean.setCmCode(bwq201701Beans.getCm_code());
- bwq201701Bean.setCmType(bwq201701Beans.getCm_type());
- bwq201701Bean.setCmManager(bwq201701Beans.getCm_manager());
- super.save(SqlId.SQLID_INSERT_OMSDATA, bwq201701Bean);
- }
- }
- }
共通代码如下:
- package com.msk.common.logic;
- import java.util.List;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.msk.core.base.BaseDao;
- import com.msk.core.base.BaseLogic;
- import com.msk.core.bean.BaseParam;
- /**
- * CommonLogic
- *
- * @author fjm
- * @version 1.0
- **/
- @Service("commonLogic")
- public class CommonLogic extends BaseLogic {
- /**
- * logger
- */
- private static Logger logger = LoggerFactory.getLogger(CommonLogic.class);
- /**
- * SQL Id
- */
- interface SqlId {
- /** 获得最大Max Id */
- String SQL_ID_MAX_ID = "maxId";
- }
- /**
- * 获得Max Id
- *
- * @param tableName 表名
- * @param tableFiled 字段名称
- * @return Max Id
- */
- @Transactional(readOnly = true)
- public Long maxId(String tableName, String tableFiled) {
- logger.debug("获得Max Id");
- BaseParam param = new BaseParam();
- param.setFilter("tableName", tableName);
- param.setFilter("tableFiled", tableFiled);
- return (Long) super.findObject(SqlId.SQL_ID_MAX_ID, param);
- }
- @Autowired
- @Override
- public void setBaseDao(BaseDao baseDao) {
- super.setBaseDao(baseDao);
- }
- }
xml代码如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
- <mapper namespace="com.msk.common.logic.CommonLogic">
- <sql id="maxIdSql">
- SELECT
- CASE
- WHEN MAX(${filterMap.tableFiled}) IS NULL THEN 1
- ELSE MAX(${filterMap.tableFiled})+1 END AS MAXID
- FROM ${filterMap.tableName}
- WHERE ${filterMap.tableFiled} <![CDATA[<]]> 100000
- </sql>
- <select id="maxId" parameterType="BaseParam" resultType="java.lang.Long">
- <include refid="maxIdSql"/>
- </select>
- </mapper>
【Java】自动获取某表某列的最大ID数的更多相关文章
- EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明
在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...
- 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...
- oracle数据库获取指定表的列的相关信息
1.很多时候我们需要从数据库中获取指定表的所有列的相关属性,如 name,commens,datatype,datalength,pk等.下面就是制定的语句. select c.TABLE_NAME ...
- Java中获取刚插入数据库中的数据Id(主键,自动增长)
public int insert(String cName, String ebrand, String cGender) { String sql = "insert into Clot ...
- Python自动获取数据库表结构
Sandman https://sandman.readthedocs.io/en/latest/#
- MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录
今天第一次用MySQL的触发器,怕忘了,赶紧写篇博客记录一下. 废话不说,先上语法: 1 CREATE TRIGGER trigger_name 2 { BEFORE | AFTER } { INSE ...
- java工作流系统表单自动 获取数据
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 bpm工作流系统 java工作流主流框架 自定义工作流引擎 表单设计器 流程设计器 什么是数据自动获 ...
- Java获取数据库表 字段 存储的部分数据
在浏览器页面,选中图片(可多选) >单击删除按钮. 重点是, 本数据库表TabHeBeiTianQi中 存在 同一id,对应的picLocalPath字段 存储了多张图片,图片地址用 逗号 ...
- 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean
在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...
随机推荐
- Drupal7 实现like(点赞)功能
尝试了好几个模块做下总结: 1. Like Dislike Buttons 好处:代码实现简单,一看就懂,开启后无需任何配置,自动在node底部显示like和unlike的小手.而且模版改起来也容易. ...
- 移动端推广APP防作弊机制之依我见
本文来自网易云社区 在广告投放过程中,虚假流量常常给广告运营人员带来麻烦,影响广告投放的效果,如何预防作弊,不妨先来重现一下流量产生的场景,用户点击广告之后,一般都会落到广告主的网页,或者安装广告主的 ...
- 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 ...
- ffmpeg 踩坑实录 近期使用总结(三)
一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结 2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...
- xxl_job springboot改造
代码地址:https://gitee.com/sharehappy/xxl_job_springboot 官方文档:https://github.com/xuxueli/xxl-job/blob/ma ...
- jvm之对象创建过程
常量池中定位类的符号引用 ↓ 检查符号引用所代表的类是否已被加载,解析和初始化过 → ↓ ...
- 8个数据清洗Python代码,复制可用,最长11行 | 资源
最近,大数据工程师Kin Lim Lee在Medium上发表了一篇文章,介绍了8个用于数据清洗的Python代码. 数据清洗,是进行数据分析和使用数据训练模型的必经之路,也是最耗费数据科学家/程序员精 ...
- python基础知识-03-字符串
python其他知识目录 1.for循环遍历字符串中单个字符 s_str="mcw" for i in s_str: print(i) -----------结果: m c w 2 ...
- 用 Python 构建一个极小的区块链
虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录 ...
- Scrum立会报告+燃尽图(十月十三日总第四次):前期宣传相关工作
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 Scrum立会master:刘欣 一.小组介绍 组长:付佳 组员: ...