Hibernate自学
一、Hibernate
是数据库访问层的框架,解决了数据库数据与对象的映射问题,是针对数据库提出的面相对象的解决方案。
二、主配置文件
hibernate.cfg.xml:
<hibernate-configuration> <session-factory>----配置数据库连接参数 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.password">089024033</property> <property name="connection.url">jdbc:mysql:///dbfantasy?useUnicode=true&characterEcoding=utf8</property> <property name="connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> -------hibernate框架参数 <property name="show_sql">true</property> <property name="format_sql">true</property>
<property name="hibernate.Current_session_content_class">thread</property>// jta全局事务,getCurrentSession()时使用
-------映射关系文件
<mapping resource="entity/Person.hbm.xml"/>
<mapping resource="entity/Department.hbm.xml"/>
<mapping resource="entity/Emp.hbm.xml"/>
</session-factory>
</hibernate-configuration>
三、映射关系文件
创建实体类后配置该实体类的映射关系文件
<hibernate-mapping package="entity">
----------类与表对应 <class name="Person" table="person" lazy="false">
-----------主键生成方式 <id name="id" type="integer" column="id"> <generator class="native"></generator> </id>
-----------类属性对应到表字段 <property name="name" type="java.lang.String" > <column name="NAME" length="30"/> </property>
<property name="birth" type="date" column="BIRTH"></property>
-----------一对多关联 <set name="cliampltnps" inverse="true"> <key> <column name="AR_ID" not-null="true"> -------外键列名 </key> <one-to-many class="xx.Cliampltnps" />
</set>
-------------多对一关联
<many-to-one name="ar" class="xx.Ar" fetch="join/select" >
<column name="AR_ID" />
</many-to-one>
</class>
</hibernate-mapping>
四、获取Session执行hql操作
Configuration con = new Configuration().configure(); ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(con.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = con.buildSessionFactory(sr); Session session = sessionFactory.openSession();// 每次获取的都是新的session,要手动关闭
Session session = sessionFactory.getCurrentSession();// 每次获取的都是同一个session,commit或rollback后自动关闭,绑定在线程上的,需在cfg.xml中加配置
// 执行增删改查
session.save(obj)/.update(obj)/.delete(obj);
session.get(E.class,pk);
// 当session开启事务时,相当于setAutoCommit(false),操作会保存在内存中,当session关闭时才写入数据库
Transcation tx = session.beginTranscation();
...
tx.commit();
session.close();
五、HQL
hibernate query language,对类名和类的属性名大小写敏感。
//使用hql查询时返回实体类: List<Emp> list = session.createQuery(sql).list(); Emp emp = it.hext(); //使用sql查询时需指定每一个返回字段: List<Object[]> list = session.createSALQuery(sql).addScalar("name",Hibernate.String)... .list(); //返回的每个元素都是字符串组成的数组; Object[] obj = it.next(); //分页查询:hibernate行数从0开始,设置起始页和条数 query.setFirstResult(FROM); query.setMaxResults(PAGESIZES);

浙公网安备 33010602011771号