Java/Hibernate/Hibernate Filter

Материал из Java эксперт
Перейти к: навигация, поиск

Hibernate Filter Demo

   <source lang="java">

///////////////////////////////////////////////////////////////////////// import java.util.*; import java.sql.*; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.criterion.*; public class Main {

 public static void main(String[] args) {
   HibernateUtil.setup("create table User ( id int, username VARCHAR, activated boolean);");
   
       //insert the users
       insertUser("a",true);
       insertUser("b",true);
       insertUser("c",false);
       insertUser("e",false);
       insertUser("e",false);
       SessionFactory factory = new Configuration().configure().buildSessionFactory();
       Session session = factory.openSession();
       Transaction tx = session.beginTransaction();
       //Show all users
       System.out.println("ALL USERS");
       displayUsers(session);
       
       //Show activated users
       Filter filter = session.enableFilter("activatedFilter");
       filter.setParameter("activatedParam",new Boolean(true));
       System.out.println("ACTIVATED USERS");
       displayUsers(session);
       
       //Show non-activated users
       filter.setParameter("activatedParam",new Boolean(false));
       System.out.println("NON-ACTIVATED USERS");
       displayUsers(session);
       
       session.close();
   
       HibernateUtil.checkData("select * from User");
 }
   public static void displayUsers(Session session)
   {
       Transaction trans = session.beginTransaction();
       Query query = session.createQuery("from User");
       Iterator results = query.iterate();
       while (results.hasNext())
       {
           User user = (User) results.next();
           System.out.print(user.getUsername() + " is ");
           if (user.isActivated())
           {
               System.out.println("activated.");
           }
           else
           {
               System.out.println("not activated.");
           }
       }
           
       trans.rumit();
       
   }
   public static void insertUser(String name, boolean activated)
   {
       Session session = HibernateUtil.currentSession();
       Transaction trans = session.beginTransaction();
       
       User user = new User();
       user.setUsername(name);
       user.setActivated(activated);        
       session.save(user);
       
       trans.rumit();
   }

}

///////////////////////////////////////////////////////////////////////// <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping

  PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 <class name="User">
   <id name="id" type="int">
     <generator class="increment"/>
   </id>
   <property name="username" type="string" length="32"/>
   <property name="activated" type="boolean"/>
   <filter name="activatedFilter" condition=":activatedParam = activated"/>
 </class>
 <filter-def name="activatedFilter">
   <filter-param name="activatedParam" type="boolean"/>
 </filter-def>

</hibernate-mapping>

///////////////////////////////////////////////////////////////////////// public class User {

   private int id;
   private String username;
   private boolean activated;
   
   
   public boolean isActivated()
   {
       return activated;
   }
   public void setActivated(boolean activated)
   {
       this.activated = activated;
   }
   public int getId()
   {
       return id;
   }
   public void setId(int id)
   {
       this.id = id;
   }
   public String getUsername()
   {
       return username;
   }
   public void setUsername(String username)
   {
       this.username = username;
   }

}

///////////////////////////////////////////////////////////////////////// import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil {

   public static final SessionFactory sessionFactory;
   static {
       try {
           // Create the SessionFactory from hibernate.cfg.xml
           sessionFactory = new Configuration().configure().buildSessionFactory();
       } catch (Throwable ex) {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
       }
   }
   public static final ThreadLocal session = new ThreadLocal();
   public static Session currentSession() throws HibernateException {
       Session s = (Session) session.get();
       // Open a new Session, if this thread has none yet
       if (s == null) {
           s = sessionFactory.openSession();
           // Store it in the ThreadLocal variable
           session.set(s);
       }
       return s;
   }
   public static void closeSession() throws HibernateException {
       Session s = (Session) session.get();
       if (s != null)
           s.close();
       session.set(null);
   }
   
   static Connection conn; 
   static Statement st;
 public static void setup(String sql) {
   try {
     // Step 1: Load the JDBC driver.
     Class.forName("org.hsqldb.jdbcDriver");
     System.out.println("Driver Loaded.");
     // Step 2: Establish the connection to the database.
     String url = "jdbc:hsqldb:data/tutorial";
     conn = DriverManager.getConnection(url, "sa", "");
     System.out.println("Got Connection.");
     st = conn.createStatement();
     st.executeUpdate(sql);
   } catch (Exception e) {
     System.err.println("Got an exception! ");
     e.printStackTrace();
     System.exit(0);
   }
 }
 public static void checkData(String sql) {
   try {
     HibernateUtil.outputResultSet(st
         .executeQuery(sql));

// conn.close();

   } catch (Exception e) {
     e.printStackTrace();
   }
 }
   public static void outputResultSet(ResultSet rs) throws Exception{
   ResultSetMetaData metadata = rs.getMetaData();
   int numcols = metadata.getColumnCount();
   String[] labels = new String[numcols]; 
   int[] colwidths = new int[numcols];
   int[] colpos = new int[numcols];
   int linewidth;
   linewidth = 1;
   for (int i = 0; i < numcols; i++) {
     colpos[i] = linewidth; 
     labels[i] = metadata.getColumnLabel(i + 1); // get its label
     int size = metadata.getColumnDisplaySize(i + 1);
     if (size > 30 || size == -1)
       size = 30;
     int labelsize = labels[i].length();
     if (labelsize > size)
       size = labelsize;
     colwidths[i] = size + 1; // save the column the size
     linewidth += colwidths[i] + 2; // increment total size
   }
   StringBuffer divider = new StringBuffer(linewidth);
   StringBuffer blankline = new StringBuffer(linewidth);
   for (int i = 0; i < linewidth; i++) {
     divider.insert(i, "-");
     blankline.insert(i, " ");
   }
   // Put special marks in the divider line at the column positions
   for (int i = 0; i < numcols; i++)
     divider.setCharAt(colpos[i] - 1, "+");
   divider.setCharAt(linewidth - 1, "+");
   // Begin the table output with a divider line
   System.out.println(divider);
   // The next line of the table contains the column labels.
   // Begin with a blank line, and put the column names and column
   // divider characters "|" into it. overwrite() is defined below.
   StringBuffer line = new StringBuffer(blankline.toString());
   line.setCharAt(0, "|");
   for (int i = 0; i < numcols; i++) {
     int pos = colpos[i] + 1 + (colwidths[i] - labels[i].length()) / 2;
     overwrite(line, pos, labels[i]);
     overwrite(line, colpos[i] + colwidths[i], " |");
   }
   System.out.println(line);
   System.out.println(divider);
   while (rs.next()) {
     line = new StringBuffer(blankline.toString());
     line.setCharAt(0, "|");
     for (int i = 0; i < numcols; i++) {
       Object value = rs.getObject(i + 1);
       overwrite(line, colpos[i] + 1, value.toString().trim());
       overwrite(line, colpos[i] + colwidths[i], " |");
     }
     System.out.println(line);
   }
   System.out.println(divider);
     
   }
   
 static void overwrite(StringBuffer b, int pos, String s) {
   int len = s.length();
   for (int i = 0; i < len; i++)
     b.setCharAt(pos + i, s.charAt(i));
 }
   

}

      </source>