ssh学习:hibernate环境配置及开发步聚

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();

相关推荐