Hibernate配置详解

Hibernate配置详解

package cn.hd.bean;
public class Student {
private Integer sid;
private String name;
private String age;
public Integer getSid() {
return sid; }
public void setSid(Integer sid) {
this.sid = sid; }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age; }
@Override public String toString() {
return "Student{" +
"sid=" + sid +
", name='" + name + '\'' +
", age='" + age + '\'' +
'}'; }}


<!--导入文件约束-->
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--文件声明-->
<hibernate-mapping>
    <!--class中的name代表实体类名  table代表数据库的表名-->
<class name="cn.hd.bean.User" table="user">
    <!--数据库的主键 对应的实体类中的id(主键)和数据表中的主键
    name代表实体类中的名字  column是字段名(可以省略不写)-->
    <id name="uid" column="uid">
        <!--主键生成策略-->
        <!--代理主键和自然主键
        主键生成策略:
        identity:是由于数据库自己维护先查id 自动加一
        increment:自动加1
        hilo:(了解)
        native:(我们用的)
        uuid:java API的生成策略)
        自然主键:
        assigned:自己输入主键

        -->
        <generator class="native"></generator>
    </id>
    <!--其他的属性
     这里也可以设置数据库中的字段属性
     type 生成表中的类型
     length
     not-null-->
    <property name="name" column="name"></property>
    <property name="psd" column="psd"></property>


</class>
    <class name="cn.hd.bean.Student" table="student">
        <id name="sid" column="sid">
            <generator class="native"></generator>

        </id>
<property name="name" column="name"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>



<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!--核心类-->
    <session-factory>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123</property>
      <!--方言
       sql语句的方言 我们在上面设置了数据库的信息是mysql
       mysql中的sql limit oracle 中没有
       所以要设置方言
         -->
   <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

     <!--设置hibernate执行sql语句的时,自动实现在控制台上 -->
    <property name="hibernate.show_sql">true</property>
        <!--设置显示的格式-->
        <property name="hibernate.format_sql">true</property>
        <!--设置数据库表的生成策略
           create 每次执行hibernate 就会创建新的表 原来的数据丢失
           create-drop 每次执行hibernate 就会删除所有的表 原来的数据丢失
           update 检查数据表有没有更新,如果有则自动更新,如果没有则不变
           validate 只做校验 对数据表不进行任何错误 只会提示错误
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!--加载映射文件-->
        <mapping resource="cn/hd/bean/User.hbm.xml" ></mapping>
    </session-factory>
</hibernate-configuration>

public static void main(String[] args) {
    /*读取配置信息*/

    Configuration cfg=new Configuration();
    /*调用他的方法 名字保持一致*/
    cfg.configure();


    /*获得sessFactory对象
       这个对象我们只用它获取session
       实际上这行代码他检查了数据库和实体类的关系
       如果有变化他会更新
       非常耗费资源 封装工具类
    */
    SessionFactory sf = cfg.buildSessionFactory();

    /*获得session对象*/
    Session session=sf.openSession();


    /*开启事务 不开启事务不会保存你的数据
    * 不开启不会保存数据到数据库
    * */
    Transaction ts = session.beginTransaction();

    /**/
    User user =new User();
    user.setName("李菲菲");
    user.setPsd("38383");

    session.save(user);



  /*  Student student=new Student();

    student.setName("张帅杰");
    student.setAge("18");
      session.save(student);*/
    /*提交事务*/
    ts.commit();
    /*关闭资源*/
    session.close();
    sf.close();

}

Hibernate crud

Save  update  get  delete

这四个方法不能单纯理解为添加、修改、查找、删除

实际是修改hibernate中的对象状态

 

hibernate中对象有三种状态

1. 瞬时状态

一个实体对象 没有id 也没有和session绑定

2. 游离状态

id没有和session绑定

3. 持久状态

id 也有和session绑定

 

实际上session的四个方法 就是在改变实体对象在hibernate中的对象状态

持久化状态的特点: 任何对象的变化都会自动同步到数据库中

Hibernate提供了一个saveOrUpdate的方法,这个方法自动识别对象的状态。实体开发中不去思考对象的实际状态,直接调用该方法。

 

 

Hibernate配置详解