一、有关概念的介绍
1、递归算法,就是直接或间接调用自身的函数,也就是把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。
2、数据库自增长:
二、案例
上面解释可能有点太官方了, 我们直接拍案例
为登录进来的分配一个唯一的编号(要求:生成用户的带字母的编号比如:KG001,KG002)
三、案例分析
编号可以设计为数据库的自增长来完成,但是这里面有二个问题需要解决
1)、要求生成KG001,但是数据库的自增长是int
2)、自增长生成的id,是没有格式化必须 1,11,111生成的id,位数不保证相同
3)、如果出现自增长清1 truncate sw_client_id,那么如何来避免已经生成的客户的id。
四、解决方案
1)、第一个问题,需要用代码和数据库自增长配合使用 ,需要一个专门的字段来解决此问题。
2)、那么我们来解决第二个问题:只需要一个,按位置补齐的方法即可:
/** * * 格式化数字 * **/ public static String Decimalformat(String string){ try { int number = Integer.parseInt(string); DecimalFormat df = new DecimalFormat ("0000000"); string = df.format(number); } catch(NumberFormatException e) { } return string; }
具体代码实现:
@Transactional public String insertClientId(HttpServletRequest request) { String returnString=null; ClientId clientId =new ClientId(); int index=clientIdMapper.insertClientId(clientId); //更新客户id Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); String receivernick="KG"+year+StringUtil.Decimalformat(String.valueOf(clientId.getId())); Client client =clientMapper.selectByPrimaryKey(receivernick); if (client==null) { //查询用户是否存在该用户号 clientId.setReceivernick(receivernick); int value = clientIdMapper.updateClientId(clientId); if (value == 1) { returnString = clientId.getReceivernick(); } }else { clientIdMapper.deleteClientId(clientId.getId()); returnString= insertClientId(request); } return returnString; }
3)、解决第三个问题是直接用递归去实现
clientIdMapper.deleteClientId(clientId.getId());