一、了解Hibernate
O/R Mapping指的对象关系映射,实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化;使用元数据描述对象与数据库间的映射。
1.下载资源:www.hibernate.org
2、资源介绍hibernate-release-4.3.10.Final
a)Documentation 相关文档
b)Lib 相关jar包
c)Project相关资源文件,模板文件,源码等
3、搭建hibernate环境:
a)新建一个java项目
b)导入相关jar包
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.10.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
mysql-connector-java-5.1.20-bin.jar
二、hibernate配置
- 设置基本的hibernate配置文件(文件名默认为hibernate.cfg.xml)
<hibernate-configuration>
<session-factory>
<!--显示实际操作数据库时的SQL-->
<property name="show_sql">true</property>
<!--SQL方言,这边设定的是MySql-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--JDBC驱动程序-->
<property name="connection.drive_class">conn.musql.jdbc.Drive</property>
<!--JDBC URL-->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!--数据库使用者-->
<property name="connectiuon.username">caterpillar</property>
<!--数据库密码-->
<property name="connection.password">123456</property>
<!--对象与数据库表格映像文件-->
<mapping resourse="com/svse/pojo/User.hbm.xml">
</session-factory>
<!--以下是争对oracle-->
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- 显示正在执行的数据库操作 -->
<property name="show_sql">true</property>
<!-- 描述映射文件的路径 -->
<mapping resource="com/svse/pojo/Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
三、实体类的配置xml
- 对用实体类的User.hbm.xml
<hibernate-mapping>
<class name="com.svse.User" table="User">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<!--如果上面方式报错就按下面的方式来-->
<id name="userid">
<generator class="sequence">
<param name="sequence">seq_users</param>
</generator>
</id>
<property name = "name" coloum="name" type="java.lang.String" />
<property name="age" coloum="age" type="java.lang.Integer" />
</class
</hibernate-mapping>
四、撰写第一个hibernate
- 现在我们来撰写一个测试的程序
- 方法一:
public class Testhibernate{
public static void main(Stringp[] args){
//configuration 负责管理 Hibernate 配置信息
Configuration config = new Configuration().configure();
//根据config建立SessionFactory
//SessionFactory将用于建立Session
SessionFactory sessionFactory = config.buildSessionFactory();
//将持久化的对象
User user = new User();
user.setName("wangxi");
user.setAge(new Integer(30));
//开启session 相当于开启JDBC的Connection
Session session = sessionFactory.openSession();
//Transaction表示一组对DB的交易
Transaction tx = session.beginTransaction();
//将对象映像至数据表格中储存
session.save(user);
tx.commit;
session.close;
sessionFactory.close();
System.out.println("新增资料OK!请先用MySQL观看结果");
}
}
- 方法二
public static void main(String[] args){
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = confi.buildSessionFactory();
Ss=ession session = sessionFactory.openSession();
//使用HQL建立查询--1
Query query = session.createQuery("from User");
List users = query.list();
Iterator iterator = users.iterator();
<!--hasNext:没有指针下移操作,只是判断是否存在下一个元素-->
while(iterator.hasNext()){
User user = (User)iterator.next();
}
//使用HQL建立查询--2
query = session.CreateQuery("from User user where user.name like ?");
//设定查询参数
query.setParameter(0,"wangxi");
users = query.list();
iterator = users.iterator();
while(iterator.hasNext()){
<!--next:指针下移,返回该指针所指向的元素-->
User user = (User) iterator.next();
System.out.println(user.getId() + " \t " + user.getName() +user.getAge());
}
session.close();
sessionFactory.close();
}
以上测试相当于: