Hibernate基本操作

    xiaoxiao2022-06-22  22

    package hibernate.curd; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import org.hibernate.transform.Transformers; import org.junit.Before; import org.junit.Test; import java.util.List; import java.util.Map; /** * 将近10年没有用Hibernate了,最近接收项目操作Hibernate,正好回顾一下. */ public class TestCurd { private Configuration cfg; private SessionFactory cf; @Before public void init() { cfg = new Configuration(); cf = cfg.configure().buildSessionFactory(); } @Test /** * 保存对象 */ public void save() { Emp emp = new Emp(); emp.setName("张三"); emp.setMail("zhangsan@123.com"); emp.setPhone("13897654231"); emp.setSex("F"); Session session = cf.openSession(); session.beginTransaction(); session.save(emp); session.getTransaction().commit(); session.close(); cf.close(); } /** * 保存对象 */ @Test public void load() { Session session = cf.openSession(); session.beginTransaction(); Emp emp = (Emp)session.load(Emp.class, 1); System.out.println("=="+emp.getName()); emp.setName("张三变名字了"); //即使是查询,只要在事物前做过对象操作都将触发update session.getTransaction().commit(); emp.setName("张三更改不了"); //在事物后处理将不会改变,如果在事物之前非要用对象操作也可以采用session.evict(emp); session.close(); cf.close(); } /** * merge修改数据 * 先根据ID查询数据库是否有数据,如果有数据将进行修改数据,如果没有将进行创建数据 * 注意:如果是更新数据会存在一个问题,如果该对象没有设置某个参数是会被设置null */ @Test public void merge(){ Session session = cf.openSession(); session.beginTransaction(); Emp emp = new Emp(); emp.setId(10); emp.setName("李四2"); emp.setSex("M"); emp.setMail("lisi@123.com"); session.merge(emp); session.getTransaction().commit(); session.close(); cf.close(); } /** * update更新数据 * 和merge不同的是,如果id不存在会抛出异常 */ @Test public void update(){ Session session = cf.openSession(); session.beginTransaction(); Emp emp = new Emp(); emp.setId(20); emp.setName("李四2"); emp.setSex("M"); emp.setMail("lisi@123.com"); session.update(emp); session.getTransaction().commit(); session.close(); cf.close(); } /** * delete删除某条记录 */ @Test public void delete(){ Session session = cf.openSession(); session.beginTransaction(); Emp emp = new Emp(); emp.setId(6); session.delete(emp); session.getTransaction().commit(); session.close(); cf.close(); } /** * 查询列表 */ @Test public void query(){ Session session = cf.openSession(); session.beginTransaction(); Emp empQuery = new Emp(); empQuery.setName("张三"); Query query = session.createQuery("from Emp where name=:name"); query.setProperties(empQuery); List<Emp> list = query.list(); for(Emp emp : list){ System.out.println(emp.getName()); } session.getTransaction().commit(); session.close(); cf.close(); } /** * 查询列表 */ @Test public void query2(){ Session session = cf.openSession(); session.beginTransaction(); Query query = session.createQuery("from Emp where name like ?"); query.setString(0, "%张三%"); List<Emp> list = query.list(); for(Emp emp : list){ System.out.println(emp.getName()); } session.getTransaction().commit(); session.close(); cf.close(); } /** * 查询列表 * 该方法主要用于,没有配置hbm文件或者处理复杂sql需要 */ @Test public void querySQL1(){ Session session = cf.openSession(); session.beginTransaction(); SQLQuery query = session.createSQLQuery("select * from emp where name like ?"); // query.setParameter(0, "%张三%"); //设置预处理参数 query.setString(0, "%张三%"); //*** 关键的一步把对象转换成Map query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List<Map> list = query.list(); System.out.println(list); for(Map emp : list){ System.out.println(emp.toString()); } session.getTransaction().commit(); session.close(); cf.close(); } /** * 查询列表 */ @Test public void querySQL(){ Session session = cf.openSession(); session.beginTransaction(); SQLQuery query = session.createSQLQuery("select * from emp where name like ?"); query.setParameter(0, "%张三%"); //*** 主要方法绑定对象 query.addEntity(Emp.class); List<Emp> list = query.list(); System.out.println(list); for(Emp emp : list){ System.out.println(emp.getName()); } session.getTransaction().commit(); session.close(); cf.close(); } }

    Jar包列表(目前最小需求Jar包)因为项目中用的比较多的日志是slf4结合logback,这里只用log4j打印执行sql:

    antlr-2.7.6.jar  (生成sql语句)asm-1.5.3.jar   (字节码增强工具)cglib-2.1_3.jar    (动态代理)commons-collections-3.2.jar (集合处理)commons-logging-1.1.1.jar   (日志组件)dom4j-1.6.1.jar  (xml的dom操作)hibernate-3.2.6.ga.jarjta-1.1.jar (不解释)junit-4.10.jar (单元测试)log4j-1.2.14.jar (家喻户晓的日志)mysql-connector-java-5.1.6.jar  (用的mysql连接jdbc驱动)

    由于好久没有使用Hibernate了,后面还会整理 n-n关联关系处理、一级缓存二级缓存查询缓存、主键生成策略、悲观锁和乐观锁、JPA方式等。

    转载请注明原文地址: https://ju.6miu.com/read-1122960.html

    最新回复(0)