- 浏览: 566570 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
a1641693970:
还不错,学习了
BeanUtils使用总结(二)LazyDynaBean -
zjfshowtime:
很好的办法,学习了。
ORA-28001: the password has expired -
ya654277yo:
哦,多谢分享
Apache整合Tomcat后get方式提交中文乱码问题解决 -
foolkeeper:
nice !!
jvm内存参数设定 -
tracy821:
谢谢了,找了好久才找到
关于Spring 声明式事务处理时,throws exception不回滚的问题
收藏列表
标题 | 标签 | 来源 | |
可恶意处理多级泛型和泛型数组。 | 泛型 | ||
以前用的获取泛型的一个方法,可恶意处理多级泛型和泛型数组。 /** * 取得范性信息 * * @param cls * @param i * @return */ private Class<?> getGenericClass(Class<?> cls, int i) { ParameterizedType parameterizedType = ((ParameterizedType) cls.getGenericInterfaces()[0]); Object genericClass = parameterizedType.getActualTypeArguments()[i]; if (genericClass instanceof ParameterizedType) { // 处理多级泛型 return (Class<?>) ((ParameterizedType) genericClass).getRawType(); } else if (genericClass instanceof GenericArrayType) { // 处理数组泛型 return (Class<?>) ((GenericArrayType) genericClass).getGenericComponentType(); } else { return (Class<?>) genericClass; } } |
|||
代码生成器 | |||
package org.myframework.codeutil; import org.myframework.util.StringUtil; public class Column { private String javaName; private String name; private String dataType ; private String unique; private String nullable ="false"; private String length="10"; private String precision="10"; private String scale = "0"; private String comments=""; private String columnKey=""; public String getComments() { return comments; } public void setComments(String comments) { this.comments = comments; } public String getColumnKey() { return columnKey; } public void setColumnKey(String columnKey) { this.columnKey = columnKey; } public String getName() { return name; } public void setName(String name) { this.name = name; this.javaName = StringUtil.toBeanPatternStr(name); } public String getUnique() { return unique; } public void setUnique(String unique) { this.unique = unique; } public String getNullable() { return nullable; } public void setNullable(String nullable) { this.nullable = nullable; } public String getLength() { return length; } public void setLength(String length) { this.length = length; } public String getPrecision() { return precision; } public void setPrecision(String precision) { this.precision = precision; } public String getScale() { return scale; } public void setScale(String scale) { this.scale = scale; } public String getJavaName() { return javaName; } public void setJavaName(String javaName) { this.javaName = javaName; } public String getDataType() { return dataType; } public void setDataType(String dataType) { this.dataType = dataType; } @Override public String toString() { return "Column [javaName=" + javaName + ", name=" + name + ", dataType=" + dataType + ", unique=" + unique + ", nullable=" + nullable + ", length=" + length + ", precision=" + precision + ", scale=" + scale + ", comments=" + comments + ", columnKey=" + columnKey + "]"; } } package org.myframework.codeutil; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.myframework.util.FileUtil; public class CodeTool { private String tmplDir = "\\org\\myframework\\tmpl\\"; private String encoding = "GBK"; private String tmplFile;// ���� private String absolutePath;// ���� private Map context = new HashMap(); boolean isDebug = false; public boolean getIsDebug() { return isDebug; } public void put(String key, Object value) { context.put(key, value); } public Object get(String key) { return context.get(key); } public void setIsDebug(boolean isDebug) { this.isDebug = isDebug; } public String getTmplFile() { return tmplFile; } public void setTmplFile(String tmplFile) { this.tmplFile = tmplFile; } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public String getAbsolutePath() { return absolutePath; } public void setAbsolutePath(String absolutePath) { this.absolutePath = absolutePath; } public Map getContext() { return context; } public void setContext(Map context) { this.context = context; } public void createFileByTmpl() throws Exception { Velocity.addProperty("file.resource.loader.path", getClassPath() + tmplDir); Template template = Velocity.getTemplate(tmplFile, encoding); VelocityContext tmplContext = new VelocityContext(context); FileUtil.createFile(absolutePath); PrintWriter writer = new PrintWriter( new FileOutputStream(absolutePath), true); template.merge(tmplContext, writer); writer.flush(); writer.close(); if (isDebug) { debug(); } } /** * ȡ��Class·�� * * @return */ private String getClassPath() { URL url = this.getClass().getResource("/"); File file = new File(url.getPath()); return file.getAbsolutePath(); } public void debug() throws Exception { Velocity.addProperty("file.resource.loader.path", getClassPath() + tmplDir); Template template = Velocity.getTemplate(tmplFile, encoding);// ��ȡ�����ļ� VelocityContext tmplContext = new VelocityContext(context); // ��ȡ���̲��� BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( System.out)); if (template != null) template.merge(tmplContext, writer); // ������ģ����ɵ��ļ� writer.flush(); writer.close(); } public CodeTool() { super(); } public CodeTool(String tmplFile, String absolutePath) { super(); this.tmplFile = tmplFile; this.absolutePath = absolutePath; } public static void main(String[] args) throws Exception { // CodeTool tool = new CodeTool(); // tool.setTmplFile("tmpl/DAOImpl.tmpl"); // tool.setAbsolutePath("D:/ABC/abc1.txt"); // tool.createFileByTmpl(); System.out.println("111"); } } package org.myframework.codeutil; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; import org.myframework.util.DateUtil; import org.myframework.util.FileUtil; import org.myframework.util.StringUtil; public class CodeGenerator { private final Log log = LogFactory.getLog(getClass()); CodeTool tool = new CodeTool(); private String pkgPrefix = "com.sunshine"; private String module = "sys"; private String subModule = "staff"; private String tableName = "STAFF_INFO"; private String codeDir="D://CODEGEN"; private String classVar; private String className; private String keyVar; private String keyType; private String jspDir; private String packageName; private void splitColumns( List<Column> lsColumns ) { List<Column> lsColumnTemp = new ArrayList(lsColumns.size()); List<Column> pkColumns = new ArrayList<Column>(2); for (Column column : lsColumns) { if ("TRUE".equalsIgnoreCase(column.getColumnKey())) { pkColumns.add(column); }else{ lsColumnTemp.add(column); } } tool.put("columnResult", lsColumnTemp); tool.put("pkResult", pkColumns); } public void initCodeTool(List<Column> lsColumns) throws Exception { classVar = StringUtil.toBeanPatternStr(tableName); className = StringUtil.firstCharUpperCase(classVar); pkgPrefix =pkgPrefix + (StringUtil.isEmpty(module) ? "" : ("." + module)) + (StringUtil.isEmpty(subModule) ? "" : ("." + subModule)); jspDir = (StringUtil.isEmpty(module) ? "" : ("/" + module)) + (StringUtil.isEmpty(subModule) ? "" : ("/" + subModule)); tool.put("tableName", tableName); tool.put("className", className); tool.put("classVar", classVar); tool.put("packagePrefix", pkgPrefix); tool.put("packageName", packageName); tool.put("jspDir", jspDir); //把主键和非主键分别放入tool splitColumns( lsColumns); org.apache.commons.lang.StringUtils stringUtil = new org.apache.commons.lang.StringUtils(); tool.put("stringUtil",stringUtil ); tool.put("needUpdate",true); tool.put("date", DateUtil.getCurrentDay()); tool.put("author", System.getProperty("user.name")); } /** * 模型层主键代码生成 * * @throws Exception */ private void createModelPkFile() throws Exception { List<Column> pkResult = (List<Column>) tool.get("pkResult"); int pkCnt = pkResult.size(); if (pkCnt > 1) { log.debug("创建复合主键类:"); keyType = className + "PK"; keyVar = classVar + "PK"; tool.put("keyType", keyType); tool.put("keyVar", keyVar); String classNameWithPkg = pkgPrefix + ".model.base.Base" + keyType; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("BaseModelPK.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); classNameWithPkg = pkgPrefix + ".model." + keyType; javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("modelPK.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } else if (pkCnt == 1) { Column column = pkResult.get(0); keyType =column.getDataType(); keyVar = column.getJavaName(); tool.put("keyType", keyType); tool.put("keyVar", keyVar); } else { throw new Exception("该表无主键!!!!!!!!"); } tool.put("idGetMethod", "get" + StringUtil.firstCharUpperCase(keyVar)); } /** * STEP 1 :模型层代码生成 * * @throws Exception */ public void createModelFile() throws Exception { createModelPkFile(); // 生成文件信息 String classNameWithPkg = pkgPrefix + ".model.base.Base" + className; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("BaseModel.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); classNameWithPkg = pkgPrefix + ".model." + className; javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("model.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } /** * 2持久层代码生成 * * @throws Exception */ @Test public void createDAOFile() throws Exception { String classNameWithPkg = pkgPrefix + ".dao." + className + "DAO"; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("DaoInterface.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); classNameWithPkg = pkgPrefix + ".dao.hibernate." + className + "DAOHibernate"; javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("DaoImpl.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } /** * STEP 3 :业务逻辑层代码生成 * * @throws Exception */ public void createBusinessFile() throws Exception { String classNameWithPkg = pkgPrefix + ".service." + className + "Manager"; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("ManagerInterface.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); classNameWithPkg = pkgPrefix + ".service.impl." + className + "ManagerImpl"; javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("ManagerImpl.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } /** * STEP 4 :控制层代码生成 * * @throws Exception */ public void createControlFile() throws Exception { // CREATE SPRING CONTROLLER String classNameWithPkg = pkgPrefix + ".web.action." + className + "Controller"; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("controllerFile.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } /** * STEP 5 :视图层代码生成 * * @throws Exception */ public void createViewFile() throws Exception { // 视图层 tool.setTmplFile("magJsp.tmpl"); tool.setAbsolutePath(codeDir + jspDir + "/init" + className + "Mag.jsp"); tool.createFileByTmpl(); tool.setTmplFile("editJsp.tmpl"); tool.setAbsolutePath(codeDir + jspDir + "/init" + className + "Edit.jsp"); tool.createFileByTmpl(); tool.setTmplFile("qryListJsp.tmpl"); tool.setAbsolutePath(codeDir + jspDir + "/qry" + className + "List.jsp"); tool.createFileByTmpl(); } /** * STEP 7 :单元测试代码生成 * * @throws Exception */ public void createJunitFile() throws Exception { String classNameWithPkg = pkgPrefix + ".test." + className + "Test"; String javaFile = codeDir + "/" + FileUtil.getJavaFileName(classNameWithPkg); tool.setTmplFile("jUnitTest.tmpl"); tool.setAbsolutePath(javaFile); tool.createFileByTmpl(); } public String getPkgPrefix() { return pkgPrefix; } public void setPkgPrefix(String pkgPrefix) { this.pkgPrefix = pkgPrefix; } public String getModule() { return module; } public void setModule(String module) { this.module = module; } public String getSubModule() { return subModule; } public void setSubModule(String subModule) { this.subModule = subModule; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } } package org.myframework.codeutil; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.myframework.util.StringUtil; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JDBCCodeGenerator { private final static Log log = LogFactory.getLog(JDBCCodeGenerator.class); public static List<Column> getLsColumns(String tableName) throws Exception { String[] springFiles = { "org/myframework/codeutil/context-codetool.xml" }; ApplicationContext context = new ClassPathXmlApplicationContext( springFiles); // MyJdbcTemplate myJdbcTemplate = context.getBean("myJdbcTemplate", // MyJdbcTemplate.class); // Connection conn = myJdbcTemplate.getDataSource().getConnection(); DataSource dataSource = context.getBean("dataSource", DataSource.class); Connection conn = dataSource.getConnection(); List<Column> lsColumns = new ArrayList<Column>(10); PreparedStatement stmt = conn.prepareStatement("select * from "+tableName+" where 1=0 "); ResultSet resultSet = stmt.executeQuery(); ResultSetMetaData rsmd = resultSet.getMetaData(); int n = rsmd.getColumnCount(); for (int i = 1; i <= n; i++) { String colName = rsmd.getColumnName(i); String fieldName = StringUtil.toBeanPatternStr(colName); Column column = new Column(); column.setName(colName) ; column.setJavaName(fieldName) ; column.setDataType(rsmd.getColumnClassName(i)); column.setPrecision(String.valueOf(rsmd.getPrecision(i))); column.setScale( String.valueOf(rsmd.getScale(i)) ); column.setLength( String.valueOf(rsmd.getColumnDisplaySize(i))); column.setNullable(String.valueOf("1".equals(rsmd.isNullable(i)))); DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getColumns(null, null, tableName, null); while (rs.next()) { if (colName.equals(rs.getString("COLUMN_NAME"))) column.setComments(rs.getString("REMARKS")); } ResultSet rs2 = dbmd.getPrimaryKeys(null, null, "DEMO"); while (rs2.next()) { if (colName.equals(rs2.getString("COLUMN_NAME"))) column.setColumnKey("TRUE"); } log.debug("------------------"+column+"---------------------" ); lsColumns.add(column); } return lsColumns; } /** * 代码生成工具调用 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { CodeGenerator code = new CodeGenerator(); code.setPkgPrefix("com.sunshine"); code.setTableName("DEMO"); code.setModule("abc"); code.setSubModule("sys"); code.initCodeTool(getLsColumns("DEMO")); code.createModelFile(); code.createDAOFile(); code.createBusinessFile(); code.createControlFile(); } } package org.myframework.codeutil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.myframework.jdbc.MyJdbcTemplate; import org.myframework.util.StringUtil; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MySqlCodeGenerator { private final static Log log = LogFactory.getLog(MySqlCodeGenerator.class); public static HashMap<String, String> columnType = new HashMap<String, String>( 5); static { columnType.put("longtext", "String"); columnType.put("varchar", "String"); columnType.put("int", "Integer"); columnType.put("bigint", "Long"); columnType.put("smallint", "Integer"); columnType.put("float", "Float"); columnType.put("double", "Double"); columnType.put("date", "java.sql.Date"); columnType.put("datetime", "java.sql.Timestamp"); } public static List<Column> getLsColumns(String tableName) { String[] springFiles = { "org/myframework/codeutil/context-codetool.xml" }; ApplicationContext context = new ClassPathXmlApplicationContext( springFiles); MyJdbcTemplate myJdbcTemplate = context.getBean("myJdbcTemplate", MyJdbcTemplate.class); HashMap paramMap = new HashMap<String, Object>(); paramMap.put("TABLE_NAME", tableName); StringBuffer sql = new StringBuffer(512); sql.append("SELECT TABLE_NAME, \n"); sql.append(" COLUMN_NAME, \n"); sql.append(" DATA_TYPE, \n"); sql.append(" ORDINAL_POSITION, \n"); sql.append(" COLUMN_DEFAULT, \n"); sql.append(" CHARACTER_MAXIMUM_LENGTH, \n"); sql.append(" CHARACTER_OCTET_LENGTH, \n"); sql.append(" NUMERIC_PRECISION, \n"); sql.append(" NUMERIC_SCALE, \n"); sql.append(" IS_NULLABLE, \n"); sql.append(" COLUMN_COMMENT, \n"); sql.append(" COLUMN_KEY \n"); sql.append(" FROM INFORMATION_SCHEMA.COLUMNS \n"); sql.append(" WHERE TABLE_SCHEMA = 'TEST' \n"); sql.append(" AND TABLE_NAME = 'DEMO' \n"); List<Column> lsColumns = new ArrayList<Column>(10); List<Map<String, Object>> columns = myJdbcTemplate.queryForList( sql.toString(), paramMap); for (Map<String, Object> column1 : columns) { Column column2 = new Column(); column2.setName(column1.get("COLUMN_NAME").toString());// 字段名 column2.setComments(column1.get("COLUMN_COMMENT").toString()); // 注释 column2.setColumnKey(String.valueOf("PRI".equalsIgnoreCase(column1 .get("COLUMN_KEY").toString())));// 是否主键 column2.setDataType(columnType.get(column1.get("DATA_TYPE") .toString()));// JAVA 对应数据类型 column2.setNullable(String.valueOf("YES".equalsIgnoreCase(column1 .get("IS_NULLABLE").toString()))); if(!StringUtil.isEmpty(column1.get("NUMERIC_PRECISION"))){ column2.setPrecision( column1.get("NUMERIC_PRECISION").toString() ); } if(!StringUtil.isEmpty(column1.get("NUMERIC_SCALE"))){ column2.setScale( column1.get("NUMERIC_SCALE").toString() );// } if(!StringUtil.isEmpty(column1.get("CHARACTER_MAXIMUM_LENGTH"))){ column2.setLength( column1.get("CHARACTER_MAXIMUM_LENGTH").toString() );// } log.debug(column2); lsColumns.add(column2); } return lsColumns; } /** * 代码生成工具调用 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { CodeGenerator code = new CodeGenerator(); code.setPkgPrefix("com.sunshine"); code.setTableName("DEMO"); code.setModule("abc"); code.setSubModule("sys"); code.initCodeTool(getLsColumns("DEMO")); code.createModelFile(); code.createDAOFile(); code.createBusinessFile(); code.createControlFile(); } } |
|||
DBUtils | |||
package org.lyq.dao; import java.io.IOException; import java.io.InputStream; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.UUID; /** * 经典的数据库访问接口 * @author 李永强 * @version 2.0 */ public class DBUtil { private static DBUtil dbUtil = null; private List<Connection> idle = new ArrayList<Connection>(0); private Map<Thread, Connection> busy = new HashMap<Thread, Connection>(0); private Map<String, Connection> cache = new HashMap<String, Connection>(0); private String dialect = "ORACLE"; private int maxsize = 3; /** * 私有构造不让直接创建一个DBUtil实例 读取配置文件加载数据库配置信息,创建一定数量的连接到连接池 */ private DBUtil() { InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db_cfg.properties"); Properties prop = new Properties(); try { prop.load(in); String driver = (String) prop.get("db.driver"); String url = (String) prop.get("db.url"); String username = (String) prop.get("db.username"); String password = (String) prop.get("db.password"); if (prop.get("db.maxsize") != null) { maxsize = Integer.parseInt(prop.get("db.maxsize").toString()); } if (prop.get("db.dialect") != null) { dialect = (String) prop.get("db.dialect"); } Class.forName(driver); for (int k = 0; k < maxsize; k++) { Connection conn = DriverManager.getConnection(url, username, password); idle.add(conn); } } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 获得数据库访问接口 * @return 数据库访问接口DBUtil单例 */ public static DBUtil getInstance() { if (null == dbUtil) { dbUtil = new DBUtil(); } return dbUtil; } /** * 获得数据库连接 * @return 数据库连接 */ private synchronized Connection getConn() { Connection conn = null; try { if (idle.size() == 0) { wait(); } conn = idle.get(0); busy.put(Thread.currentThread(), conn); idle.remove(0); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭所有对对象,归还链接到连接池 * @param rs 数据集对象 * @param ps 命令对象 */ private synchronized void closeAll(ResultSet rs, PreparedStatement ps) { if (null != rs) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (null != ps) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } Connection conn = busy.get(Thread.currentThread()); if (null != conn) { idle.add(conn); busy.remove(Thread.currentThread()); notify(); } } /** * 无事务更新(不带参数) * @param sql SQL语句 :"update table set price=200.00" * @return 受影响行数 * @throws SQLException */ public int update(String sql) throws SQLException { int result = 0; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); ps = conn.prepareStatement(sql); result = ps.executeUpdate(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 无事务更新(带参数) * @param sql SQL语句 :"delete from table where id=?" * @param params 参数对象数组 :new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int update(String sql, Object[] params) throws SQLException { int result = 0; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } result = ps.executeUpdate(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 在事务下更新(不带参数) * @param transId 事务ID * @param sql SQL语句 :"update table set price=200.00" * @return 受影响行数 * @throws SQLException */ public int update(String transId, String sql) throws SQLException { int result = 0; Connection conn = cache.get(transId); try { PreparedStatement ps = conn.prepareStatement(sql); result = ps.executeUpdate(); } catch (SQLException e) { throw e; } return result; } /** * 在事务下更新(带参数) * @param transId 事务ID * @param sql SQL语句 :"delete from table where id=?" * @param params 参数对象数组 :new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int update(String transId, String sql, Object[] params) throws SQLException { int result = 0; Connection conn = cache.get(transId); try { PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } result = ps.executeUpdate(); } catch (SQLException e) { throw e; } return result; } /** * 非事务下批量更新 * @param sql SQL语句 :"insert into table(p1,p2,p3) values(?,?,?)" * @param params 参数集合List<Object[]> 其中new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int[] batchUpdate(String sql, List<Object[]> params) throws SQLException { int[] result = new int[params.size()]; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); conn.setAutoCommit(false); ps = conn.prepareStatement(sql); for (Object[] objects : params) { for (int i = 0; i < objects.length; i++) { ps.setObject(i + 1, objects[i]); } ps.addBatch(); } result = ps.executeBatch(); conn.commit(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 在事务下批量更新 * @param transId 事务ID * @param sql SQL语句 :"insert into table(p1,p2,p3) values(?,?,?)" * @param params 参数集合List<Object[]> 其中new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int[] batchUpdate(String transId, String sql, List<Object[]> params) throws SQLException { int[] result = new int[params.size()]; Connection conn = cache.get(transId); PreparedStatement ps = conn.prepareStatement(sql); for (Object[] objects : params) { for (int i = 0; i < objects.length; i++) { ps.setObject(i + 1, objects[i]); } ps.addBatch(); } result = ps.executeBatch(); return result; } /** * 查询(不带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * @param sql SQL语句 :"select * from table" * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> query(String sql) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int colCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < colCount; i++) { String key = rsmd.getColumnLabel(i + 1).toLowerCase(); Object val = rs.getObject(i + 1) != null ? rs .getObject(i + 1) : ""; map.put(key, val); } list.add(map); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return list; } /** * 分页查询(不带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * @param sql SQL语句 :"select * from table" * @param currPage 第几页 * @param pageSize 每页记录数 * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> queryPager(String sql, int currPage, int pageSize) throws SQLException { String pageSql = getPageSql(sql, currPage, pageSize); return query(pageSql); } /** * 查询(带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * @param sql SQL语句 :"select * from table where id = ?" * @param params 参数对象数组 :new Object[]{参数1,参数2,...} * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> query(String sql, Object[] params) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int colCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < colCount; i++) { String key = rsmd.getColumnLabel(i + 1).toLowerCase(); Object val = rs.getObject(i + 1) != null ? rs .getObject(i + 1) : ""; map.put(key, val); } list.add(map); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return list; } /** * 分页查询(带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * @param sql SQL语句 :"select * from table where id = ?" * @param params 参数对象数组 :new Object[]{参数1,参数2,...} * @param currPage 第几页 * @param pageSize 每页记录数 * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> queryPager(String sql, Object[] params, int currPage, int pageSize) throws SQLException { String pageSql = getPageSql(sql, currPage, pageSize); return query(pageSql); } /** * 单值查询(不带参数) * @param sql SQL语句 :"select name from table" * @return 单值 * @throws SQLException */ public String scalar(String sql) throws SQLException { String res = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()) { res = String.valueOf(rs.getObject(1)); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return res; } /** * 单值查询(带参) * @param sql SQL语句 :"select name from table where id=?" * @param params 参数对象数组 :new Object[]{参数1,参数2,...} * @return 单值 * @throws SQLException */ public String scalar(String sql, Object[] params) throws SQLException { String res = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } rs = ps.executeQuery(); if (rs.next()) { res = String.valueOf(rs.getObject(1)); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return res; } /** * 执行存储过程 * @param procName 存储过程 * @param params 存储过程参数对象数组 :new Object[]{参数1,参数2,...} * @param outParamNum 输出参数个数 * @return 输出参数 * @throws SQLException */ public String[] execProc(String procName, Object[] params, int outParamNum) throws SQLException { String[] ret = new String[outParamNum]; Connection conn = null; CallableStatement cs = null; int inParamNum = (null != params) ? params.length : 0; String procSql = getProcSql(procName, inParamNum, outParamNum); try { conn = getConn(); cs = conn.prepareCall(procSql); for (int i = 0; i < inParamNum; i++) { cs.setObject(i + 1, params[i]); } for (int k = 1; k <= outParamNum; k++) { cs.registerOutParameter(inParamNum + k, Types.VARCHAR); } cs.executeQuery(); for (int k = 1; k <= outParamNum; k++) { ret[k - 1] = cs.getString(inParamNum + k); } } catch (SQLException e) { throw e; } finally { closeAll(null, cs); } return ret; } /** * 开始事务 * @return 事务ID */ public String beginTrans() { String transId = null; try { Connection conn = getConn(); conn.setAutoCommit(false); transId = UUID.randomUUID().toString(); cache.put(transId, conn); } catch (SQLException e) { e.printStackTrace(); } return transId; } /** * 事务提交 * @param transId 事务ID */ public void commitTrans(String transId) { Connection conn = null; try { conn = cache.get(transId); conn.commit(); conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } finally { closeAll(null, null); cache.remove(conn); } } /** * 事务回滚 * @param transId 事务ID */ public void rollbackTrans(String transId) { Connection conn = null; try { conn = cache.get(transId); conn.rollback(); conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } finally { closeAll(null, null); cache.remove(conn); } } /** * 得到分页SQL语句 * @param sql 基本SQL语句 * @param currPage 当前页 * @param pageSize 每页记录数 * @return 分页SQL语句 */ private String getPageSql(String sql, int currPage, int pageSize) { StringBuffer pageSql = new StringBuffer(0); if ("oracle".equalsIgnoreCase(dialect)) { pageSql.append("SELECT * FROM(SELECT FA.*, ROWNUM RN FROM ("); pageSql.append(sql).append(") FA WHERE ROWNUM <= "); pageSql.append(currPage * pageSize).append(")WHERE RN >= ").append( (currPage - 1) * pageSize + 1); } if ("mysql".equalsIgnoreCase(dialect)) { pageSql.append(sql).append(" limit ").append( (currPage - 1) * pageSize).append(",").append(pageSize); } return pageSql.toString(); } /** * 得到存储过程语句 * @param procName 存储过程 * @param inParamNum 输入参数个数 * @param outParamNum 输出参数个数 * @return * @throws SQLException */ private String getProcSql(String procName, int inParamNum, int outParamNum) throws SQLException { StringBuffer sb = new StringBuffer(); sb.append("{call ").append(procName); int paramCount = inParamNum + outParamNum; if (paramCount > 0) { sb.append("("); for (int i = 0; i < paramCount; i++) { sb.append("?"); if (i != paramCount - 1) { sb.append(","); } } sb.append(")"); } sb.append("}"); return sb.toString(); } /** * 测试DBUtil * @param args */ public static void main(String[] args) { try { DBUtil dao = DBUtil.getInstance(); String sql0 = "select addd from operate"; String sql = "select * from rolepower rp where rolecode = (select ur.rolecode from user u left join userrole ur on u.code = ur.usercode where u.code = 0001)"; List<Map<String, Object>> list = dao.query(sql); sql = "select * from operate"; String count = dao.scalar(sql0); // list = dao.queryPager(sql, 1, 10); System.out.println(count); System.out.println(list.size()); // System.out.println(list.get(0).get("name")); } catch (Exception e) { e.printStackTrace(); } } } |
|||
TreeSet 找出Top N | 看网友的一道腾讯面试题有感 | ||
package model.test; import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.TreeSet; //10000+个数字钟找出top100 public class Top { Set<Integer> top; int topNumber; public Top(int topNumber,Set<Integer> inputValues) { this.topNumber = topNumber; this.top = new TreeSet<Integer>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); for(int input:inputValues){ this.add(input); } } public Integer[] getTop(){ return this.top.toArray(new Integer[] {}); } private void add(int value) { if (this.topNumber == this.top.size() && value > (Integer) this.top.toArray()[0]) { this.top.remove(this.top.toArray()[0]); } if (this.top.size() < this.topNumber) { this.top.add(new Integer(value)); } } public static void main(String[] args) { //准备测试数据 Set<Integer> input=new HashSet<Integer>(); for(int i=0;i<50000;i++){ input.add(new Integer(new Random().nextInt(Integer.MAX_VALUE))); } //输出结果 System.out.println(Arrays.toString(new Top(1000, input).getTop())); } } |
|||
upload,file | J2EE上传文件至服务器 | ||
package com.syc.servlet; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.RequestContext; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; public class FileUploadServlet extends HttpServlet { /** * */ private static final long serialVersionUID = -1315419529138965268L; public FileUploadServlet() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("gbk"); RequestContext requestContext = new ServletRequestContext(request); if (FileUpload.isMultipartContent(requestContext)) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("e:/Log/")); ServletFileUpload upload = new ServletFileUpload(factory); // upload.setHeaderEncoding("gbk"); upload.setSizeMax(2000000); List items = new ArrayList(); try { items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } Iterator it = items.iterator(); while (it.hasNext()) { FileItem fileItem = (FileItem) it.next(); if (fileItem.isFormField()) { System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes( "iso8859-1"), "gbk")); } else { System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); if (fileItem.getName() != null && fileItem.getSize() != 0) { File fullFile = new File(fileItem.getName()); File newFile = new File("e:/Log/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("文件没有选择 或 文件内容为空"); } } } } } } |
|||
log4j日志自动发送Gtalk | log4j, gtalk | ||
package cn.sccl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.spi.ThrowableInformation; public class GtalkAppender extends AppenderSkeleton { /** * server */ private String server = "http://botalk.imincloud.com"; /** * api key */ private String apikey="0ccb1fdd5aa8431a82efa02d831c9198"; /** * recive user */ private String to; /** * message title */ private String title = "Log4j Notify"; /** * The last send message time. use it to control send frz */ private long lastSendTime = 0; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private ExecutorService threadPool; public GtalkAppender() { threadPool = Executors.newSingleThreadExecutor(); } protected void append(LoggingEvent event) { long now = System.currentTimeMillis(); if ((now - lastSendTime) > 1000) {//igron some message String content = sdf.format(new Date()) + " " + event.getLevel() + " [" + event.getLoggerName() + "]\n" + event.getRenderedMessage() + "\n"; if (event.getThrowableInformation() != null) { ThrowableInformation ti = event.getThrowableInformation(); String[] throwableStrRep = ti.getThrowableStrRep(); if (throwableStrRep != null) { int k = throwableStrRep.length; if (k > 3) { k = 3; } for (int i = 0; i < k; i++) { content += throwableStrRep[i] + "\n"; } } } final String message = content; threadPool.submit(new Runnable() { public void run() { sendMessage(message); } }); } } /** * 调用gtalk发送信息 * @param content */ private void sendMessage(String content) { if (content.length() > 400) { content = content.substring(0, 400); } try { content = URLEncoder.encode(title + "\n" + content, "utf-8"); String urlAddress = server + "/api/pushMsg?key=" + apikey + "&to=" + to + "&msg=" + content; String r = httpGet(urlAddress); if (r != null) { r = r.trim(); } if ("403:FAILE".equals(r)) { System.err.println(to + " need add robot log4j@imincloud.com"); } lastSendTime = System.currentTimeMillis(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } private int getIntValue(String string) { return Integer.parseInt(getValue(string)); } private String getValue(String string) { int i = string.indexOf("="); if (i > 0) { return string.substring(i + 1, string.length()).trim(); } else { return null; } } public String httpGet(String urlAddress) throws IOException { URL url = new URL(urlAddress); InputStream in = null; StringBuilder sb = new StringBuilder(); try { URLConnection c = url.openConnection(); in = c.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } } finally { try { if (in != null) in.close(); } catch (Exception e) { e.printStackTrace(); } } return sb.toString(); } public void close() { this.closed = true; threadPool.shutdown(); } public boolean requiresLayout() { return false; } // ///////////////// getter and setter //////////////////// public String getTo() { return to; } public void setTo(String mids) { this.to = mids; } public String getServer() { return server; } public void setServer(String server) { this.server = server; } public String getApikey() { return apikey; } public void setApikey(String apikey) { this.apikey = apikey; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } |