• Hibernate 学习笔记一


    Hibernate 学习笔记一


    今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子。期间碰到了两个Exception。
    我们在使用hibernate的时候需要引入许多jar包,如果jar包少引入了或者版本老旧就会报错,下面是我遇到的两个Exception ,第一个是因为项目缺少slf4j-api.jar和slf4j-log4j12.jar这两个jar包。第二个是因为缺少log4j.jar这个包。一般这种问题只要百度一下报错就可以找到原因,只要下载相应的包,导入项目就可以解决问题。


    **1. Exception in thread "main" java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class **org.slf4j.LoggerFactory
    2. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger


    我亲测无误的使用到的开发包 点我下载


    项目的结构图


    运行结果
    控制台里可以看到最后一行是执行的sql语句。

    数据库中可以看到插入了Jawen112这个雇员。


    主要代码和配置


    测试后没问题的代码。


    test.java
    向数据库插入一个Employee对象

    package com.vv.view;
    
    import java.util.Date;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.*;
    
    import com.vv.domain.Employee;
    import com.vv.service.EmpoyeeService;
    
    public class test {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		
    		//我们使用hibernate完成crud操作[这里我们只见对象不见表]
    		//现在不使用servcie,直接测试
    		//1.创建Configuration  ,  该对象用于读取"hibernate.cfg.xml" 并完成初始化
    		Configuration configuration=new Configuration().configure("hibernate.cfg.xml");                 
    		//2.创建sessionfactory[],这是一个会话工厂,是一个重量级的对象
    		//后面做成单态,只能有一个
    		SessionFactory sessionFactory=configuration.buildSessionFactory();
    		//3.创建Session 相当于jdbc中的connection  一个会话
    		Session session=sessionFactory.openSession();
    		//4.对hibernate而言,要求程序员,在进行增加,删除,修改的时候使用事务提交
    		Transaction  transaction=session.beginTransaction();
    		
    		//添加一个雇员
    		Employee employee1=new Employee();
    		employee1.setName("Jawen112");
    		employee1.setEmail("995625851@qq.com");
    		employee1.setHirdate(new Date());
    		//保存
    		session.save(employee1);//save(employee1) 就是持久化该对象(把对象保存到了数据库中)    ->insert into....  [被hibernate封装]
    		//提交
    		transaction.commit();
    		session.close();
    	}
    }
    

    和 Employee 对应的数据库


    Employee.java
    Employee->雇员类(属性id,年龄,邮箱,入职日期)

    package com.vv.domain;
    
    import java.util.Date;
    
    
    //建议domain对应名称首字母大写
    //domain对象   javabean   pojo(plain old/ordinary java object) 简单的java对象
    public class Employee {
    
    	private Integer id;
    	private String name;
    	private String email;
    	private Date hirdate;
    	
    	
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public Date getHirdate() {
    		return hirdate;
    	}
    	public void setHirdate(Date hirdate) {
    		this.hirdate = hirdate;
    	}
    
    }
    

    Emploee.hbm.xml
    这里配置domain对象和表的关系映射

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 映射文件需要dtd来指定格式   -->
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
        <!-- 该文件用于配置domain对象和表的关系映射 -->
       <hibernate-mapping package="com.vv.domain"> 
          <class name="Employee" table="employee">
               <!-- id元素用于指定主键属性 -->
              <id name="id" column="id"  type="java.lang.Integer">
                  <!-- 该元素用于指定主键值生成策略 hilo native increment sequence uuid-->
                  <generator class="native"></generator>
              </id>
              
              <property name="name" type="java.lang.String">
                  <!--数据库中的列 -->
                  <column name="name" not-null="false"/>
              </property>
              
              <property name="email" type="java.lang.String">
                  <column name="email" not-null="false"/>
              </property>
              
              <property name="hirdate" type="java.util.Date">
                  <column name="hirdate" not-null="false"/>
              </property>
              
          
          </class>
        </hibernate-mapping>	
    

    hibernate.cfg.xml
    这里配置一些和数据库有关的配置(驱动,用户,密码,url,管理的对象映射文件即Emploee.hbm.xml 等等)

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!-- hibernate  设计者给我们提供了一些常用的配置 -->
            <!-- 配置使用的driver -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 配置使用的用户 -->
            <property name="connection.username">xiaozhi</property>
            <!-- 配置使用的密码 -->
            <property name="connection.password">ycJWr9hBmKTb</property>
            <!-- 配置使用的url -->
            <property name="connection.url">jdbc:mysql://127.0.0.1:3306/vmalogo</property>
            <!-- 配置dialect 方言,明确告诉hibernate连接的是哪种数据库 -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- 显示出sql语句 -->
            <property name="show_sql">true</property>
            <!-- 指定管理的对象映射文件 -->
            <mapping  resource="com/vv/domain/Emploee.hbm.xml" />
                        
        </session-factory>
    </hibernate-configuration>     
    

  • 相关阅读:
    oracle一次删除多张表
    JS学习之动态加载script和style样式
    JS动态引入js、CSS动态创建script/link/style标签
    js设置全局变量ajax中赋值
    java获取程序执行时间
    echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小
    Codeforces Round #188 (Div. 1) B. Ants 暴力
    Codeforces Round #188 (Div. 2) C. Perfect Pair 数学
    Codeforces Round #188 (Div. 2) B. Strings of Power 水题
    Codeforces Round #188 (Div. 2) A. Even Odds 水题
  • 原文地址:https://www.cnblogs.com/vvxyz/p/5913010.html
Copyright © 2020-2023  润新知