一、引入

Hibernate入门2.粗略的品类开荒实例

实体类:User

(1卡塔 尔(阿拉伯语:قطر‎模型不相称(阻抗不匹配卡塔尔国

         那生机勃勃节通过一个简短的种类学习Hibernate项目标配置

    packagecn.csdn.hibernater.domain;

Java面向对象语言,对象模型,其重点概念有:世襲、关联、多态等;数据库是关系模型,其关键概念有:表、主键、外键等。

代码下载 : 链接: 密码: p348

importjava.util.Date;

(2卡塔尔化解办法

1.配置Hibernate环境

public class User {

1、  使用JDBC手工业调换

        
下载Hibernate的jar,将必需的Hibernate大旨类库参与到使用中。那几个jar中hibernate3.jar是不可或缺的宗旨类库文件,其他在lib中的是在hibernate中援用的包,能够有取舍的丰硕。

    private Integer id;

2、  使用ORM(ObjectRelation
Mapping对象关系映射卡塔尔框架来消除,主流的ORM框架有Hibernate、TopLink、OJB。

        
创设Hibernate配置文件:配置文件重大用来配置和数据库相关的风流倜傥对共有参数,比方数据库的UXC60L、客户名、密码、是还是不是创立也许更新表的新闻,这一个音讯对于全体长久化类都以通用的。配置文件能够是hibernate.properties可能是hibernate.cfg.xml.两种艺术任选其风流倜傥或许是整合使用。实际支付的进度中,平日是使用XML文件配置的花样,而且将hibernate.cfg.xml配置文件放在类文件的根目录中。

    private String name;

二、安装配置

大家查阅XML方式配置的Hibernate文件

    private Date birthday;

(1)    下载地址

hibernate.cfg.xml

    public User() {

(2)    将下载目录/hibernate3.jar和/lib下的hibernamte运维时必得的包参加classpath中:antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar

<?xml version=“1.0” encoding=“UTF-8”?>

       super();

基本操作总计:

<!DOCTYPE hibernate-configuration PUBLIC

    }

1卡塔尔国  创制三个实体类User

    “-//Hibernate/Hibernate Configuration DTD 3.0//EN”

    publicUser(Integer id, String
name, Date birthday) {

2卡塔 尔(英语:State of Qatar)  将hibernate所需jar创设到品种中

   
“;

       super();

MySQL的驱动 hibernate3.jar  lib/required/所有jar文件  lib/jpa/jar文件

<hibernate-configuration>

       this.id = id;

3卡塔 尔(英语:State of Qatar)  配置文件hibernate.cfg.xml 或 hibernate.properties

    <session-factory>

       this.name = name;

配备的主导音讯 驱动 url 客户名 密码 方言(可选
平常能够检测到卡塔 尔(阿拉伯语:قطر‎自动创立表格 
将hibernate工作过成人中学发生的sql语句显示出来以至映射文件之处

        <property
name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

       this.birthday =birthday;

<hibernate-configuration>

        <property
name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>

    }

    <session-factory>

        <property
name=“hibernate.connection.url”>jdbc:mysql://localhost:3306/test??useUnicode=true&characterEncoding=utf8</property>

    public IntegergetId() {

       <property
name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>

        <property
name=“hibernate.connection.username”>root</property>

       return id;

       <property
name=“hibernate.connection.url”>jdbc:mysql:///demo</property>

        <property
name=“hibernate.connection.password”>221256</property>

    }

       <property
name=“hibernate.connection.username”>root</property>

        <property
name=“hibernate.show_sql”>true</property>

    public voidsetId(Integer id)
{

       <property
name=“hibernate.connection.password”>1234</property>

       

       this.id = id;

       <property
name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

        <!– 注册全体的ORM映射文件 –>

    }

       <property
name=“hibernate.hbm2ddl.auto”>create</property>

        <mapping
resource=“com/yang/model/mapper/User.hbm.xml”/>

    public StringgetName() {

       <property
name=“hibernate.show_sql”>true</property>

       

       return name;

       <mapping resource=“com/hbsi/domain/User.hbm.xml”/><!–
内定映射文件的职分 –>

    </session-factory>

    }

    </session-factory>

</hibernate-configuration>

    public voidsetName(String name)
{

</hibernate-configuration>

上述配置信息中<hibernate-configuration>成分是hibernate配置文件的根成分,在这里个根成分中有<session-factory>子成分,该子元素三遍有多个<property>成分,那几个事配置hibernate连接数据库的必备新闻。在<session-factory>中得以有五个<maping>元素,每三个<mapper>钦定二个ORM映射文件。

       this.name = name;

4卡塔 尔(英语:State of Qatar)       映射文件—-将实体类映射成二维关系表

   
使用Eclipse开拓Hibernate应用的时候,能够信任一些插件工具来生成都部队分嗲吗,如依据表生成POJO,恐怕是依附POJO生成配置文件、表。那些工具完结的效果与利益仅仅是升高开荒者的频率,而无法确实代表开垦者去观念。学习框架的时候不推荐使用。

    }

取名规范User—-User.hbm.xml

2.创办持久化类和ORM映射文件

    public DategetBirthday() {

<hibernate-mapping

   
长久化类和JavaBean差不离,不过若是有其余的非私下认可的构造函数的话,须要声可瑞康(Karicare卡塔尔个默许的构造函数,同一时候对于每一个属性增多getter和setter方法,提出将持久化类和器对应的ORM映射文件放在同叁个索引。

       return birthday;

    package=“com.hbsi.domain”>—内定Java实体类的包名

    对于映射文件,命名规范是ModelName.hbm.xml

    }

    <class name=“User”
table=“user”>—-表明实体类怎么样映射成二维表

User.hbm.xml

    public voidsetBirthday(Date
birthday) {

       <id name=“id”column=“id”>

<?xml version=“1.0” encoding=“UTF-8”?>

       this.birthday =birthday;

           <generator class=“native”/><!–
native主键的生成器  自动拉长 –>

<!DOCTYPE hibernate-mapping PUBLIC

    }

       </id>

    “-//Hibernate/Hibernate Mapping DTD 3.0//EN”

    @Override

       <property name=“name”not-null=“true”/><!–
映射普通的java属性 –>

    “;

    public StringtoString() {

       <property name=“birthday”not-null=“true”/>

<hibernate-mapping>

       return “User[id=” + id + “,
name=” + name + “,birthday=” + birthday

    </class>

    <class name=“com.yang.model.User” table=“user”>

              +”]”;

</hibernate-mapping>

        <id name=“id” column=“id”>

    }

5卡塔 尔(阿拉伯语:قطر‎ 写Java代码达成指标的保存

            <generator class=“native”/>

}

public static void main(String[] args) {

        </id>

Hibernatep.cfg.xml配置文件:

    // TODO Auto-generated method stub

        <property name=“userName” column=“username”
type=“string” not-null=“true”/>

<!DOCTYPE hibernate-configuration
PUBLIC

    //使用Hibernate达成将指标存入表中。

        <property name=“password” column=“password”
type=“string” not-null=“true”/>

    “-//Hibernate/Hibernate Configuration
DTD 3.0//EN”

    Configuration cfg=new Configuration();

    </class>

   
“;

    cfg.configure();//用来达成Hibernate的最早化–读取配置文件

</hibernate-mapping>

 

    //sessionFactory对象—DriverManager

3.行使Configuration装载配置新闻

<hibernate-configuration>

     SessionFactorysf=cfg.buildSessionFactory();

   
每三个布局文件对应一个Configuration对象,代表多少个应用程序导数据库的映照配置。依据Hibernate使用的配置文件的差异,创设Configuration对象的艺术也是例外的。平日接纳hibernat.cfg.xml作为hibernate的安顿文件,然后依照陈设文件出特别减Configuration对象:

<!– 设置二个特定数据库的厂子
–>

     //通过sessionFactory得session对象

//实例化Configuration

    <session-factory>

    Session session=sf.openSession();

Configuration configuration = new Configuration();

<!– 设置连接数据库音信 –>

     Transactiontx=session.beginTransaction();

//加载hibernate配置消息configuration.configure(ClassLoader.getSystemResource(“hibernate.cfg.xml”));

       <property
name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>

   

   
Configuration对象的法力是读取配置文件同有时候创立SessionFactory对象。平日二个应用程序会成立一个Configuration,在创立唯风姿浪漫的SessionFactory实例。这就象征Configuration对象只设有于系统的开端化阶段,然后全体的持久化操作都以透过SessionFactory实例来成功的。

       <property
name=“hibernate.connection.url”>jdbc:mysql:///hibernate</property>

     Useruser=new User();

4.利用SessionFactory创建Session

       <property
name=“hibernate.connection.username”>root</property>

    user.setName(“Tom”);

   
SessionFactory对象时Hibernate实行长久化的总得对象,该指标是全体数据库映射关系经过编写翻译之后形成的内存镜像。Configuration对象提供贰个buildSessionFactory,创立二个Sessionfactory实例,并且SessionFactory的实例是不可能改造的。

       <property
name=“hibernate.connection.password”></property>

     user.setBirthday(new Date());

//创建Sessionfactory实例

<!– 设置方言 –>

    

SessionFactory sessionFactory =
configuration.buildSessionFactory();

       <property
name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

    session.save(user);

//Configuration对象会遵照布置文件的情约束造SessionFactory实例,豆蔻梢头旦创设实现,他将包罗配置音信,之后任何对于configuration实例的更改都不会潜移暗化到曾经构建的sessionFactory实例。SessionFactory实例的坚守是生成Session对象,调用Sessionfactory对象中的getCurrentSession()或是openSession()都会回的二个Session对象。

<!– 设置自动生成数据库  –>

    tx.commit();

Session session= sessionFactory.openSession();

       <property
name=“hibernate.hbm2ddl.auto”>create</property>

     session.close();

5.使用Session操作数据库

<!– 展现生成数据库的sql语句 –>

     System.out.println(“end”);

   
Session对象时Hibernate悠久化操作的重大指标,是Hibernate悠久化操作的根底,是应用程序和数据库之间相互的叁个单线程对象。长久化对象的生命周期、事务管理、对象的查询、更新和删除都以经过Session达成的。Session对象封装了JDBC连接,本人就有贰个一流的缓存,在彰显履行flush方法以前,全部的持久化操作数据都以保存在Session对象的缓冲中。

       <property
name=“hibernate.show_sql”>true</property>

}

Session中的接口方法:

<!–
设置实体类与数据库映射的布署文件路线 –>

 

    save() 保存长久化对象,在数据库中增添一条记下

       <mapping
resource=“cn/csdn/hibernater/domain/User.hbm.xml”/>

}

    get()
获取数据库中的一条记下,若无找到相符条件的持久化对象的时候回来null

    </session-factory>

或然现身的难题

   
load()获取数据库中的一条记下,没有找到抛出非常(HibernateException卡塔 尔(阿拉伯语:قطر‎,别的get是在Hibernate超级缓存中询问,找不到在去数据库中寻找;而load是在一级缓存中找不到还有只怕会去二级缓存中查究,找不到的话再去数据库中搜索。

</hibernate-configuration>

(1卡塔尔国  驱动找不到

    update()更新数据库中对应的多寡

User.hbm.xml配置文件:

(2卡塔 尔(阿拉伯语:قطر‎      Unknown
entity:不认得User实体类。原因在配置文件未有一点名映射文件的岗位

    delete()删除数据库中的一条对应的笔录

    <?xml version=“1.0”?>

<mapping resource=”com/hbsi/domain/User.hbm.xml”/>

6.Transaction事务管理机制

<!DOCTYPE hibernate-mapping
PUBLIC

                   (3)Table”demo.user”doesnot exist:

   
Transaction对象主要用以管理专门的工作,全参谋长久化操作都亟需在事务处理下进展。Transaction通过架空将应用程序从底层的JDBC,JTA以致CORBA事务中隔开分离开,允许开拓人士使用叁个统大器晚成的东西操作让投机的种类可以在不一样的碰着和容器之间迁移。

    “-//Hibernate/Hibernate Mapping DTD
3.0//EN”

                   Createtable user(id int auto_inctrment;name
varchar(20); birthday date;)

    通过Session中的beginTransaction()方法得到三个Transaction对象实例

   
“;

                   在配置文件中扩充安顿:

    Transaction接口中的方法首要是

    <!– 映射的标记 和数据库字段连接
–>

<propertyname=”hibernate.hbm2ddl.auto”>create</property>

        commit():提交业务

   
<!–后生可畏对class标签将大器晚成段java类映射成关周全据库中的一张二维表
–>

Create-drop:在hibernate举办带头化时会创造表,程序运维结束时表格就能够被剔除

        rollback()回滚事务

<hibernate-mapping
package=“cn.csdn.hibernater.domain”>

Create:在hibernate早先化时会成立表格。何况会在下三回运维时将原先的删减在建新的。

    Transaction trans = session.beginTransaction();

    <!–
生机勃勃对class标签将大器晚成段java类映射成关周全据库中的一张二维表 –>

Update:只是依据映射文件去和数据库中的表对应起来,假若不相符就更新表

    //八个悠久化操作

    <!– 缺省table 声明和类名是如出生机勃勃辙的
–>

Validate:校验映射文件和数据库中的表是或不是能够对应起来,不可能对应报错,实际中常用。

    。。。。

    <class
name=“User” table=“user”>

(4卡塔 尔(英语:State of Qatar)      表格建好了,但报表中并没有记录

    //提交事务

    <!– 将java类中的属性映射成表的字段
–>

Insert  session.save(user)

    trans.commit();

    <!– column=”id”
能够缺省,id是目的中的id
name属性是java的类中作为主键的应和的习性,映射为表中的列名,当列名和性格名同一时间,能够缺省
–>

<property name=”show_sql”>true</property>

率先次实行,即使数据库中一向不应该表。那么Hibernate会依据布署文件和照耀文件的音信自动生成八个相应的表,以后又一次施行更新的时候也会更新对应的表,因为在布局文件中增添了

       <id name=“id”>

唯恐是事情回滚

<property name=”hibernate.hbm2ddl.auto” >update</property>

           <!– 消除主键的生成器classs中 native是主键的生成器 自动zengz –>

Transaction tx=Session.beginTransaction();

整理代码:

           <generator
class=“native” />

Tx.commit();

hibernate.cfg.xml

       </id>

图片 1

<?xml version=“1.0” encoding=“UTF-8”?>

       <property
name=“name” />

<!DOCTYPE hibernate-configuration PUBLIC

       <property
name=“birthday” />

    “-//Hibernate/Hibernate Configuration DTD 3.0//EN”

    </class>

   
“;

</hibernate-mapping>

<hibernate-configuration>

测试类:

    <session-factory>

package cn.csdn.hibernate.test;

        <property
name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

import java.util.Date;

        <property
name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>

import org.hibernate.Session;

        <property
name=“hibernate.connection.url”>jdbc:mysql://localhost:3306/test??useUnicode=true&characterEncoding=utf8</property>

import org.hibernate.SessionFactory;

        <property
name=“hibernate.connection.username”>root</property>

import org.hibernate.Transaction;

        <property
name=“hibernate.connection.password”>221256</property>

import org.hibernate.cfg.Configuration;

        <property
name=“hibernate.show_sql”>true</property>

import cn.csdn.hibernater.domain.User;

        <property
name=“hibernate.hbm2ddl.auto”>update</property>

public class Test {

       

   public static void main(String[]
args) {

        <!– 注册全部的ORM映射文件 –>

// 使用Hibernate实现将指标存入到表中

        <mapping resource=“com/yang/model/mapper/User.hbm.xml”/>

      // Configuration ���负担管理 Hibernate 的布置音信

       

      Configuration cfg
new Configuration();

    </session-factory>

      cfg.configure();// 用来成功Hibernate的初步化—用来读取配置文件中的消息,能够内定安插文件的职责

</hibernate-configuration>

                
//cfg.configure(“”);

User.java

      //
获得sessionFactoroy的工厂对象,约等于DirverManager,

package com.yang.model;

      SessionFactory sf =
cfg.buildSessionFactory();

 

      //
通过sessionFactory获得session,与对话中的session没有提到

public class User {

      Session s = sf.openSession();

    private int id;

      // 开启事物

    private String userName;

      Transaction tx =
s.beginTransaction();

    private String password;

      // 得到User对象

   

      User user = new User();

    public User(){}

      user.setName(“Tom”);

    public User(String userName, String password){

     
user.setBirthday(new Date());

        this.userName = userName;

      s.save(user);

        this.password = password;

      tx.commit();// 提交事物

    }

      s.close();

    //属性的getter & setter 方法

      System.out.println(“end”);

    public int getId(){ return this.id; }

   }

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

}

    public String getUserName(){ return this.userName;}

图片 2

    public void setUserName(String userName){this.userName =
userName;}

    public String getPassword(){return this.password;}

    public void setPassword(String password){ this.password
= password;}

}

User.hbm.xml

<?xml version=“1.0” encoding=“UTF-8”?>

<!DOCTYPE hibernate-mapping PUBLIC

    “-//Hibernate/Hibernate Mapping DTD 3.0//EN”

    “;

<hibernate-mapping>

    <class name=“com.yang.model.User” table=“user”>

        <id name=“id” column=“id”>

            <generator class=“native”/>

        </id>

        <property name=“userName” column=“username”
type=“string” not-null=“true”/>

        <property name=“password” column=“password”
type=“string” not-null=“true”/>

    </class>

</hibernate-mapping>

TestMain.java

package com.yang.main;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

 

import com.yang.model.User;

 

public class TeatMain {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        User user = new User(“liang”,”huihui”);

        //实例化Configuration

        Configuration configuration = new Configuration();

        //加载hibernate配置音讯

       
configuration.configure(ClassLoader.getSystemResource(“hibernate.cfg.xml”));

        //创建Sessionfactory实例

        SessionFactory sessionFactory =
configuration.buildSessionFactory();

       
//Configuration对象会基于布署文件的内容成立SessionFactory实例,大器晚成旦营造实现,他将满含配置音讯,之后任何对于configuration实例的校正都不会影响到已经营造的sessionFactory实例

        Session session= sessionFactory.openSession();

       

        Transaction trans = session.beginTransaction();

        session.save(user);

        trans.commit();

        session.close();

    }

}

7.利用Query进行HQL查询

Query能够行使HQL、SQL等语句查询数据库中的数据,HQL(Hibernate Query
Language)是样子对象的查询语言,有以下特点:

    扶助各类条件查询、连接查询、子查询

   
协助分页、分组查询;纸质各样聚焦函数和自定义函数;协理动态绑定查询函数。

Query query=session.createQuery(“from User”);

里面包车型客车参数是HQL语句,表示读取的是User类型的靶子,将User对应的表中的数据封装成为User对象到List会集中。

Query query = session.createQuery(“from User”);

List<User> listUsers = query.list();

for(User user: listUsers){

    System.out.println(user);

}

当然这里只是简短地HQL语句,会有更加的详细的关于HQL语句的就学。

8运用Criteria实行规范化查询

   
这些Criteria和query十三分相仿,他是通过Session对象的createCriteria()方法创立的

    Criteria criteria = session.createCriteria(User.class);

 

YangTengfei

2013.11.27

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注