java中常用的工具类
2015-05-12 20:20
253 查看
1. 常用零散工具类
1.1【DateUtil.java】日期处理的工具类
/** * 时间日期处理工具 * String -> Date * Date -> String * 以及生成含有日期的字符串 可以当作保存id用等等。 * 等格式化处理 * **/ public class DateUtil { private static final String FORMAT_0 = "yyyy-MM-dd HH:mm:ss"; private static final String FORMAT_1 = "yyyy-MM-dd"; private static final String FORMAT_2 = "HH:mm:ss"; private static final String FORMAT_3 = "yyyyMMddHHmmss"; //获得含有时间的id 字符串 public static String getIdByTime(){ Date now = new Date(); SimpleDateFormat simple = new SimpleDateFormat(FORMAT_3); return simple.format(now); } //如果参数长度不为为0,则取第一个参数进行格式化,否则取当前日期时间,精确到秒 如:2010-4-15 9:36:38 public static String toFull(Date... date) { SimpleDateFormat simple = new SimpleDateFormat(FORMAT_0); if (date!=null && date.length > 0) { return simple.format(date[0]); } return simple.format(new Date()); } /** * 如果参数长度不为为0,则取第一个参数进行格式化,<br> * 否则取当前日期 如:2010-4-15 * * @param Date * ... 可变参数 * @return java.lang.String * **/ public static String toDate(Date... date) { SimpleDateFormat simple = new SimpleDateFormat(FORMAT_1); if (date.length > 0) { return simple.format(date[0]); } return simple.format(new Date()); } /** * 如果参数长度不为为0,则取第一个参数进行格式化,<br> * 否则取当前日期时间,精确到秒<br> * 如:9:36:38 * * @param Date * ... 可变参数 * @return java.lang.String * **/ public static String toTime(Date... date) { SimpleDateFormat simple = new SimpleDateFormat(FORMAT_2); if (date.length > 0) { return simple.format(date[0]); } return simple.format(new Date()); } /** * 根据字符串格式去转换相应格式的日期和时间 * * @param java * .lang.String 必要参数 * @return java.util.Date * @exception java.text.ParseException * 如果参数格式不正确会抛出此异常 * **/ public static Date reverse2Date(String date) { SimpleDateFormat simple = null; switch (date.trim().length()) { case 19:// 日期+时间 simple = new SimpleDateFormat(FORMAT_0); break; case 10:// 仅日期 simple = new SimpleDateFormat(FORMAT_1); break; case 8:// 仅时间 simple = new SimpleDateFormat(FORMAT_2); break; default: break; } try { return simple.parse(date.trim()); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 将带有时、分、秒格式的日期转化为00:00:00<br> * 方便日期推算,格式化后的是yyyy-MM-dd 00:00:00 * * @param java * .util.Date... date的长度可以为0,即不用给参数 * @return java.util.Date * **/ public static Date startOfADay(Date... date) { SimpleDateFormat simple = new SimpleDateFormat(FORMAT_1); Date date_ = date.length == 0 ? new Date() : date[0];// 如果date为null则取当前时间 String d = simple.format(date_); try { return simple.parse(d); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 推算一个月内向前或向后偏移多少天,当然推算年也可以使用 * * @param date * 要被偏移的日期,<br> * amout 偏移量<br> * b 是否先将date格式化为yyyy-MM-dd 00:00:00 即: 是否严格按整天计算 * @return java.util.Date * **/ public static Date addDayOfMonth(Date date, Integer amount, Boolean b) { date = date == null ? new Date() : date;// 如果date为null则取当前日期 if (b) { date = startOfADay(date); } Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, amount); return cal.getTime(); } /** * 推算一个小时内向前或向后偏移多少分钟,除了秒、毫秒不可以以外,其他都可以 * * @param date * 要被偏移的日期,<br> * amout 偏移量<br> * b 是否先将date格式化为yyyy-MM-dd HH:mm:00 即: 是否严格按整分钟计算 * @return java.util.Date * **/ public static Date addMinuteOfHour(Date date, Integer amount, Boolean b) { date = date == null ? new Date() : date;// 如果date为null则取当前日期 if (b) { SimpleDateFormat simple = new SimpleDateFormat( "yyyy-MM-dd HH:mm:00"); try { date = simple.parse(simple.format(date)); } catch (ParseException e) { e.printStackTrace(); } } Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calend 133d6 ar.MINUTE, amount); return cal.getTime(); } public static void main(String[] args) { System.out.println(DateUtil.addMinuteOfHour(new Date(), 60, false)); } }
1.2【Base64Util.java】
String s = "这是一个待加密的字符串"; BASE64Encoder base64e = new BASE64Encoder();//base64加密的类对象 String s2 = base64e.encode(s.getBytes());//s2就是用base64加密后的字符串 BASE64Decoder base64d = new BASE64Decoder();//base64解密的类对象 byte b[] = base64d.decodeBuffer(s2);//★字符串经base64解密成byte数组 String s3 = new String(b);
1.3【MD5Util.java】MD5加密工具类
public class MD5Util { public static String encode(String message){ try { MessageDigest md=MessageDigest.getInstance("md5"); byte b[] = md.digest(message.getBytes()); return new BASE64Encoder().encode(b);//sun.misc.BASE64Encoder; } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }
1.4【IDGeneratorUtil.java】ID生成器/ID生成机制
///说明:一般在service层,在调用dao层的方法进行插入数据之前对id赋值,如:book.setId(IDGeneratorUtil.genPrimaryKey()); public class IDGeneratorUtil { public static String genPrimaryKey(){ return UUID.randomUUID().toString(); } //生成与当前时间有关系的ID号(用于订单号的生成),20150302+毫秒值 //System.nanoTime():得到当前时间的纳秒值[JDK5.0以后] public static String genOrdersNum(){ Date now = new Date(); DateFormat df = new SimpleDateFormat("yyyyMMdd"); String str = df.format(now)+System.currentTimeMillis();//得到当前时间的毫秒值 return str; } }
1.5【Dom4jUtils.java】
public class Dom4jUtils { private static String dbFilePath; static{//类加载器->得到资源->得到路径 ClassLoader c1=Dom4jUtils.class.getClassLoader(); URL url=c1.getResource("users.xml");//模拟 dbFilePath=url.getPath();//得到真实地址 } //得到document public static Document getDocument() throws DocumentException{ SAXReader reader = new SAXReader(); return reader.read(dbFilePath);//注意该路径不是Myeclipse下面的文件路径,而是部署到tomcat后的路径 } public static void writer2xml(Document document) throws Exception{ XMLWriter writer = new XMLWriter(new FileOutputStream(dbFilePath),OutputFormat.createPrettyPrint()); writer.write(document); writer.close(); } }
1.6【FormBeanUtil.java】表单页面数据封装类(用泛型),配合自定义的javabean使用,用于数据回显
public class FormBeanUtil { public static <T>T fillFormBean(Class<T> clazz,HttpServletRequest request){ try { T bean = clazz.newInstance();//创建需要类型的bean //★BeanUtils.populate()用来将一些 key-value 的值(例如 hashmap)映射到bean中的属性 BeanUtils.populate(bean, request.getParameterMap()); return bean;//返回映射了数据的bean } catch(Exception e) { throw new RuntimeException(e); } } }
数据库相关
2.1【JdbcUtil.java】数据库连接、释放的工具类
/**【db.properties】内容 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/custmanage user=root password=**** */ public class JdbcUtil { private static String driverClassName; private static String url; private static String user; private static String password; static{ try { //加载配置文件 InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); //读取配置文件的值 driverClassName = prop.getProperty("driverClassName"); url = prop.getProperty("url"); user = prop.getProperty("user"); password = prop.getProperty("password"); Class.forName(driverClassName); } catch (Exception e) { e.printStackTrace(); } } //开启数据库连接 public static Connection getConnection() throws Exception{ return DriverManager.getConnection(url,user,password); } //释放数据库连接 public static void release(ResultSet rs,PreparedStatement ps,Connection conn){ if(rs!=null){ try{ rs.close(); }catch(SQLException e){ e.printStackTrace(); } rs=null; } if(ps!=null){ try{ ps.close(); }catch(SQLException e){ e.printStackTrace(); } ps=null; } if(conn!=null){ try{ conn.close(); }catch(SQLException e){ e.printStackTrace(); } conn=null; } } }
2.2 【DBCPUtil.java】数据连接池的工具类
自定义数据库连接池public class DBCPUtil{ private static DataSource ds; static{ try { InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties"); Properties props = new Properties(); props.load(in); ds = BasicDataSourceFactory.createDataSource(props);//★一句话代替JDBCUtil中的四句话 } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return ds; } }
2.3【EntityFactory.java】创建对象工厂模型
public class EntityFactory { public static <T> T getInstance(Class<T> t) { try { return (T)t.newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } }
2.4【DaoFactory.java】模拟Spring容器的单例模式
//假设dao.properties内有内容:userDao =cn.hw.dao.impl.UserDaoMySQLImpl //创建Dao具体事例的工厂 public class DaoFactory {//恶汉式单例类 private static DaoFactory instance = new DaoFactory(); private DaoFactory(){//构造方法私有,不允许别人生成该工厂 } public static DaoFactory getInstance(){//自己new一个实例 return instance; } private static String userDaoImplClassName; static { try { InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties"); Properties props= new Properties(); props.load(in); userDaoImplClassName = props.getProperty("userDao"); } catch (IOException e) { e.printStackTrace(); } } public UserDao getUserDao(){ try { return (UserDao)Class.forName(userDaoImplClassName).newInstance(); } catch (Exception e) { throw new RuntimeException(); } } }
2.5【EntityDao.java】★★利用泛型重构dao层
/**注意:DaoImpl层要继承该类,如:public class DepartmentDaoImpl extends BaseDaoImpl<Department> implements DepartmentDao<Department>{} */ //★★理解:在public后面写<T> 是用来声明T为泛型标识符 public class EntityDao extends HibernateUtils{//在创建EntityDao时就应该传值 /** * 查找所有的数据 * @param classt * @return */ //没写工厂之前的写法 public <T> List<T> findAll(Class<T> t){ Session session = sessionFactory.openSession(); List<T> list = session.createQuery("from "+t.getName()).list();//★★注意from后面的空格 session.close(); return list; } public <T> T findById(Class<T> t,Serializable id){ Session session = sessionFactory.openSession(); T tobject = (T) session.get(t, id); session.close(); return tobject; } public <T> void saveEntry(T t){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.save(t); transaction.commit(); session.close(); } public <T> void updateEntry(T t){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.update(t); transaction.commit(); session.close(); } public <T> void deleteEntry(Class<T> t,Serializable id){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); T tObject = this.findById(t, id); session.delete(tObject); transaction.commit(); session.close(); } public <T> T findUser(Class<T> t,String username,String password){ Session session = sessionFactory.openSession(); Query query = session.createQuery("from User where username=:username and password=:password"); query.setString("username", username); query.setString("password",password); T tt = (T)query.uniqueResult(); session.close(); return tt; } } ///泛型Dao层进行测试 public class EntityDaoTest extends HibernateUtils{ @Test public void testfindAll(){ EntityDao entityDao = new EntityDao(); List<User> userList = entityDao.findAll(User.class); System.out.println(userList.size()); } @Test public void testfindById(){ EntityDao entityDao = EntityFactory.getInstance(EntityDao.class); User user = entityDao.findById(User.class,1L); System.out.println(user.getUsername()); } @Test public void testsaveEntry(){ EntityDao entityDao = EntityFactory.getInstance(EntityDao.class); User user = new User(); user.setEmail("123@163.com"); user.setPassword("1234"); user.setPhone("186***"); user.setSex("1"); user.setUsername("hyc"); entityDao.saveEntry(user); } }
3. 框架使用
【BaseAction.java】Struts2框架用泛型基类Action:属性驱动、指定常量
///封装一些公用的内容,注意继承ActionSupport。 /// ★★模型驱动: Action类实现ModelDriven<javaBean>,并实现其内未实现的方法getModel() public class BaseAction<T> extends ActionSupport implements ModelDriven<T>{ private String message;//处理ajax产生的异常信息 public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private Class classt; public BaseAction(){ ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); this.classt = (Class) type.getActualTypeArguments()[0]; try { this.t = (T) this.classt.newInstance(); } catch (Exception e) { e.printStackTrace(); } } private T t; public T getModel(){ return this.t; } //跳转到列表页面 public static final String LISTACTION = "listAction"; //跳转到添加页面 public static final String ADDUI = "addUI"; //添加到修改页面 public static final String UPDATEUI = "updateUI"; //action跳转到action public static final String ACTION2ACTION = "action2action"; public String listAction = LISTACTION; public String addUI = ADDUI; public String updateUI = UPDATEUI; public String action2action = ACTION2ACTION; }
3.1【HibernateUtil.java】利用Hibernate建立sessionFactory的
public class HibernateUtil{ public static SessionFactory sessionFactory; static{ Configuration config = new Configuration();//源码指定默认配置文件:hibernate.cfg.xml config.configure(); sessionFactory = config.buildSessionFactory(); } }
3.2 【BaseDaoImpl.java】注入HibernateTemplate,实现CURD+RId
//★★★由于这里的BaseDao中的参数T还不能具体确定,所以在BaseDaoImpl上面只能继续T public class BaseDaoImpl<T> implements BaseDao<T> {//★这里的BaseDaoImpl<T>看成是被参数化的类型 /**★★★ * 这里的BaseDaoImpl<T>无法给它new对象,但是这个类中却可以用this,这个this代表的是BaseDaoImpl<T>的子类 * 所以用ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperClass(); * 可以得到将来有了子类的BaseDaoImpl<T>的类对象。但是这段代码怎么加在这个类中了?如果在本类中将其加在一个单独的方法中 * (如aa()),则谁继承BaseDaoImpl,谁就要调用这个类中的aa()方法。这样不合理。 * 要求:子类创建对象时就要自动调用aa()方法,而不要单独程序再调用aa()方法来执行这一步 * 解决方案1:static语句块,但是static语句块中不能用this,因为static语句块是先于对象加载的。所以该方案不行 * 解决方案2:B类继承A类:则B类创建对象的时候会调用A类默认的无参构造函数 */ private Class classt; public BaseDaoImpl(){ //★ParameterizedType就是泛型 ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); //★getActualTypeArguments()[0]就是得到<T>【看源码】,把这个T转成Class this.classt = (Class)type.getActualTypeArguments()[0]; } @Resource(name="")//★注解可以代替get和set方法(下面的get和set方法可以不写) public HibernateTemplate hibernateTemplate;//★★必须用public,因为子类要用 public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } //得到所有实体对象的集合 public Collection<T> getAllEntry() { return this.getHibernateTemplate().find("from "+this.classt.getName()); } //依据Id得到实体对象 public T getEntryById(Serializable id) { //★★这里要传T的class形式,但是T没有class形式:【ParameterizedType】 return (T)this.hibernateTemplate.get(classt, id); } //更新实体对象 public void updateEntry(T t) { this.hibernateTemplate.update(t); } //保存实体对象 public void saveEntry(T t) { this.hibernateTemplate.save(t); } //删除实体对象 public void deleteEntry(Serializable id) { T t = this.getEntryById(id); this.getHibernateTemplate().delete(t); } }
3.3 【SpringInit.java】spring容器初始化的工具类
public class SpringInit { public static ApplicationContext context; static{ context = new ClassPathXmlApplicationContext("applicationContext.xml"); } }
相关文章推荐
- Java常用工具类之MD5加密
- java中常用的工具类(一)MD5,File工具类,String工具类
- java常用同步工具类
- Java常用正则表达式验证工具类RegexUtils.java
- Android java 开发中常用的工具类
- 【Java】StringUtils工具类常用方法详解
- javaweb开发中常用的时间工具类
- java常用工具类 - 全角转半角、半角转全角
- java中常用的工具类
- java常用工具类之DES和Base64加密解密类
- Java常用正则表达式验证工具类RegexUtils.java
- java开发常用工具类
- Java常用数据类型转换成byte工具类
- 项目经验分享——Java常用工具类集合
- 共同学习Java源代码--常用工具类--StringBuffer(一)
- Java常用工具类之RegexpUtils,正则表达式工具类
- Java中常用的String的工具类
- java中常用的工具类
- Java常用工具类之发送邮件
- JAVA 常用的xml工具类