反射能够干什么?使用反射编写通用jar包
来源:互联网 发布:sha1算法的c语言实现 编辑:程序博客网 时间:2024/05/16 04:53
这是刚学Hibernate时为简化对数据库增删改查操作时写的一个通用的package
用到的技术有:泛型接口、泛型类、反射、Hibernate 和Criteria
package com.ljh.dao;import java.io.Serializable;import java.util.List;import org.hibernate.criterion.DetachedCriteria;//写这个接口的好处是,节约其他接口的书写量public interface BaseDao<T> {//这个T一旦确定,下面的方法里的T都确定了 public void insert(T o); public void update(T o); public void delete(T o); public void delete(Serializable id);//主键都是要求可序列化,可以转换为流 public T getOne(Serializable id); public T loadOne(Serializable id); public List<T> selectAll(); public T selectOne(DetachedCriteria dc); public List<T> selectList(DetachedCriteria dc); //分页 public List<T> selectList(DetachedCriteria dc,int start,int row); public int selectCount(DetachedCriteria dc); public int getPageCount(DetachedCriteria dc, int row);}
package com.ljh.dao;import java.io.Serializable;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Projections;import java.lang.reflect.ParameterizedType;@SuppressWarnings("unchecked")public class BaseDaoImpl<T> implements BaseDao<T> {private Class<?> t_class=null;public BaseDaoImpl(){ //对这句话进行解读:获取泛型父类接口的参数类型的切确类型 //[0] 表示<T,K>的第一个 参数Tthis.t_class = (Class<?>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];}@Overridepublic void insert(T o) {Session session=HibernateUtil.getSession();session.save(o);//事务在业务层控制,连接在过滤器关闭}@Overridepublic void update(T o) {Session session=HibernateUtil.getSession();session.update(o);}@Overridepublic void delete(T o) {Session session=HibernateUtil.getSession();session.delete(o);}@Overridepublic void delete(Serializable id) {Session session=HibernateUtil.getSession();session.delete(this.loadOne(id));}@Overridepublic T getOne(Serializable id) {Session session=HibernateUtil.getSession();return (T)session.get(t_class, id);}@Overridepublic T loadOne(Serializable id) {Session session=HibernateUtil.getSession();return (T)session.load(t_class, id);}@Overridepublic List<T> selectAll() {//String hql="from "+this.t_class.getName();Session session=HibernateUtil.getSession();return session.createCriteria(t_class).list();}@Overridepublic T selectOne(DetachedCriteria dc) {Session session=HibernateUtil.getSession();return (T)dc.getExecutableCriteria(session).uniqueResult();}@Overridepublic List<T> selectList(DetachedCriteria dc) {Session session=HibernateUtil.getSession();return dc.getExecutableCriteria(session).list();}@Overridepublic List<T> selectList(DetachedCriteria dc, int start, int row) {Session session=HibernateUtil.getSession();return dc.getExecutableCriteria(session).setFirstResult(start).setMaxResults(row).list();}@Overridepublic int selectCount(DetachedCriteria dc) {//总行数Session session=HibernateUtil.getSession();Criteria c=dc.getExecutableCriteria(session);c.setProjection(Projections.rowCount());//取其中一部分return (Integer)c.uniqueResult();}@Overridepublic int getPageCount(DetachedCriteria dc, int row) {//总页数int c = (int) this.selectCount(dc);return c / row + (c % row == 0 ? 0 : 1);}}
package com.ljh.dao;public class DB { public static void begin() { HibernateUtil.getSession().beginTransaction(); } public static void commit() { HibernateUtil.getSession().getTransaction().commit(); } public static void rollback() { HibernateUtil.getSession().getTransaction().rollback(); }}
package com.ljh.dao;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;/** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */public class HibernateUtil { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION;static { try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();} } private HibernateUtil() { }/** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {rebuildSessionFactory();}session = (sessionFactory != null) ? sessionFactory.openSession(): null;threadLocal.set(session);} return session; }/** * Rebuild hibernate session factory * */public static void rebuildSessionFactory() {try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}/** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } }/** * return session factory * */public static org.hibernate.SessionFactory getSessionFactory() {return sessionFactory;}/** * return session factory * *session factory will be rebuilded in the next call */public static void setConfigFile(String configFile) {HibernateUtil.configFile = configFile;sessionFactory = null;}/** * return hibernate configuration * */public static Configuration getConfiguration() {return configuration;}}
EncodingFilter
package com.ljh.ui;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class EncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)res;request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html");//之前写的东西就是请求来的时候chain.doFilter(req, res);//放他过去//之后写的就是请求回去的时候}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
OpenSessionInViewFilter
package com.ljh.ui;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.hibernate.Session;import com.ljh.dao.HibernateUtil;public class OpenSessionInViewFilter implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {Session session = null;try {System.out.println("打开连接");session = HibernateUtil.getSession();chain.doFilter(request, response);} catch (Exception e) {e.printStackTrace();}finally{System.out.println("关闭连接");HibernateUtil.closeSession();}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
阅读全文
0 0
- 反射能够干什么?使用反射编写通用jar包
- 反射能够干什么?
- 使用java反射编写通用的toString()方法
- java中利用反射编写通用servlet
- android反射加载assets中的已使用dx.bat处理的jar包
- 利用java反射机制编写通用的toString 方法
- 利用反射泛型编写一个通用Dao
- 反射应用之一---编写通用的toString()方法
- JDBC:利用 ResultSetMetaData 和反射编写通用查询方法
- 利用反射泛型编写通用的Dao
- 使用反射编写泛型数组代码
- 使用Java泛型和反射机制编写Excel文件生成和解析的通用工具类
- 反射通用工具类
- 安卓反射机制动态加载jar包
- Java 利用反射调用jar包中的类
- java反射调用指定jar包中的类和方法
- Android 封装jar包,反射机制获取资源
- 使用commons-lang.jar包以及反射机制实现javabean的equals,hashCode和toString三个方法重写
- Yarn核心——RPC(3) YarnRPC
- Spring Boot 2.0.0.M3使用案例,案例配置,常用命令,注解介绍,热部署
- hdu 5792 思维+树状数组
- bootstrapDualListbox 动态选中某一项
- Oracle SQL高级编程——子查询因子化全解析
- 反射能够干什么?使用反射编写通用jar包
- Hadoop学习2--搭建的教训总结
- bzoj 4996: [Usaco2017 Feb]Why Did the Cow Cross the Road II
- Atitit famous paint著名绘画 油画 作品数据库资料
- Spring-Boot根据配置文件生成Bean
- 偏最小二乘法回归
- 搭建ACE及TAO开发环境的快速方法(Linux+Docker篇)
- js设计模式之Facade
- source insight死活打不开解决方法