- 浏览: 51906 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
recole:
我也有写一个生成基本sql操作的工具,当然我的是.net版的 ...
让程序帮我们生成常用的增删改查语句 -
javac_xinyun:
统一1楼的观点,其实没有必要写成两个类的~~~个人观点而已!
利用poi进行excel 数据的导入,已修正代码繁琐问题 -
haosam:
我前几天也做了一个用poi进行数据导入的东西,不过那那个是针对 ...
利用poi进行excel 数据的导入,已修正代码繁琐问题 -
yuanliyin:
但是如何上传啊
JBOSS5.1下配置虚拟目录 -
yuanliyin:
很好使!!
JBOSS5.1下配置虚拟目录
收藏列表
标题 | 标签 | 来源 | |
logback参考配置 | logback | logback | |
<?xml version="1.0" encoding="UTF-8"?> <configuration> <substitutionProperty name="log.base" value="d:\\logback\\logback" /> <jmxConfigurator /> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval"> <expression>message.contains("dao")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> </layout> </appender> <appender name="logfile-dao" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval_dao"> <expression>message.contains("dao")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <Encoding>UTF-8</Encoding> <File>${log.base}_dao.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}.%d{yyyy-MM-dd}_dao.log.zip </FileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> </layout> </appender> <appender name="logfile-service" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval_service"> <expression>message.contains("service.impl")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <Encoding>UTF-8</Encoding> <File>${log.base}_service.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}.%d{yyyy-MM-dd}_service.log.zip </FileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> </layout> </appender> <appender name="jms_dao" class="ch.qos.logback.classic.net.JMSQueueAppender"> <InitialContextFactoryName> org.apache.activemq.jndi.ActiveMQInitialContextFactory </InitialContextFactoryName> <ProviderURL>tcp://192.168.1.120:61616</ProviderURL> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval_service"> <expression>message.contains("dao")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <QueueConnectionFactoryBindingName>ConnectionFactory </QueueConnectionFactoryBindingName> <QueueBindingName>cms_dao_log</QueueBindingName> </appender> <appender name="jms_service" class="ch.qos.logback.classic.net.JMSQueueAppender"> <InitialContextFactoryName> org.apache.activemq.jndi.ActiveMQInitialContextFactory </InitialContextFactoryName> <ProviderURL>tcp://192.168.1.120:61616</ProviderURL> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval_service"> <expression>message.contains("service.impl")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <QueueConnectionFactoryBindingName>ConnectionFactory </QueueConnectionFactoryBindingName> <QueueBindingName>cms_service_log</QueueBindingName> </appender> <logger name="com.cms5.cmsservice.jms"> <level value="DEBUG" /> </logger> <logger name="java.sql.PreparedStatement"> <level value="DEBUG" /> </logger> <logger name="java.sql.Connection"> <level value="DEBUG" /> </logger> <logger name="java.sql.Statement"> <level value="DEBUG" /> </logger> <logger name="com.ibatis"> <level value="DEBUG" /> </logger> <logger name="com.ibatis.common.jdbc.SimpleDataSource"> <level value="DEBUG" /> </logger> <logger name="com.ibatis.common.jdbc.ScriptRunner"> <level value="DEBUG" /> </logger> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"> <level value="DEBUG" /> </logger> <logger name="com.danga.MemCached"> <level value="INFO" /> </logger> <logger name="org.springframework.test"> <level value="DEBUG" /> </logger> <logger name="org.apache.struts2"> <level value="DEBUG" /> </logger> <root> <level value="INFO" /> <!--<appender-ref ref="stdout" /> --> <appender-ref ref="logfile-dao" /> <appender-ref ref="logfile-service" /> <appender-ref ref="jms_dao" /> <appender-ref ref="jms_service" /> </root> </configuration> |
|||
"Authorization" | |||
"Authorization", "name:password" |
|||
开发平台 | |||
按我的经验,开发平台大致包括以下内容: 1.用户级组织结构 2.权限管理 3.业务数据的新增、更改、查询、展现 4.流程引擎(业务数据流转) 5.报表引擎(业务数据输出) 6.任务调度 7.UI组件库 8.平台扩展体系(如插件体系,事件体系,拦截体系等) 分别打造并整合在一起就可以了,我的平台是采用 MDA架构+插件体系,MDA架构 解决通用性问题,插件解决个性化的问题。任何一个应用系统都基本上是由70%通用性需求+30%个性化需求组成了,开发平台是否能很好的解决应用系统个性化的需求,是开发平台成功的关键,也即开发平台的可编程性是需要重点考量的指标。 |
|||
数字转大写 | |||
/** 大写数字 */ private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; /** 整数部分的单位 */ private static final String[] IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" }; /** 小数部分的单位 */ private static final String[] DUNIT = { "角", "分", "厘" }; /** * 得到大写金额。 */ public static String toChinese(String str) { str = str.replaceAll(",", "");// 去掉"," String integerStr;// 整数部分数字 String decimalStr;// 小数部分数字 // 初始化:分离整数部分和小数部分 if (str.indexOf(".") > 0) { integerStr = str.substring(0, str.indexOf(".")); decimalStr = str.substring(str.indexOf(".") + 1); } else if (str.indexOf(".") == 0) { integerStr = ""; decimalStr = str.substring(1); } else { integerStr = str; decimalStr = ""; } // integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去) if (!integerStr.equals("")) { integerStr = Long.toString(Long.parseLong(integerStr)); if (integerStr.equals("0")) { integerStr = ""; } } // overflow超出处理能力,直接返回 if (integerStr.length() > IUNIT.length) { System.out.println(str + ":超出处理能力"); return str; } int[] integers = toArray(integerStr);// 整数部分数字 boolean isMust5 = isMust5(integerStr);// 设置万单位 int[] decimals = toArray(decimalStr);// 小数部分数字 return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals); } /** * 整数部分和小数部分转换为数组,从高位至低位 */ private static int[] toArray(String number) { int[] array = new int[number.length()]; for (int i = 0; i < number.length(); i++) { array[i] = Integer.parseInt(number.substring(i, i + 1)); } return array; } /** * 得到中文金额的整数部分。 */ private static String getChineseInteger(int[] integers, boolean isMust5) { StringBuffer chineseInteger = new StringBuffer(""); int length = integers.length; for (int i = 0; i < length; i++) { // 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元) // 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元) String key = ""; if (integers[i] == 0) { if ((length - i) == 13)// 万(亿)(必填) key = IUNIT[4]; else if ((length - i) == 9)// 亿(必填) key = IUNIT[8]; else if ((length - i) == 5 && isMust5)// 万(不必填) key = IUNIT[4]; else if ((length - i) == 1)// 元(必填) key = IUNIT[0]; // 0遇非0时补零,不包含最后一位 if ((length - i) > 1 && integers[i + 1] != 0) key += NUMBERS[0]; } chineseInteger.append(integers[i] == 0 ? key : (NUMBERS[integers[i]] + IUNIT[length - i - 1])); } return chineseInteger.toString(); } /** * 得到中文金额的小数部分。 */ private static String getChineseDecimal(int[] decimals) { StringBuffer chineseDecimal = new StringBuffer(""); for (int i = 0; i < decimals.length; i++) { // 舍去3位小数之后的 if (i == 3) break; chineseDecimal.append(decimals[i] == 0 ? "" : (NUMBERS[decimals[i]] + DUNIT[i])); } return chineseDecimal.toString(); } /** * 判断第5位数字的单位"万"是否应加。 */ private static boolean isMust5(String integerStr) { int length = integerStr.length(); if (length > 4) { String subInteger = ""; if (length > 8) { // 取得从低位数,第5到第8位的字串 subInteger = integerStr.substring(length - 8, length - 4); } else { subInteger = integerStr.substring(0, length - 4); } return Integer.parseInt(subInteger) > 0; } else { return false; } } public static void main(String[] args) { String number = "10001001012.25"; // System.out.println(number + " " + MoneyUtil.toChinese(number)); // number = "1234567890123456.123"; // System.out.println(number + " " + MoneyUtil.toChinese(number)); // number = "0.0798"; // System.out.println(number + " " + MoneyUtil.toChinese(number)); // number = "10,001,000.09"; // System.out.println(number + " " + MoneyUtil.toChinese(number)); // number = "01.107700"; System.out.println(number + " " + MoneyUtil.toChinese(number)); } |
|||
poi 导excel | excel | Apache POI组件操作Excel,制作报表(一) | |
public static List<Student> readFromXLSX2007(String filePath) { File excelFile = null;// Excel文件对象 InputStream is = null;// 输入流对象 String cellStr = null;// 单元格,最终按字符串处理 List<Student> studentList = new ArrayList<Student>();// 返回封装数据的List Student student = null;// 每一个学生信息对象 try { excelFile = new File(filePath); is = new FileInputStream(excelFile);// 获取文件输入流 XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 创建Excel2003文件对象 XSSFSheet sheet = workbook2007.getSheetAt(0);// 取出第一个工作表,索引是0 // 开始循环遍历行,表头不处理,从1开始 for (int i = 1; i <= sheet.getLastRowNum(); i++) { student = new Student();// 实例化Student对象 XSSFRow row = sheet.getRow(i);// 获取行对象 if (row == null) {// 如果为空,不处理 continue; } // 循环遍历单元格 for (int j = 0; j < row.getLastCellNum(); j++) { XSSFCell cell = row.getCell(j);// 获取单元格对象 if (cell == null) {// 单元格为空设置cellStr为空串 cellStr = ""; } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理 cellStr = String.valueOf(cell.getBooleanCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理 cellStr = cell.getNumericCellValue() + ""; } else {// 其余按照字符串处理 cellStr = cell.getStringCellValue(); } // 下面按照数据出现位置封装到bean中 if (j == 0) { student.setName(cellStr); } else if (j == 1) { student.setGender(cellStr); } else if (j == 2) { student.setAge(new Double(cellStr).intValue()); } else if (j == 3) { student.setSclass(cellStr); } else { student.setScore(new Double(cellStr).intValue()); } } studentList.add(student);// 数据装入List } } catch (IOException e) { e.printStackTrace(); } finally {// 关闭文件流 if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return studentList; } |
|||
SQL自动删除 | 让程序帮我们生成常用的增删改查语句 | ||
public class SqlAutoCreator { //用线程安全map可以不进行同步 private ConcurrentMap<String, DatabaseBean> container; private static final String CONTAINER_NAME = "DATABASE_INFO"; private static Logger logger = LoggerFactory .getLogger(SqlAutoCreator.class); private Connection connection; private boolean hasColumnLable = false; private boolean hasNamedParam = false; public SqlAutoCreator(Connection con) { try { this.connection = con; this.initContainer(con);//仅初始化一次,减少相关资源消耗 } finally { closeDB(con); } } public SqlAutoCreator() { try { this.initContainer(connection); } finally { closeDB(connection); } } public String createQuerySql(String table) { TablesBean tablebean = this.getTablesBean(table); if (tablebean == null) return null; StringBuffer sb = new StringBuffer(); List<String> columns = tablebean.getColumns(); sb.append("SELECT "); for (String column : columns) { sb.append(column).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(" FROM ").append(tablebean.getTableName()); sb.append(" WHERE ").append(tablebean.getPrimaryKey()).append(" = "); if (hasNamedParam) {//可以设置是否开启命名参数,默认是false sb.append(":").append(tablebean.getPrimaryKey()); } else { sb.append("?"); } return sb.toString(); } public String createInsertSQL(String table) { TablesBean tablebean = this.getTablesBean(table); if (tablebean == null) return null; List<String> columns = tablebean.getColumns(); StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO ").append(tablebean.getTableName() + "("); for (String column : columns) { sb.append(column); sb.append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(")"); sb.append(" VALUES("); for (String column : columns) { if (hasNamedParam) { sb.append(":"); sb.append(column); } else { sb.append("?"); } sb.append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(")"); return sb.toString(); } public String createUpdateSQL(String table) { TablesBean tablebean = this.getTablesBean(table); if (tablebean == null) return null; List<String> columns = tablebean.getColumns(); StringBuilder sb = new StringBuilder(); sb.append("UPDATE "); sb.append(tablebean.getTableName()); sb.append(" SET "); for (String column : columns) { sb.append(column); if (hasNamedParam) { sb.append("=:"); sb.append(column); } else { sb.append("=?"); } sb.append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(" WHERE "); sb.append(tablebean.getPrimaryKey()); sb.append("="); if (hasNamedParam) { sb.append(":"); sb.append(tablebean.getPrimaryKey()); } else { sb.append("?"); } return sb.toString(); } public String createDeleteSQL(String table) { TablesBean tablebean = this.getTablesBean(table); if (tablebean == null) return null; // List<String> columns = tablebean.getColumns(); StringBuilder sb = new StringBuilder(); sb.append("DELETE FROM ").append(tablebean.getTableName()).append( " WHERE ").append(tablebean.getPrimaryKey()).append("="); if (hasNamedParam) { sb.append(":"); sb.append(tablebean.getPrimaryKey()); } else { sb.append("?"); } return sb.toString(); } public List<String> createAllQuerySQL() { List<String> allQuerySQL = new ArrayList<String>(); List<String> tables = this.getAllTables(); for (String table : tables) { allQuerySQL.add(this.createQuerySql(table)); } return allQuerySQL; } public List<String> createAllInsertSQL() { List<String> list = new ArrayList<String>(); List<String> tables = this.getAllTables(); for (String table : tables) { list.add(this.createInsertSQL(table)); } return list; } public List<String> createAllUpdateSQL() { List<String> list = new ArrayList<String>(); List<String> tables = this.getAllTables(); for (String table : tables) { list.add(this.createUpdateSQL(table)); } return list; } public List<String> createAllDeleteSQL() { List<String> list = new ArrayList<String>(); List<String> tables = this.getAllTables(); for (String table : tables) { list.add(this.createDeleteSQL(table)); } return list; } protected void initContainer(Connection con) { container = new ConcurrentHashMap<String, DatabaseBean>(); DatabaseInfoService databaseService = new DatabaseInfoService(con); DatabaseBean databaseBean = databaseService.getDatabaseBean(); container.put(CONTAINER_NAME, databaseBean); } public List<String> getAllTables() { return this.getDatabaseInfo().getAllTables(); } private TablesBean getTablesBean(String table) { DatabaseBean databaseinfo = getDatabaseInfo(); Map<String, TablesBean> tables = databaseinfo.getTables(); TablesBean tablebean = tables.get(table); return tablebean; } public DatabaseBean getDatabaseInfo() { return container.get(CONTAINER_NAME); } public void setConnection(Connection connection) { this.connection = connection; } public boolean isHasColumnLable() { return hasColumnLable; } public void setHasColumnLable(boolean hasColumnLable) { this.hasColumnLable = hasColumnLable; } public boolean isHasNamedParam() { return hasNamedParam; } public void setHasNamedParam(boolean hasNamedParam) { this.hasNamedParam = hasNamedParam; } protected void closeDB(Connection con) { try { con.close(); } catch (SQLException e) { logger.warn("关闭数据库连接异常:" + e.getMessage()); } } } |
|||
freemarker字符串模板解释 | FreeMarker解析字符串模板 | ||
/** * Created: 2007-2-1 * Modified: 2007-2-1 * * Author: Keven Chen */ package freemarker.loader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import freemarker.cache.TemplateLoader; /** * @author Keven Chen * @version $Revision 1.0 $ * */ public class StringTemplateLoader implements TemplateLoader { private static final String DEFAULT_TEMPLATE_KEY = "_default_template_key"; private Map templates = new HashMap(); public StringTemplateLoader(String defaultTemplate){ if(defaultTemplate != null && !defaultTemplate.equals("")){ templates.put(DEFAULT_TEMPLATE_KEY, defaultTemplate); } } public void AddTemplate(String name,String template){ if(name == null || template == null || name.equals("") || template.equals("")){ return ; } if(!templates.containsKey(name)){ templates.put(name, template); } } public void closeTemplateSource(Object templateSource) throws IOException { } public Object findTemplateSource(String name) throws IOException { if(name == null || name.equals("")){ name = DEFAULT_TEMPLATE_KEY; } return templates.get(name); } public long getLastModified(Object templateSource) { return 0; } public Reader getReader(Object templateSource, String encoding) throws IOException { return new StringReader((String) templateSource); } } /** * Created: 2007-2-1 * Modified: 2007-2-1 * * Author: Keven Chen */ package freemarker; import java.io.File; import java.io.OutputStreamWriter; import java.io.StringWriter; import java.util.Date; import java.util.HashMap; import java.util.Map; import freemarker.loader.ClassPathTemplateLoader; import freemarker.loader.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; /** * @author Keven Chen * @version $Revision 1.0 $ * */ public class Test { public static void main(String[] args) throws Exception { Configuration cfg = new Configuration(); cfg.setTemplateLoader(new StringTemplateLoader("欢迎:${user}")); cfg.setDefaultEncoding("UTF-8"); Template template = cfg.getTemplate(""); Map root = new HashMap(); root.put("user", "Keven Chen"); StringWriter writer = new StringWriter(); template.process(root, writer); System.out.println(writer.toString()); } } |