【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 ...
随机推荐
- echarts y轴,显示数据,但不显示竖线
在yAxis中插入: axisLine: {show:false}, axisTick: {show:false}, yAxis : [ { show:true, axisLine: {show:fa ...
- WPF设置ListBoxItem失去焦点时的背景色
<!--全局ListBoxItem--> <Style TargetType="ListBoxItem"> <Style.Resources> ...
- struts常用知识
一,struts2是什么? struts2是一个控制框架,相当于连接底层和显示层,控制页面和数据展示 二,为什么用struts2? jsp+javabean模式:jsp里的小脚本java代码太多,页面 ...
- centos7下将java -jar命令运行一个项目做成systemd服务
有些时候运行一个java项目在linux下通过一条简单的java命令即可,如: #nohup java -jar jenkins.war & ###这里为后台运行jenkins 在此背景下,j ...
- 【CF833D】Red-Black Cobweb
[CF833D]Red-Black Cobweb 题面 洛谷 题解 看到这种统计路径的题目当然是淀粉质啦. 考虑转化一下信息设一条路径上有红点\(a\)个,黑点\(b\)个 则\(2min(a,b)\ ...
- [POJ3041]Asteroids
Asteroids 好久没打过网络流相关的题了...... 题意:一个矩阵n×n,有m个东西,一次去掉一整行或一整列,问最少次数. 题解:匈牙利. 把每行变成一个点(X集合),每列变成一个点(Y集合) ...
- 用Python实现检测视频真伪?
译者注:本文以一段自打24小时耳光的视频为例子,介绍了如何利用均值哈希算法来检查重复视频帧.以下是译文. 有人在网上上传了一段视频,他打了自己24个小时的耳光.他真的这么做了吗?看都不用看,肯定没有! ...
- jsp 修改页面感受
什么事情只有做过才知道. 最近在负责官网的开发,有一些页面需要和前端商量着修改,但是看到jsp那繁杂的标签和各种css,js混到一起,实在觉得jsp已经是一种落后的技术了,在修改过程中频频出现各种格式 ...
- PHP中的闭包详解
PHP闭包(Closure)使用详解 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-02我要评论 本篇文章介绍了,PHP闭包(Closure)的使用介绍,需要的朋友参考下 不知不 ...
- php memcache 使用学习
Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...