hibernate的开发环境配置以及开发步聚
一、开发环境配置:
1.下载:hibernate下载地址
2.配置:将hibernate-release-5.0.6.Final\lib\required下的jar包全部复制到项目的lib文件目录下并将数据库的jar包一起复制进去。将hibernate-release-5.0.6.Final\project\etc下的hibernate.cfg.xml、log4j.properties文件复制到src目录下面。
二、开发步聚:
1.新建一个JavaBean类,并对属性实现get/set方法。
2.配置编写Xxx.hbm.xml文件
3.配置hibernate.cfg.xml文件
简单的实例:
bean类:
public class User implements Serializable {
public int id;
public String name;
public int age;
//还有get/set方法
}
Xxx.hbm.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- name为对应的实体类 table为数据库的表名 --> <class name="com.usc.geowind.lilin.bean.User" table="user"> <id name="id" column="id"> <!-- 自增 --> <generator class="native"></generator> </id> <!-- name值为bean的属性,column为数据库的字段 --> <property name="name" column="name"></property> <property name="age" column="age"></property> </class> </hibernate-mapping>
hibernate.cfg.xml文件的配置:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--配置mysql数据库连接参数 --> <!-- 指定数据库的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 指定数据库所用的驱动 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 指定链接的数据库的url test为数据库的名字 --> <property name="hibernate.connection.url">jdbc:mysql:///test</property> <!-- 用户名 --> <property name="hibernate.connection.username">root</property> <!-- 密码 --> <property name="hibernate.connection.password">mysql</property> <!-- 根据需求自动创建数据库表 --> <property name="hbm2ddl.auto">update|create</property> <!-- 罗列所需的影射文件 --> <mapping resource="com/usc/geowind/lilin/bean/User.hbm.xml" /> <!-- c3p0配置 --> <!-- 配置C3P0连接池属性 --> <!-- 此句必须加,很重要 不添加无法使用c3p0 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- 设置连接池的最大数量 --> <property name="hibernate.c3p0.max_size">10</property> <!-- 设置连接池的最小数量 --> <property name="hibernate.c3p0.min_size">5</property> <!-- 设置连接池链接数据库的时限 --> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.max_statements">10</property> </session-factory> </hibernate-configuration>
这样就能简单的流程也能顺利的运行期=起来了。
简单的单元测试所实现的链接测试:
@Test
public void createTable() {
Configuration configuration = new Configuration().configure();
SchemaExport schemaExport = new SchemaExport(configuration);
// 前一Boolean是表示是否打印在控制台
// 后一Boolean是表示是否删掉之前的重建表
schemaExport.create(true, true);
}
@SuppressWarnings("deprecation")
@Test
public void add() {
// 实例化Configuration对象
Configuration configuration = new Configuration()
// 默认加载.hibernate.cfg.xml文件
.configure();
// 通过configuration对象直接创建buildSessionFactory对象实例,但不提倡使用
// SessionFactory buildSessionFactory =
// configuration.buildSessionFactory();
// 通过StandardServiceRegistryBuilder创建SessionFactory实例对象
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
ServiceRegistry build = ssrb.build();
// 创建SessionFactory对象
SessionFactory sessionFactory = configuration.buildSessionFactory(build);
// SessionFactory打开并回去session对象实例
Session session = sessionFactory.openSession();
// 开启事务
Transaction beginTransaction = session.beginTransaction();
// 封装数据
User user = new User();
user.setAge(22);
user.setName("gaosi");
try {
// 保存数据
session.save(user);
// 提交事务
beginTransaction.commit();
} catch (Exception e) {
// 事务回滚
beginTransaction.rollback();
} finally {
// 关闭并释放session资源
session.close();
}
}
线程绑定session:
通过getCurrentSession方法获取session对象,openSession方法获取对象比较:
前这方法获得的session对象:是根据当前线程去动态获取现有的session对象,而后者则是新建session对象;前者在事务提交活着回滚时候自动关闭,后者则要手动关闭,否则会连接池溢出。
1.在Hibernate.cfg.xml中添加属性:
<!-- 配置session绑定到当前线程上 --> <!--本地事务--> <property name="hibernate.current_session_context_class">thread</property>
<!--全局事务--> <property name="hibernate.current_session_context_class">jba</property>
2.获取session对象:
//通过getCurrentSession方法获取session对象
sessionFactory.getCurrentSession();