hibernate的环境搭建(以一个小例子讲解)

                                               以Person类为例

一.导入jar包


二.在根目录下(即src目录下)写一个hibernate.cfg.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 代表一个数据库的描述-->
    <session-factory>
        <!--链接数据库的url-->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <!--链接数据库的驱动-->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--链接数据库的用户名-->
        <property name="hibernate.connection.username">root</property>
        <!--链接数据库的密码-->
        <property name="hibernate.connection.password">root</property>
        <!--方言 告诉hibernate用什么数据库,将来会生成什么样的sql语句-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--
               hibernate对表的策略
      validate  在hibernate容器启动的时候,根据映射文件和持久化类校验表
      create    每次当hibernate启动的时候,都会根据持久化类和映射文件创建表
      create-drop  每次当hibernate启动的时候,都会根据持久化类和映射文件创建表,销毁的时候删除表
      update  检查,如果和映射文件不一致,则更新表的结构,如果没有表,则会创建表
        -->
        <property name="hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <mapping resource="domain/Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

三.持久化类

package domain;

/**
 *
 * Created by wangxinqi  on 2016/12/20.
 * 持久化类
 */
public class Person {
    private long id;
    private  String name;
    private String sex;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
四. 在类的同包下写一个映射文件(一般是 类名.hbm.xml)以此例就是Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--
    class元素 代表持久化类
       name属性为类的全名
       table属性为表的名字 默认值是类名
       catlog属性 为数据库的名字
    -->
   <class name="domain.Person" table="Person">
       <!--
         id为元素主键
           name 标示符属性
           length 数据库中id的长度
           column id属性对于的字段
           type 类型
       -->
       <id name="id" length="5" column="id" type="java.lang.Long">
           <!--
            主键的产生器
              需要通过什么样的方式产生主键
          -->
           <generator class="increment"></generator>
       </id>
       <!--
         代表一般的属性
       -->
       <property name="name" type="java.lang.String" length="20"></property>
       <property name="sex" type="java.lang.String" length="20"></property>
   </class>
</hibernate-mapping>
五.测试及验证

扫描二维码关注公众号,回复: 14685813 查看本文章
/**
 * Created by Administrator on 2016/12/20.
 * 完成crud的操作
 */
public class CRUDtest {
   /**
   * 建表测试
   * */
   @Test
    public  void  creatTableTest(){
            Configuration configuration=new Configuration();
            configuration.configure();
            configuration.buildSessionFactory();
    }

    /**
     * 增加数据
     * */
    @Test
    public void  testSave(){
        //创建Configuration实例
        Configuration configuration =new Configuration();
        //加载hibernate.cfg.xml文件
        configuration.configure();
        //创建sessionFactory相当于数据源
        SessionFactory sessionFactory= configuration.buildSessionFactory();//也可以理解为session工厂

       //保存操作是由session来完成的 openSession 方法相当于利用session打开了一个数据库的连接
        Session session=sessionFactory.openSession();//开启session(连接) 一个数据库连接对象 就一个seesion
        //hibernate的事务默认是关闭的,必须手动开启 ,可以保证数据的安全性
        Transaction transaction=session.beginTransaction();
        Person person=new Person();//临时状态
        person.setName("王新起");//临时状态
        person.setSex("男");//临时状态
        session.save(person);//把一个对象转化为持久化状态
        //提交事务
        transaction.commit();
        //相当于关闭了连接
        session.close();
    }
    /**
     * 查询所有的person对象
     * 查询操作不需要开启事务
     * */
    @Test
    public  void  testQueryAllPerson(){
        Configuration configuration =new Configuration();
        configuration.configure();
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        Session session=sessionFactory.openSession();

//        List<Person> persons = session.createQuery("from Person").list();
        List<Person> persons =session.createQuery("from Person ").list();
        for (Person person :persons){
            System.out.print(person.getName()+":"+person.getSex());
        }
        session.close();
    }

    /**
     * 根据主键查询其中的一条数据
     * */
    @Test
    public void testPersonById(){
        Configuration configuration=new Configuration();
        configuration.configure();
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        Session session=sessionFactory.openSession();
        Person person=session.get(Person.class,1L);
        System.out.print(person.getName());
        session.close();
    }

    /**
     * 修改
     * */
    @Test
    public  void  testUpdate(){
        Configuration configuration =new Configuration();
        configuration.configure();
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        Session session=sessionFactory.openSession();
        Transaction transaction =session.beginTransaction();
        // 先拿到  再修改  再更新
        Person person=session.get(Person.class,1L);
        person.setName("王帅起");
        session.update(person);
        transaction.commit();
        session.close();
    }

    /**
     * 删除
     * */
    @Test
    public  void  testDelete(){
        Configuration configuration =new Configuration();
        configuration.configure();
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        Session session =sessionFactory.openSession();
        Transaction transaction =session.beginTransaction();
        //先拿到 再删除
        Person person =session.get(Person.class,1L);
        session.delete(person);
        transaction.commit();
        session.close();
    }

}


猜你喜欢

转载自blog.csdn.net/qq_35222261/article/details/53898096