反射能够干什么?使用反射编写通用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
原创粉丝点击