• Hibernate 环境搭建


    Hibernate 工作流程

    1、创建工程并导包

    2、在src根目录下创建配置文件:hibernate.cfg.xml(也可以创建在src其他文件夹下,但是在后面的配置中,需要指明路径)

      

     1 <?xml version='1.0' encoding='utf-8'?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6 <!-- 是用来描述数据库的连接 -->
     7 <session-factory>
     8     <!-- 驱动 -->
     9     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    10     <!-- url-->
    11     <property name="connection.url">jdbc:mysql://localhost:3306/hibernatetest</property>
    12     <!-- username -->
    13     <property name="connection.username">root</property>
    14     <!-- password -->
    15     <property name="connection.password">mysql</property>
    16 <!-- 
    17         hibernate针对建表的操作
    18           update  如果有表,检查表的结构,如果没有则创建
    19           create-drop 启动hibernate创建表,结束hibernate删除表
    20           create  每次启动都重新创建表
    21           validate 每次启动都检查表的结构
    22      -->
    23     <property name="hbm2ddl.auto">update</property>
    24     <!-- 映射文件 -->
    25     <mapping resource="cn/test/domain/Person.hbm.xml"/>
    26 </session-factory>    
    27     
    28 </hibernate-configuration>

     3、创建持久化层(一般实现Serializable 接口,并且要有一个默认构造函数【在后面反射中需要用到,否者会报错】)

     1 package cn.test.domain;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Person implements Serializable {
     6     private long Pid;
     7     private String Pname;
     8     private String Page;
     9     public long getPid() {
    10         return Pid;
    11     }
    12     public void setPid(long pid) {
    13         Pid = pid;
    14     }
    15     public String getPname() {
    16         return Pname;
    17     }
    18     public void setPname(String pname) {
    19         Pname = pname;
    20     }
    21     public String getPage() {
    22         return Page;
    23     }
    24     public void setPage(String page) {
    25         Page = page;
    26     }
    27 }

     4、创建映射文件,一般和持久化层在同一个文件夹下,命名方式一般为:持久化层类名.hbm.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <!-- 
     6         class元素是用来描述持久化类
     7            name属性  类的全名
     8             table 该类对应的表名  可以不写,如果不写默认值就是类名
     9             catalog 数据库的名字  一般不用写
    10      -->
    11      <class name="cn.test.domain.Person" table="person">
    12          <!-- 
    13             主键
    14               name描述的是属性的名称
    15               column  数据库的字段的名称
    16               type    类型
    17               length  长度
    18          -->
    19          <id name="Pid" type="java.lang.Long" length="5">
    20              <column name="pid"></column>
    21              <!-- 
    22                 主键的产生器
    23                     increment 由hibernate产生
    24              -->
    25              <generator class="increment"></generator>
    26          </id>
    27          
    28          <!-- property是用来描述一般属性     -->
    29          <property name="Pname" type="java.lang.String" length="5">
    30              <column name="Pname"></column>
    31          </property>
    32          <!-- column可以不写,如果不写,默认属性的名称 -->
    33          <property name="Page" type="java.lang.String" length="5"></property>
    34      </class>
    35 </hibernate-mapping>

     4、测试

      

     1 public class MyTest {
     2     private static SessionFactory sessionFactory;
     3     static{
     4         Configuration configuration=new Configuration();
     5         //加载配置文件
     6         configuration.configure();
     7         //采用工厂模式创建SessionFactory
     8          sessionFactory=configuration.buildSessionFactory();
     9     }
    10     @Test
    11     public void testSave(){
    12         Session session=sessionFactory.openSession();
    13         //开启事物
    14         Transaction transaction=session.beginTransaction();
    15         Person person=new Person();
    16         person.setPname("张三");
    17         person.setPage("56");
    18         session.save(person);//保存
    19         transaction.commit();//提交事务
    20         session.close();
    21     }
    22     
    23     @Test
    24     public void testUpdate(){
    25         Session session=sessionFactory.openSession();
    26         Transaction transaction=session.beginTransaction();
    27         //方法一:推荐;先获取要更新的对象,再更新
    28         Person person=(Person) session.get(Person.class, 1L);//获取原来的值
    29         person.setPage("100");
    30         session.update(person);//更新
    31         
    32         //方法二:不推荐;创建一个新的对象,覆盖旧的数据
    33 //        Person person=new Person();
    34 //        person.setPid(1L);
    35 //        person.setPage("101");
    36 //        session.update(person);
    37         transaction.commit();
    38         session.close();
    39     }
    40     
    41     @Test
    42     public void testQuery(){
    43         Session session=sessionFactory.openSession();
    44         List<Person> list= session.createQuery("from Person").list();
    45         System.err.println(list.size());
    46     }
    47     
    48     @Test
    49     public void testQueryById(){
    50         Session session=sessionFactory.openSession();
    51         long l=1;
    52         Person person= (Person) session.get(Person.class, l);
    53         System.err.println(person.getPname()+"**********"+person.getPage());
    54     }
    55     
    56     @Test
    57     public void testDelete(){
    58         Session session=sessionFactory.openSession();
    59         Transaction transaction=session.beginTransaction();
    60          //方法一:
    61 //        Person person= (Person) session.get(Person.class, 1L);
    62 //        session.delete(person);
    63         //方法二:
    64         Person person=new Person();
    65         person.setPid(1L);
    66         session.delete(person);
    67         transaction.commit();
    68         session.close();
    69     }
  • 相关阅读:
    最长递增长度 (最长上升子序列)
    完全背包问题
    vue中使用el-tabs组件遇到的问题
    ORACLE中排序的时候空值处理
    ORA-01089数据库无法正常关闭
    Oracle中的LPAD和RPAD的使用
    Oracle中Translate函数的使用
    通过对照表快速建view
    Oracle数据库create or replace
    打字网站
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4214982.html
Copyright © 2020-2023  润新知