Hibernate框架搭建 偏执的太偏执、 2022-05-25 08:24 130阅读 0赞 # **Hibernate框架的搭建** # #### **1. ****添加jar包** #### ![20180510224828942][] hibernate解压后将lib/required文件夹下的jar包都添加到WebContent/lib下 **2. ****添加核心配置文件** ** src/hibernate.cfg.xml** 数据库连接相关配置【c3p0】运行时常量【show\_sql format\_sql】和注册映射元文件【xml和注解】 ![2018051022484570][] **运行时常量hibernate.hbm2ddl.auto 可以取值有4种:** 1、create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。可以理解为drop-create 2、create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。用于测试阶段 3、update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。在开发阶段中配置 4、validate :每次加载hibernate时,验证创建数据库表结构,如果表结构和对应的映射元文件不一致则会报出下面的异常。 ![2018051022511257][] # # 查看配置文件,可以看到唯一性约束 ![2018051022512820][] 解决方法:用户名称必须唯一 #### **3. ****定义实体类和对应的映射元文件** #### ![20180510225242122][] 映射元文件的定义方式有两种:采用XML和注解开发 ![20180510225301994][] ![2018051022533952][] 在核心配置文件中注册映射元文件 ![20180510225407841][] 在这里采用xml开发 #### **4、****编程调用** #### ![20180510225542535][] 这里使用JUnit单元测试进行测试 **新增数据** public class TestAPI { public static void main(String[] args) { UserBean user = new UserBean(); user.setUsername("xiaohui"); user.setPassword("666666"); StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() .configure().build(); SessionFactory fac = new MetadataSources(ssr).buildMetadata() .buildSessionFactory(); Session session = fac.openSession(); Transaction transaction = session.beginTransaction(); session.persist(user); transaction.commit(); session.close(); } @Test public void testSave() { UserBean user = new UserBean(); user.setUsername("xiaohui"); user.setPassword("666666"); StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() .configure().build(); SessionFactory fac = new MetadataSources(ssr).buildMetadata() .buildSessionFactory(); Session session = fac.openSession(); Transaction transaction = session.beginTransaction(); session.persist(user); //session.save(user); transaction.commit(); session.close(); } ![20180510225656588][] 动态插入dynamic-insert="true" 和动态修改 dynamic-update="true" ![20180510225707932][] 删除数据 ![2018051022582184][] 按照id加载数据 ![20180510225832127][] ![20180510232640824][] #### 5**、****常见的异常和对应的处理方法** #### ![20180510232813211][] 解决方法:检查当前操作的实体类对象是否符合映射元文件中的约束说明 ![20180510232824825][] ![20180510232839971][] 解决方法:检查映射元文件中看哪个属性在实体类中没有进行定义 [20180510224828942]: /images/20220525/b126d66850094ce2ba5c53c10f810464.png [2018051022484570]: /images/20220525/18c667aab7fb461aa4f7ac7b20045082.png [2018051022511257]: /images/20220525/bcb7fbec4f2d4a82b858721ee4d4f81f.png [2018051022512820]: /images/20220525/47f6ba6408234d39a77e253d240547f5.png [20180510225242122]: /images/20220525/e8412cfbb5cb46e09fc516b06eb79ff8.png [20180510225301994]: /images/20220525/0b4de142f89940df9d9aff74b486a6fa.png [2018051022533952]: /images/20220525/fb58d3778a974e38bca2b9f3485dbef7.png [20180510225407841]: /images/20220525/7535894267f942718cd7d8987c76b0c8.png [20180510225542535]: /images/20220525/4a362e79fdf34b00b83ed8d17c750afb.png [20180510225656588]: /images/20220525/249b8b82090a4cb4b839b18f3bd21b35.png [20180510225707932]: /images/20220525/559531c8cefb4ca4a67f9952ac0e31e5.png [2018051022582184]: /images/20220525/d0cc1d921ec247b3bb150065444e5c23.png [20180510225832127]: /images/20220525/daa051d352de4a3189b3b8fc4226e207.png [20180510232640824]: /images/20220525/323843135e1d4360a5c46084091760ab.png [20180510232813211]: /images/20220525/9c9df1b02f4f4f6d9c06a85f0e3abcbd.png [20180510232824825]: /images/20220525/651d9ac2828c47cda17ebb4ec3d9ef7c.png [20180510232839971]: /images/20220525/a1f6b03c22c64afca543e820a657b976.png
还没有评论,来说两句吧...