1.增加
public class HibernateTest { private static SessionFactory sessionFactory;//sessionFactroy只使用一次,建立一个 static { try { //通过configure(),读取hibernate.cfg.xml,再配置与数据可建立联系 sessionFactory = new Configuration().configure().buildSessionFactory(); } catch(Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) throws Exception { Person person = new Person(); person.setUsername("zhangsan"); person.setPassword("lisi"); person.setTelphone(23432); person.setGender('F'); person.setGraduation(true); person.setBrithday(new java.sql.Date(new java.util.Date().getTime())); person.setMarryTime(new Timestamp(new java.util.Date().getTime())); InputStream is = new FileInputStream("C:/Users/liule/Desktop/新建文本文档 (2).txt"); int length = is.available(); byte[] buffer = new byte[length]; is.read(buffer); person.setFile(buffer); Session session = sessionFactory.openSession(); //通过session可以控制数据库的信息 Transaction ts = null; try { session.save(person); ts = session.beginTransaction(); ts.commit(); } catch(Exception ex) { if(null != ts) { ts.rollback(); } } finally { session.close(); } }
2.查询
Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); Query query = session.createQuery("from Person as p order by p.username asc").setFirstResult(2).setMaxResults(2);
//按照SQL语言进行查找,username的升序进行排序.并且从第三条记录(起始为0)开始,取出两条记录 List<Person> list = (List<Person>)query.list(); for(java.util.Iterator<Person> it = list.iterator();it.hasNext();) { Person person = it.next(); System.out.println(person.getUsername()); System.out.println(person.getId()); System.out.println("------------------------"); byte[] buffer = person.getFile(); OutputStream os = new FileOutputStream("c:/"+person.getId()+".txt"); os.write(buffer); os.close(); }
3.修改,load方法是更加精确的查询。createQuery是使用sql语句进行查询
tx = session.beginTransaction(); Person person =(Person)session.load(Person.class,new Long(1)); System.out.println(person.getId());//执行这一条的时候,只是返回一个代理,没有使用SQL语言进行查询 System.out.println(person.getUsername());//执行这一天的时候,使用了SQL语言,进行了查询 person.setUsername("wangwu"); person.setUsername("SADAS");//设置两次的话,后面的会把前面设置的覆盖掉 session.update(person);
4.删除
tx = session.beginTransaction(); Query query = session.createQuery("from Person"); java.util.Iterator it = query.iterate(); while(it.hasNext()) { session.delete(it.next()); }
5.对于query接口的list()方法与iterator()方法来说。都可以实现获取查询的对象,但list对象返回的每一个方法都是完整的(对象中的每一个属性都被表中的字段填充上),而iterator方法返回的对象中仅仅包含了主键值(标示符),只有当你对iterator中的对象进行操作时,hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。
6.iterator()方法,也就是延时加载,再使用的时候才能加载出来,且使用时session必须打开。