ssm中根据日期动态生成编号

接口方法:

Integer getCode(IncomeAllot incomeAllot);

service层代码:

	 public String getCode(){
    		String code = "";
    		//日期处理类
		String year = DateUtils.getYear();
		String month = DateUtils.getMonth();
		code = "F" + year + month+"-";
		IncomeAllot ia = new IncomeAllot();
		//mapping中SQL语句有条件,这必须传入值
		ia.setCode(code);
		//最上层接口中定义持久层对象dao
		Integer num = dao.getCode(ia);
		DecimalFormat df = new DecimalFormat("000");
     	        code = code + df.format(num);
		return code;
    }

Mapping映射文件:

    <select id="getCode" resultType="Integer">
		SELECT
		<!-- 查询年月对应编号出现的下一个数字,返回该数字-->
			 NVL(MAX(TO_NUMBER(SUBSTR(a.code,INSTR(a.code,'-')+1))),0)+1
		FROM income_allot a
		<!-- 模糊查询对应年月的编号,可以做到不同的年和月能从001开始编号-->
		WHERE a.code like '%'||#{code}||'%'
    </select>

注:用的oracle数据库。
总结:最核心的就是映射文件中查询条件,根据后台传来的年月,查询对应的编号,相同的日期顺序编号,不同的日期从1开始编号。service中定义的getCode不需要参数。获取年月字符串后必须要设置,该方法只返回生成的编号,并没有将编号存入的数据库中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值