Hibernate持久层框架使用【一】配置hibernate

记录一下hibernate框架的使用

一、下载Hibernate

从官网下载hibernate,解压后可以看到这么几个文件夹

documentation——hibernate的帮助文档

lib——hibernate的依赖包

project——hibernate的示例项目

首先新建一个java项目,打开lib文件夹,将required文件夹下的所有jar包以及jap文件夹下的jar包拷贝到项目下作为依赖

除了这些必须的jar包外,还可以根据需求,拷贝其他jar包,例如optional文件夹下可选的jar包,如:c3p0连接池、echcache缓存等等。。。

接下来就是配置文件了,打开project文件夹下的etc文件夹,里面有一些配置文件,这里拷贝这两个hibernate配置文件放到src路径下

hibernate可以有两种方式进行配置,一种是使用xml文件的方式,另一种则是使用properties文件了。

先写一下xml文件的配置方式

打开hibernate.properties文件,可以看到里面的很多配置,Ctrl+F查找一下mysql的配置,可以看到下面这几行

## MySQL

#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password

这说明要使用mysql数据库进行连接,则需要使用上面这些配置(前面为key,空格后为配置的值)。

说明一下这些配置的含义:

hibernate.dialect——表示使用的数据库方言,这里有多个值,只选一种就可以了

hibernate.connection.driver_class——数据库驱动

hibernate.connection.username——用户名

hibernate.connection.password——密码

除了数据库的配置外,还要再配置一下表的生成模式,同样Ctrl+F查找schema

有如下配置

## auto schema export

#hibernate.hbm2ddl.auto create-drop
#hibernate.hbm2ddl.auto create
#hibernate.hbm2ddl.auto update
#hibernate.hbm2ddl.auto validate

hibernate.hbm2ddl.auto配置的值:

create-drop——表示创建sessionFactory时创建表,sessionFactory关闭时删除表

create——每次sessionFactory创建时创建表

update——sessionFactory创建时创建表,存在表则不创建

validate——校验

将这些配置写到刚刚拷贝的xml文件里

xml文件中加了两个配置

hibernate.show_sql(显示sql语句)和hibernate.format_sql(格式化sql语句),值为true表示启用

下面是完整的配置文件,c3p0连接池和缓存配置根据需要加入

<!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数据库配置 -->
	<!-- 用的是5.0以上的数据库驱动,
	把org.hibernate.dialect.MySQLInnoDBDialect换成
	org.hibernate.dialect.MySQL5InnoDBDialect -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">123456</property>
	
	<!-- c3p0连接池配置 -->
	<property name="hibernate.c3p0.max_size">10</property>
	<property name="hibernate.c3p0.min_size">2</property>
	<property name="hibernate.c3p0.timeout">5000</property>
	
	<!-- 显示_格式化sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<property name="hibernate.format_sql">true</property>
	
	<!-- 表生成模式 -->
	<!-- create-drop : 创建sessionFactory时创建表,sessionFactory关闭时删除表 -->
	<!-- create : 每次sessionFactory创建时创建表 -->
	<!-- update : sessionFactory创建时创建表,存在表则不创建 -->
	<!-- validate : 验证 -->
	<property name="hibernate.hbm2ddl.auto">update</property>
	
	</session-factory>
</hibernate-configuration>

配置完成,下面是数据库表和类的映射,新建一个User类来对应数据库中的一张表

@Entity(name="tb_user")
//@Table(name="tb_user")
public class User {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "user_id")
	private int id;
	private String name;
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

User类中的一些注解说明:

@Entity(name="tb_user")——表示此类作为一张表,name的值作为类名(也可不指定,以类名作为表名)

@Id——这个注解必须要加,将被注解的字段作为表的主键

@GeneratedValue(strategy = GenerationType.IDENTITY)——主键生成策略,strategy的值为自增长

@Column(name = "user_id")——申明被注解的字段对应数据库的字段名,name的值为数据库的字段名

再来建个test类测试一下

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//加载配置文件
		Configuration configuration = new Configuration().configure();
		
		//获得服务注册对象
		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties()).build();
		
		//定义一个SessionFactory对象
		SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		//SessionFactory sessionFactory = configuration.buildSessionFactory();
			
		//获得Session
		Session session = sessionFactory.openSession();
		
		//开启事务
		Transaction transaction = session.beginTransaction();
		
		//提交事务
		transaction.commit();
		
		//关闭资源
		session.close();
		sessionFactory.close();
	}
}

test类中被注释掉的SessionFactory sessionFactory = configuration.buildSessionFactory();这一句虽然已经被淘汰了,但还是可以使用,使用这句代码则不需要拿到服务注册对象

最后,还要在配置文件中配置好映射,把User表对应的位置添加到mapper中

<!-- 添加映射 -->
<mapping class="com.fws.domain.User"/>

运行test类,可以看到数据库中多了一张叫做tb_user的表

猜你喜欢

转载自blog.csdn.net/weixin_39885435/article/details/82808047