zoukankan      html  css  js  c++  java
  • Hibernate的简单示例

    首先我们新建一个项目,Java项目或者是Javaweb项目都可以,然后把hibernate需要的jar导入,我用的jar包如下:

    然后新建一个实体类Teacher.java并添加get和set方法:

     1 public class Teacher {
     2     private String username;
     3     private String password;
     4     private int age;
     5     public String getUsername() {
     6         return username;
     7     }
     8     public void setUsername(String username) {
     9         this.username = username;
    10     }
    11     public String getPassword() {
    12         return password;
    13     }
    14     public void setPassword(String password) {
    15         this.password = password;
    16     }
    17     public int getAge() {
    18         return age;
    19     }
    20     public void setAge(int age) {
    21         this.age = age;
    22     }
    23 }

    在Hibernate中一个实体类对应一个.hbm.xml文件,因此我们新建一个Teacher.hbm.xml文件,内容如下:

     1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5 
     6 <hibernate-mapping package="com.hibernate.domain">
     7     
     8     <class name="Teacher" table="Teacher">
     9          <id name="username" type="java.lang.String" column="username">
    10             <generator class="assigned"/>
    11         </id> 
    12         <property name="password" type="java.lang.String" column="password" length="50"/>
    13         <property name="age" type="int" column="age" length="10"/>
    14     </class>
    15     
    16 </hibernate-mapping>

    其中第9-11行代表的是主键的配置,name是指实体类中的字段,而column则是指数据库中相对应的字段。<genetator>中的class="assigned"代表主键非自动增长。下面的<property>则是配置的非主键。此文件和实体类在同一个包中。

    之后我们需要在src目录下新建一个hibernate.cfg.xml文件,并将实体类对应的Teacher.hbm.xml文件导入,代码如下:

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <!-- 配置数据库信息 --> 
     8         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
     9         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    10         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    11         <property name="connection.username">root</property>
    12         <property name="hibernate.connection.password"></property>
    13 
    14     
    15         <!-- 导入映射文件--> 
    16         <mapping resource="com/hibernate/domain/Teacher.hbm.xml"/>
    17     </session-factory>
    18 </hibernate-configuration>

    第7-12行为配置数据库的基本信息,当然大家用的时候需要改一下11、12行,改成自己数据库对应的用户名和密码。

    接下来我们写一个查询的方法和插入的方法TeacherDao.java:

     1 public class TeacherDao {
     2     //读取配置文件
     3     Configuration congif = new Configuration().configure();
     4     //创建sessionFactory
     5     SessionFactory sf = congif.buildSessionFactory();
     6     //创建session
     7     Session session = null;
     8     //创建事务(Hibernate必须用事务)
     9     Transaction tx = null;
    10     //插入一条数据
    11     public void insert(Teacher teacher) {
    12         try {
    13             //打开session
    14             session = sf.openSession();
    15             //开启事务
    16             tx = session.beginTransaction();
    17             //进行持久化操作(添加,删除,更新)
    18             session.save(teacher);
    19             //提交事务
    20             tx.commit();
    21         } catch (Exception e) {
    22             //事务回滚
    23             tx.rollback();
    24         } finally {
    25             if (session != null)
    26                 session.close();
    27         }
    28 
    29     }
    30     //查询数据
    31     public List<Teacher> find(String hql) {
    32         List<Teacher> teacher=new ArrayList<Teacher>();
    33         try {
    34             session = sf.openSession();
    35             tx = session.beginTransaction();
    36             //使用hql语句进行查询
    37             Query query=session.createQuery(hql);
    38             //返回list
    39              teacher=query.list();
    40             tx.commit();
    41         } catch (Exception e) {
    42             tx.rollback();
    43         } finally {
    44             if (session != null)
    45                 session.close();
    46         }
    47         return teacher;
    48   }
    49 }

    当然如果我们的src目录下的hibernate.cfg.xml名称不为这个,则在第3行读取配置文件的时候需要加上配置文件的路径。我们来看一下文件的目录结构:

    我们在Test.java类中进行测试,代码如下:

     1 public class Test {
     2 
     3     public static void main(String[] args) {
     4         /**
     5          * 利用Hibernate的save方法进行持久化操作
     6          */
     7         Teacher t=new Teacher();
     8         t.setUsername("username4");
     9         t.setPassword("root4");
    10         t.setAge(20);
    11         TeacherDao dao=new TeacherDao();
    12         dao.insert(t);
    13         /**
    14          * 使用hql语句进行查询
    15          * @return:将返回结果的username在控制台输出
    16          */
    17         String hql="from Teacher";
    18         List<Teacher> teacher=dao.find(hql);
    19         for (int i = 0; i < teacher.size(); i++) {
    20             System.out.println(teacher.get(i).getUsername());
    21         }
    22     }
    23 
    24 }

    当然不要忘记数据库中的表,我们可以根据Teacher.java中的字段建立,完成之后我们就可以在Test.java中运行一下看看结果了。

  • 相关阅读:
    Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/...
    Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/...
    Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/...
    Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/...
    eclipse c++ 经常使用快捷键
    eclipse c++ 经常使用快捷键
    eclipse c++ 经常使用快捷键
    eclipse c++ 经常使用快捷键
    Java集合的遍历方式
    阿里五年老将的创业故事
  • 原文地址:https://www.cnblogs.com/xwlych/p/6018297.html
Copyright © 2011-2022 走看看