第一篇文章http://numen06.iteye.com/blog/1420694介绍了,流水号的生成,可惜忘了加入循环操作,比如日循环,月循环,年循环,这次来补上。
注入方法已经在一写过了,就不写了。主要是代码部分。
直接上代码
注入方法已经在一写过了,就不写了。主要是代码部分。
直接上代码
package com.wesley.framework.dao; import java.text.ParseException; import java.util.GregorianCalendar; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; /** * 流水号参数封装类 * * @author it.zl * */ public class PrimaryBean { // select 'SP-' as prefix,'yyyyMMdd' as dataString,'000000' startNumber public final static String YEAR = "year"; public final static String MONTH = "month"; public final static String DAY = "day"; /** * 表示流水号中的前缀,比如测试操作可以加'TETS-'那么流水号的前缀就会加上'TEST-201207250000001' */ private String prefix; /** * 表示日期的格式如'yyyyMMdd',那么会生产流水号中的日期为'20120725','yyyy-MM-dd'则会是'2012-07-25' */ private String dataString; /** * 开始第一个数是多少,定义长度和其实数值,如000000 */ private String startNumber; /** * 表示流水号中的日期,如20120725 */ private String dateTimeString; /** * 可以设置循环类型,如每日生成新的流水号从0开始,默认为日,循环 数值为year,month,day */ private String repeatCycle = DAY; /** * 是否每次都从数据库验证 */ private Boolean isDataBase = false; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getDataString() { return dataString; } public void setDataString(String dataString) { this.dataString = dataString; } public String getStartNumber() { return startNumber; } public void setStartNumber(String startNumber) { this.startNumber = startNumber; } public Boolean getIsDataBase() { return isDataBase; } public void setIsDataBase(Boolean isDataBase) { this.isDataBase = isDataBase; } public String getRepeatCycle() { return repeatCycle; } public void setRepeatCycle(String repeatCycle) { this.repeatCycle = repeatCycle; } public String getDateTimeString() { return dateTimeString; } public void setDateTimeString(String dateTimeString) { this.dateTimeString = dateTimeString; } /** * 把dateTimeString转换正GregorianCalendar * * @return DateTime */ public GregorianCalendar getDateTime() { if (StringUtils.isEmpty(dateTimeString)) return new GregorianCalendar(); GregorianCalendar date = new GregorianCalendar(); try { date.setTime(DateUtils.parseDate(this.getDateTimeString(), new String[] { this.getDataString() })); } catch (ParseException e) { return new GregorianCalendar(); } return date; } }
package com.wesley.framework.dao; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import com.wesley.framework.dao.dbutils.DBHelper; /** * 流水号生成类 * * @author it.zl * */ public class PrimaryGenerater { /** * 单例 */ private static PrimaryGenerater primaryGenerater = null; /** * 数据库访问类 */ private DBHelper dbHelper; /** * 生成流水号的SQL,支持多种格式,如业务BIZ,非业务NOBIZ */ private Map<String, String> sqls = new HashMap<String, String>(); /** * 对应不用的SQL生产的不同参数类 */ private Map<String, PrimaryBean> primarBeans = new HashMap<String, PrimaryBean>(); private PrimaryGenerater() { super(); } public PrimaryGenerater(BasicDataSource database, Map<String, String> sqls) { super(); this.dbHelper = new DBHelper(database); this.sqls = sqls; for (String key : sqls.keySet()) { this.primarBeans.put(key, this.getPrimaryBeanByDatabase(key)); } } public static PrimaryGenerater newInstance(BasicDataSource database, Map<String, String> sqls) { synchronized (PrimaryGenerater.class) { primaryGenerater = new PrimaryGenerater(database, sqls); } return primaryGenerater; } /** * * 取得PrimaryGenerater的单例实现 * * @return */ public static PrimaryGenerater getInstance() { if (primaryGenerater == null) { synchronized (PrimaryGenerater.class) { if (primaryGenerater == null) { primaryGenerater = new PrimaryGenerater(); } } } return primaryGenerater; } /** * 通过 数据库查询键获得封装类 * * @param key * @return */ public synchronized PrimaryBean getPrimaryBeanByDatabase(String key) { if (!this.sqls.containsKey(key)) return null; PrimaryBean primaryBean = this.primarBeans.get(key); if (primaryBean != null && !primaryBean.getIsDataBase()) return primaryBean; primaryBean = dbHelper.findFirst(PrimaryBean.class, this.sqls.get(key)); return primaryBean; } /** * 通过数据库查询键位生成流水号 * * @param key * @return */ public synchronized String geneterNextNumberByKey(String key) { PrimaryBean primaryBean = this.getPrimaryBeanByDatabase(key); return this.geneterNextNumber(primaryBean); } /** * 通过封装类生成流水号 * * @param primaryBean * @return */ public synchronized String geneterNextNumber(PrimaryBean primaryBean) { String nextNumber = this.geneterNextNumber(isRestart(primaryBean), primaryBean.getStartNumber()); primaryBean.setStartNumber(nextNumber); String dataString = this.geneterDataString(primaryBean.getDataString()); primaryBean.setDateTimeString(dataString); String serialNumber = primaryBean.getPrefix() + dataString + nextNumber; return serialNumber; } private synchronized Boolean isRestart(PrimaryBean primaryBean) { GregorianCalendar gcNow = new GregorianCalendar(); GregorianCalendar date = primaryBean.getDateTime(); if (StringUtils.equalsIgnoreCase(PrimaryBean.YEAR, primaryBean.getRepeatCycle())) { if (gcNow.get(GregorianCalendar.YEAR) == date .get(GregorianCalendar.YEAR)) return false; } if (StringUtils.equalsIgnoreCase(PrimaryBean.MONTH, primaryBean.getRepeatCycle())) { if (gcNow.get(GregorianCalendar.YEAR) == date .get(GregorianCalendar.YEAR) && gcNow.get(GregorianCalendar.MONTH) == date .get(GregorianCalendar.MONTH)) return false; } if (StringUtils.equalsIgnoreCase(PrimaryBean.DAY, primaryBean.getRepeatCycle())) { if (DateUtils.isSameDay(gcNow, date)) return false; } return true; } /** * 通过开始数字字符串生成下一个流水号 * * @param startNumber * @return */ public synchronized String geneterNextNumber(Boolean isRestart, String startNumber) { Long temp = Long.valueOf(startNumber) + 1; StringBuilder sb = new StringBuilder(); for (int i = 0; i < startNumber.length(); i++) sb.append("0"); DecimalFormat df = new DecimalFormat(sb.toString()); return isRestart ? sb.toString() : df.format(temp); } /** * 通过 格式生成日期格式 * * @param dataformat * @return */ private synchronized String geneterDataString(String dataformat) { SimpleDateFormat formatter = new SimpleDateFormat(dataformat); return formatter.format(new Date()); } }
package com.wesley.framework.dao.dbutils; import java.math.BigDecimal; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbutils.BasicRowProcessor; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.wesley.framework.commen.StringFormat; public class DBHelper { private static final Log logger = LogFactory.getLog(DBHelper.class); private BasicDataSource dataSource; private QueryRunner queryRunner; public DBHelper(BasicDataSource dataSource) { super(); this.dataSource = dataSource; } public void setDataSource(BasicDataSource dataSource) { this.dataSource = dataSource; } /** * 执行sql语句 * * @param sql * sql语句 * @return 受影响的行数 */ public int update(String sql) { return update(sql, null); } /** * 执行sql语句 <code> * executeUpdate("update user set username = 'kitty' where username = ?", "hello kitty"); * </code> * * @param sql * sql语句 * @param param * 参数 * @return 受影响的行数 */ public int update(String sql, Object param) { return update(sql, new Object[] { param }); } /** * 执行sql语句 * * @param sql * sql语句 * @param params * 参数数组 * @return 受影响的行数 */ public int update(String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); int affectedRows = 0; try { if (params == null) { affectedRows = queryRunner.update(sql); } else { affectedRows = queryRunner.update(sql, params); } } catch (SQLException e) { logger.error("Error occured while attempting to update data", e); } return affectedRows; } /** * 执行批量sql语句 * * @param sql * sql语句 * @param params * 二维参数数组 * @return 受影响的行数的数组 */ public int[] batchUpdate(String sql, Object[][] params) { queryRunner = new QueryRunner(dataSource); int[] affectedRows = new int[0]; try { affectedRows = queryRunner.batch(sql, params); } catch (SQLException e) { logger.error("Error occured while attempting to batch update data", e); } return affectedRows; } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @return 查询结果 */ public List<Map<String, Object>> find(String sql) { return find(sql, null); } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @param param * 参数 * @return 查询结果 */ public List<Map<String, Object>> find(String sql, Object param) { return find(sql, new Object[] { param }); } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @param params * 参数数组 * @return 查询结果 */ public List<Map<String, Object>> find(String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { if (params == null) { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler()); } else { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return list; } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @return 查询结果 */ public <T> List<T> find(Class<T> entityClass, String sql) { return find(entityClass, sql, null); } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @param param * 参数 * @return 查询结果 */ public <T> List<T> find(Class<T> entityClass, String sql, Object param) { return find(entityClass, sql, new Object[] { param }); } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @param params * 参数数组 * @return 查询结果 */ public <T> List<T> find(Class<T> entityClass, String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); List<T> list = new ArrayList<T>(); try { if (params == null) { list = queryRunner.query(sql, new BeanListHandler<T>( entityClass, new BasicRowProcessor( new StrategyBeanProcessor(new HumpMatcher())))); } else { list = queryRunner.query(sql, new BeanListHandler<T>( entityClass, new BasicRowProcessor( new StrategyBeanProcessor(new HumpMatcher()))), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return list; } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @return 对象 */ public <T> T findFirst(Class<T> entityClass, String sql) { return findFirst(entityClass, sql, null); } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @param param * 参数 * @return 对象 */ public <T> T findFirst(Class<T> entityClass, String sql, Object param) { return findFirst(entityClass, sql, new Object[] { param }); } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @param params * 参数数组 * @return 对象 */ @SuppressWarnings({ "unchecked" }) public <T> T findFirst(Class<T> entityClass, String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner .query(sql, new BeanHandler<T>(entityClass)); } else { object = queryRunner.query(sql, new BeanHandler<T>(entityClass), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return (T) object; } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @return 封装为Map的对象 */ public Map<String, Object> findFirst(String sql) { return findFirst(sql, null); } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @param param * 参数 * @return 封装为Map的对象 */ public Map<String, Object> findFirst(String sql, Object param) { return findFirst(sql, new Object[] { param }); } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @param params * 参数数组 * @return 封装为Map的对象 */ public Map<String, Object> findFirst(String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); Map<String, Object> map = null; try { if (params == null) { map = (Map<String, Object>) queryRunner.query(sql, new MapHandler()); } else { map = (Map<String, Object>) queryRunner.query(sql, new MapHandler(), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return map; } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @return 结果对象 */ public Object findBy(String sql, String columnName) { return findBy(sql, columnName, null); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @param param * 参数 * @return 结果对象 */ public Object findBy(String sql, String columnName, Object param) { return findBy(sql, columnName, new Object[] { param }); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @param params * 参数数组 * @return 结果对象 */ public Object findBy(String sql, String columnName, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner.query(sql, new ScalarHandler(columnName)); } else { object = queryRunner.query(sql, new ScalarHandler(columnName), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return object; } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @return 结果对象 */ public Object findBy(String sql, int columnIndex) { return findBy(sql, columnIndex, null); } public boolean exist(String sql, Object... params) { int x = this.findInteger( StringFormat.format("SELECT COUNT(*) FROM ({0})", sql), params); return x <= 0 ? false : true; } public int findInteger(String sql, Object... params) { Object o = findBy(sql, null, params); if (BigDecimal.class.equals(o.getClass())) return ((BigDecimal) o).intValue(); return (Integer) o; } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @param param * 参数 * @return 结果对象 */ public Object findBy(String sql, int columnIndex, Object param) { return findBy(sql, columnIndex, new Object[] { param }); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @param params * 参数数组 * @return 结果对象 */ public Object findBy(String sql, int columnIndex, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner.query(sql, new ScalarHandler(columnIndex)); } else { object = queryRunner.query(sql, new ScalarHandler(columnIndex), params); } } catch (SQLException e) { logger.error("Error occured while attempting to query data", e); } return object; } }
相关推荐
### JAVA生成订单号(日期+流水号)的知识点解析 #### 一、概述 在现代电商及金融系统中,订单号作为唯一标识符扮演着极其重要的角色。它不仅需要具备唯一性,还要易于管理和追踪。本文将详细介绍一个通过Java语言...
是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat ...
Spring框架是Java EE开发的核心组件之一,它是一个全面的应用框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能。Spring还支持数据访问、Web应用、事务管理等多个方面,极大地简化了企业级应用的复杂性。在本案例...
标签中的“配置生成页面”可能指的是自动生成数据库查询页面的能力。这可以通过解析数据库表结构,自动生成对应的表单字段和查询逻辑。Spring Data的动态查询功能可以帮助实现这一目标,例如,使用`@Query`注解编写...
Java代码生成工具是一种高效开发辅助软件,主要用于自动化生成基于Java技术栈的Web应用程序代码,尤其针对Struts2.1.8、Spring2.5和Hibernate3这三个经典框架的集成应用。这样的工具能够显著提高开发效率,减少手动...
在这个场景中,"spring roo 生成数据库表"指的是使用Spring Roo工具来自动化创建与数据库表对应的Java实体类和数据访问层。 首先,Spring Roo支持多种数据库,包括MySQL、Oracle、PostgreSQL等。在开始之前,你需要...
2. ORM(Object-Relational Mapping)框架:如Hibernate或MyBatis,它们可以将数据库中的表映射为Java对象,简化了数据库操作。在这个场景下,ORM框架可能用于自动根据表结构生成Java实体类和DAO层代码。 3. JPA...
在Spring框架中,setter注入是一种常见的依赖注入方式,它允许我们通过setter方法来设置对象的属性,从而实现组件之间的解耦。本篇文章将详细讲解如何使用setter注入来实现与MySQL数据库的连接。 首先,我们需要...
总结来说,这个Java代码自动生成器是一个强大的开发辅助工具,它可以帮助开发者快速生成基于页面的、涵盖多种关系映射的代码,同时支持所有关系型数据库和Spring Boot框架。这极大地提高了开发效率,降低了出错的...
5. 结果集处理:提供方便的方法将数据库查询结果转换为Java对象,例如POJO(Plain Old Java Object)。 6. 异常处理:封装了数据库操作可能出现的异常,提供统一的错误处理机制。 7. 示例代码:可能包含一些示例代码...
Spring-generator 是基于 javafx8 开发的图形界面 Spring 代码生成器,使用 Apache FreeMarker 作为代码文件的模板,用户可以一键将数据库中的表生成为任意风格的 .java 代码文件(比如经典的三层模型)。 Spring-...
本示例将详细介绍如何在Spring Boot项目中利用JDBC(Java Database Connectivity)连接MySQL数据库,展示一个简单的数据库操作DEMO,包括连接数据库、访问数据库中的"mrchen"数据库下的"student"表格。 首先,我们...
SpringBoot整合actable,根据实体自动反向生成数据库表,方法简洁明了,省去手动创建数据库表的麻烦。 运行环境 jdk8+mysql5.7+IntelliJ IDEA+maven 项目技术(必填) spring boot+mybatis 数据库文件(可选) ...
在"Java代码生成器-基于springboot-多种数据库-5.5.7z"这个压缩包中,我们可以推测这是一个针对SpringBoot框架,并且支持多种数据库的代码生成解决方案。版本号为5.5,这通常代表了软件的一个更新迭代,可能包含了新...
本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,我们需要理解数据同步的含义。数据同步是指在两个或多个数据库之间,当某个数据库中的数据发生改变时,这些变化能够被实时或者近实时地反映到...
本文将深入探讨如何利用Spring Boot来实现基于MySQL的动态数据库生成。 首先,我们需要理解Spring Boot的核心特性。Spring Boot通过“约定优于配置”的原则,为开发者提供了快速构建应用的框架。它内置了Tomcat...
6. **配置文件**:如果代码生成器支持Spring Boot,还会生成应用配置文件(如application.yml或application.properties),配置数据库连接信息等。 7. **模板引擎**:为了生成上述各种类型的类,代码生成器通常会...
在Java开发中,Spring框架是极为重要的一环,它提供了许多功能来简化应用程序的构建,尤其是在操作数据库方面。本文将深入探讨如何使用Spring框架进行数据库操作,并基于给出的`pom.xml`文件中的依赖来解析相关知识...
5. **查询方法**:在Repository接口中定义查询方法,Spring Data JPA会根据方法名自动生成对应的SQL查询。 6. **事务管理**:Spring Boot中的`@Transactional`注解可用于标记需要在事务内执行的方法。 7. **JPA转换...
在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...