Hibernate(开放源代码的对象关系映射框架)对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
搭建环境和基本操作流程
1、导jar包(这没什么好说的)
2、编写hibernate.cfg.xml,hibernate的主配置文件,最好就用这个名字
<hibernate-configuration>
<session-factory> <!-- 数据库连接 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.username">root</property>
<property name="hibernate.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 数据库方言 -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 自动建表 -->
<property name="hibernate.show_sql">true</property> <!-- 显示sql -->
<property name="hibernate.format_sql">true</property> <!-- sql格式化显示 -->
<mapping resource="com/woniuxy/mapper/User.hbm.xml"/> <!-- 映射mapper -->
</session-factory>
</hibernate-configuration>
3、编写子xml,真正实现orm的关键,一般取名pojo.hbm.xml
如:User.hbm.xml
<hibernate-mapping package="com.woniuxy.pojo">
<class name="User" table="user">
<id name="uid" column="uid">
<generator class="native"></generator><!-- 设置not null and auto_increment -->
</id>
<property name="uname" column="uname" type="string" length="20"></property>
<!-- 设置字段类型和长度 -->
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
当然这种xml的配置方式并不是我们擅长的,可以用注解代替部分xml
首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar
ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar
下面是不同的地方:
(1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:
即把:<mapping resource="com/woniuxy/mapper/User.hbm.xml"/>
改为:<mapping class="com.woniuxy.pojo.User" />
(2):获取SessionFactory方式发生了变化:
即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()
改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()
(3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解,这种映射xml就可以直接扔了。
注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。
(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。
(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。
(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))
(5):表名称可以在实体类前进行注解。
(6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。