使用hibernate进行CRUD
来源:互联网 发布:李炎恢javascript笔记 编辑:程序博客网 时间:2024/05/18 03:40
一. 查询操作
Criteria – 查询JavaBean. – session.createCriteria(JavaBean.class);
Query - 用于执行HQL – session.createQuery(HQL);
SQLQuery - 用于执行原生的SQL. – session.createSQLQuery(SQL);
条件查询 - Restrictions- Restrictions.eq(propertyName,”value”);
1:查询:
A:全部查询,使用Criteri(完全限定名-类名)进行查询
B:全部查询,使用Query - 不执行SQL-语句,执行的是HQL - Hibernate Query Language.
C:全部查询,使用SQLQuery类,此类执行原生的SQL语句。
2:条件查询
A:对于Criteria类,必须使用add方法设置条件。
B:对于Query类,应该使用?(占位符)或是命名(where id=:myId)查询
C:普通查询
3:如果一个查询的它的条件不确定,应该怎么弄?
3.1全部查询-使用Criteria进行查询
@Test // 标准化查询接口public void test2(){Criteria cr = sess.createCriteria(Stud.class); // 按类名查询Criterion cn = Restrictions.eq("name", "c"); // 每个Criterion对象表示一个查询条件cr.add(cn); // 增加条件List<Stud> studs = cr.list();// 查询的结果是已经封装好的System.err.println(studs);}
3.2全部查询-使用Query进行查询
@Testpublic void test3(){ // 使用HQL语句进行查询,HQL语句是面向类的,不是面向表的,所以Stud同javabeanString hql = "from Stud"; // select开始的语句,但select可以省略Query query = sess.createQuery(hql); List<Stud> studs = query.list();System.err.println(studs);}
3.3全部查询-使用SQLQuery进行查询
@Testpublic void test4(){String sql = "select * from stud";this.getSession().createSQLQuery(sql).addEntity(Rl_employee_info.class).list()// SQLQuery sqlQuery = sess.createSQLQuery(sql);// List list = sqlQuery.list(); //返回的是什么? List<Object[]> 里面存的是数组// sqlQuery.setResultTransformer(Transformers.aliasToBean(Stud.class)); //转成List<Stud>类型// for(Object o : list){// Object[] oo= (Object[])o;// System.err.println(">ID:"+oo[0]+",Name:"+oo[1]);// }}
Criteria类,使用add方法设置条件
@Testpublic void query1(){ // 使用Criteria查询id为4的用户 Jack %j%Session sess = HibernateUtils.getSession();sess.beginTransaction();Criteria c = sess.createCriteria(Stud.class);Criteria c = sess.createCriteria(Stud.class,”s”); // 第二个参数为别名//设置条件,通过add方法//c.add(Restrictions.eq("id",4)); // 第一个参数是Stud的id属性的名,第二个参数是对比的值,相当于id=4//List<Stud> list = c.list();//对于使用主键的查询,可以使用另一种方式//c.add(Restrictions.idEq(3)); //直接使用主键等于什么值的方式c.add(Restrictions.ge("id", 3));// 获取id>3 的//再添加一个条件c.add(Restrictions.eq("name", "22")); // name为varchar类型c.add(Restrictions.like("name", "K",MatchMode.ANYWHERE)); // k - %k% = 全于List<Stud> list = c.list();sess.getTransaction().commit();}
Query类,使用命名查询
@Testpublic void query2(){Session sess = HibernateUtils.getSession();sess.beginTransaction();String hql = "from Stud where id=:myId and name=:yourName";//使用命名的查询Query query = sess.createQuery(hql);query.setInteger("myId",3);query.setString("yourName","Jack");Stud stud = (Stud) query.uniqueResult();//只要根据id查询则返回一行,则可以使用uniqueResult的方法System.err.println(">>>:"+stud);sess.getTransaction().commit();}
//c.add(Restrictions.allEq(param)); // param为一个HashMap//List list = c.list();Query query = se.createQuery(hql);query.setProperties(param);///一次设置可变参数List list = query.list();System.err.println(">>:"+list);
二. 插入操作
//@Testpublic void test1(){Session sess = HibernateUtils.getSession();//打开一个新的sessionTransaction tx = sess.beginTransaction();Stud s = new Stud(); //不需要设置主键,由hibernate自动分配主键s.setName("张三");sess.save(s);tx.commit();}
三. 更新操作
//@Testpublic void test1(){Session sess = HibernateUtils.getSession();//打开一个新的sessionTransaction tx = sess.beginTransaction();Stud s = new Stud(); //不需要设置主键,由hibernate自动分配主键s.setName("张三");sess.save(s);tx.commit();}
在customer.hbm.xml文件的class标签中增加select-before-update=”true” (在执行更新之前查询)
目的: 把要更新的信息又放置到session的一级缓存中,快照有一份
再更新时,拿缓存中的数据和快照比对,没有变化,所以不再产生update语句saveOrUpdate: 该方法同时包含save和update方法,
* 如果在javabean中id为Integer类型(private Integer id)
* 如果id==null(临时对象)执行save操作
* 如果id!=null(游离对象)就用update方法
* 如果是持久化对象就直接返回
* 如果在javabean中id为int类型(private int id) 此时id的默认值为0
* 如果javabean中id属性的值与unsaved-value=”0” 相同,执行insert操作
* 如果javabean中id属性的值与unsaved-value=”0” 不相同,执行update操作四. 删除操作
五. 工具类:HibernateUtils.java
public class HibernateUtils {private static SessionFactory sf = null;static {Configuration config = new Configuration();config.configure("hibernate.cfg.xml"); // hibernate.cfg.xml放置在src目录下sf = config.buildSessionFactory();}// 获取sessionpublic static Session getSession() {if (sf != null) {return sf.openSession();}return null;}// 关闭sessionpublic static void closeSession(Session session) {if (session != null && session.isOpen()) {session.close();}}// 开启事务public static Transaction beginTransaction(Session session) {if (session != null && session.isOpen()) {return session.beginTransaction();}return null;}// 提交事务public static void commitTransaction(Transaction ts) {if (ts != null && !ts.wasCommitted()) {ts.commit();}}// 回滚事务public static void rollbackTransaction(Transaction ts) {if (ts != null && !ts.wasRolledBack()) {ts.rollback();}}}
六. Dao的标准写法CRUD
public class CustomerDao { public void saveCustomer(Customer customer){ // 1. 插入记录Session session = null;Transaction ts = null;try{session = HibernateUtils.getSession();ts = HibernateUtils.beginTransaction(session);if(session!=null){session.save(customer);}HibernateUtils.commitTransaction(ts);}catch(HibernateException e){HibernateUtils.rollbackTransaction(ts);throw new RuntimeException(e);}finally{HibernateUtils.closeSession(session);}}public void updateCustomer(Customer customer){ // 2. 更新记录Session session = null;Transaction ts = null;try{session = HibernateUtils.getSession();if(session!=null){ts = HibernateUtils.beginTransaction(session);session.update(customer);HibernateUtils.commitTransaction(ts);}}catch(HibernateException e){HibernateUtils.rollbackTransaction(ts);throw new RuntimeException(e);}finally{HibernateUtils.closeSession(session);}}public Customer getCustomerById(int i){ // 3. 通过id查找Session session = null;Transaction ts = null;Customer customer = null;try{session = HibernateUtils.getSession();if(session!=null){ts = HibernateUtils.beginTransaction(session);customer = (Customer)session.get(Customer.class, i);HibernateUtils.commitTransaction(ts);}}catch(HibernateException e){HibernateUtils.rollbackTransaction(ts);throw new RuntimeException(e);}finally{HibernateUtils.closeSession(session);}return customer;}public List<Customer> findCustomers(){ // 4. 获取所有记录Session session = null;Transaction ts = null;List<Customer> list = null;try{session = HibernateUtils.getSession();if(session!=null){ts = HibernateUtils.beginTransaction(session);Query query = session.createQuery("from Customer c");list = query.list();HibernateUtils.commitTransaction(ts);}}catch(HibernateException e){HibernateUtils.rollbackTransaction(ts);throw new RuntimeException(e);}finally{HibernateUtils.closeSession(session);}return list;}public void deleteCustomerById(int id){ // 5. 删除记录Session session = null;Transaction ts = null;try{session = HibernateUtils.getSession();if(session!=null){ts = HibernateUtils.beginTransaction(session);Customer customer = (Customer)session.get(Customer.class, id);session.delete(customer);HibernateUtils.commitTransaction(ts);}}catch(HibernateException e){HibernateUtils.rollbackTransaction(ts);throw new RuntimeException(e);}finally{HibernateUtils.closeSession(session);}}}
- 使用hibernate进行CRUD
- 使用CRUD进行管理
- jdbc-使用DBUtils进行crud
- hibernate对数据库进行CRUD操作
- 使用JDBC对数据库进行CRUD
- 使用JDBC对数据库进行CRUD
- 使用MyBatis对标进行CRUD操作
- 使用JDBC对数据库进行CRUD
- 使用DOM方式对XML进行CRUD
- [ElasticSearch]使用 java API 进行CRUD操作
- hibernate---CRUD
- hibernate-CRUD
- 【Hibernate】crud
- 在Hibernate中用DAO和spring对db进行CRUD
- hibernate 逆向工程对数据库进行CRUD操作
- Spring和hibernate集成写API进行CRUD操作
- Elasticsearch简单使用系列--使用Java API进行CRUD操作
- Elasticsearch简单使用系列--使用Rest API进行CRUD操作
- android build warning: Ignoring InnerClasses attribute for an anonymous inner class
- CSUST 第九届校赛C-编辑距离(DP)
- 求关于一条直线的对称点
- 图解密码技术笔记(一)对称密码(共享密钥密码)——用相同的密钥进行加密和解密
- Android5.X对图形操作上有更多的功能。下面来看看Tinting(着色)
- 使用hibernate进行CRUD
- (不易)POJ-3414 BFS中的路径还原
- Unity实现滑页嵌套(解决ScrollRect嵌套冲突问题)
- 一个专注于细分行业的网址导航-6指南针网址导航
- Nginx简单介绍以及安装与配置
- Python学习笔记(六)
- 初来乍到
- HDU 1358 Period
- CSS块级元素、内联元素概念