java数据库唯一id生成工具类


import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;

public class UniqueIdUtil
{
  private static long adjust = 1L;
  private static long nextId = 0L;
  private static long lastId = -1L;
  private static long randomLeng = 6L;
  private static JdbcTemplate jdbcTemplate;
  private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  
  private static void init()
  {
    try
    {
      jdbcTemplate = (JdbcTemplate)AppUtil.getBean("jdbcTemplateSN");
      String str2 = AppConfigUtil.get("genId.adjust");
      if (str2 != null) {
        adjust = Integer.parseInt(str2);
      }
    }
    catch (Exception localException)
    {
      adjust = 1L;
      String str3 = AppConfigUtil.get("genId.adjust");
      if (str3 != null) {
        adjust = Integer.parseInt(str3);
      }
    }
  }
  
  private static void getNextIdBlock()
  {
    if (jdbcTemplate == null) {
      init();
    }
    Long localLong = Long.valueOf(-1L);
    Integer localInteger = Integer.valueOf(-1);
    String str1 = "SELECT bound,incremental FROM SYS_DB_ID T WHERE T.ID=?";
    String str2 = "UPDATE SYS_DB_ID  SET BOUND=? WHERE ID=?";
    try
    {
      Map localMap = jdbcTemplate.queryForMap(str1, new Object[] { Long.valueOf(adjust) });
      localLong = Long.valueOf(Long.parseLong(localMap.get("bound").toString()));
      localInteger = Integer.valueOf(Integer.parseInt(localMap.get("incremental").toString()));
      nextId = localLong.longValue();
      lastId = localLong.longValue() + localInteger.intValue();
      jdbcTemplate.update(str2, new Object[] { Long.valueOf(lastId), Long.valueOf(adjust) });
    }
    catch (EmptyResultDataAccessException localEmptyResultDataAccessException)
    {
      insertNewComputer();
    }
  }
  
  private static void insertNewComputer()
  {
    try
    {
      lastId = 10000L;
      String str = "INSERT INTO SYS_DB_ID (id,incremental,bound) VALUES(" + adjust + ",10000," + lastId + ")";
      jdbcTemplate.update(str);
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
    }
  }
  
  public static synchronized long genId()
  {
    if (lastId <= nextId) {
      getNextIdBlock();
    }
    long l = nextId++;
    return l + adjust * 10000000000000L;
  }
  
  public static final String getGuid()
  {
    UUID localUUID = UUID.randomUUID();
    return localUUID.toString();
  }
  
  public static final String getRandom()
  {
    Random localRandom = new Random();
    String str1 = "";
    for (int i = 0; i < randomLeng; i++)
    {
      String str2 = String.valueOf(localRandom.nextInt(10));
      str1 = str1 + str2;
    }
    return str1;
  }
  
  public static String genOrderNo()
  {
    long l = genId();
    String str = dateFormat.format(new Date());
    return str + l;
  }
  
  public static void main(String[] paramArrayOfString)
    throws Exception
  {}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以参考以下的Java代码: ```java import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class MysqlInsertGenerator<T> { private Class<T> clazz; public MysqlInsertGenerator(Class<T> clazz) { this.clazz = clazz; } public String generateInsertStatement(T object, String tableName) throws IllegalAccessException { StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO ").append(tableName).append(" ("); List<Field> fields = getFields(); for (int i = 0; i < fields.size(); i++) { sb.append(fields.get(i).getName()); if (i != fields.size() - 1) { sb.append(", "); } } sb.append(") VALUES ("); for (int i = 0; i < fields.size(); i++) { Field field = fields.get(i); field.setAccessible(true); Object value = field.get(object); if (value == null) { sb.append("NULL"); } else if (value instanceof String) { sb.append("'").append(value).append("'"); } else { sb.append(value); } if (i != fields.size() - 1) { sb.append(", "); } } sb.append(");"); return sb.toString(); } private List<Field> getFields() { List<Field> fields = new ArrayList<>(); Class<?> current = clazz; while (current != null) { for (Field field : current.getDeclaredFields()) { fields.add(field); } current = current.getSuperclass(); } return fields; } } ``` 使用方法: ```java public static void main(String[] args) throws IllegalAccessException { User user = new User(); user.setId(1); user.setUsername("john"); user.setPassword("123456"); user.setAge(20); MysqlInsertGenerator<User> generator = new MysqlInsertGenerator<>(User.class); String sql = generator.generateInsertStatement(user, "user"); System.out.println(sql); } ``` 其中,`User` 是一个实体类,对应了数据库中的 `user` 表。该工具类可以将一个实体类转换为对应的 MySQL 插入语句。 需要注意的是,该工具类只适用于简单的实体类,如果实体类中存在复杂类型(如 List、Map 等),则需要进行特殊处理。同时,该工具类也没有考虑 SQL 注入等安全问题,使用时需要注意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值