首页 > 经验记录 > hibernate初体验,配置和测试

hibernate初体验,配置和测试

因为公司的持久层使用的是 hibernate ,而我会的持久层框架只会 mybatis 。故自学一波
 
什么是 hibernate 框架
1、hibernate 一般使用在 javaee 三层架构中的 dao 层(持久化层)。
2、在 dao 层里面做对数据库的 crud 操作,使用 hibernate 实现 crud 操作,它的底层代码就是 JDBC 。hibernate 对 JDBC 进行封装,好处是不需要写复杂 JDBC 代码、不需要写 sql 语句实现。
3、开源、轻量级
 
正式使用
首先创建个项目,然后导入一堆 jar 包。话说我用惯了 IDEA ,还用 springboot 一键配置完了,突然切回 eclipse 用传统方式还真有些别扭。
 
然后创建一个实体类,用于映射表一条数据。
在 hibernate 中,你甚至可以没有表。。。它自动给你创建,只需要在配置文件写好就OK了。
我写了个 User 类:

package top.yibobo.entity;
import java.io.Serializable;
public class User implements Serializable{
	private int uid;
	private String username;
	private String password;
	private String address;
	public User(int uid, String username, String password, String address) {
		super();
		this.uid = uid;
		this.username = username;
		this.password = password;
		this.address = address;
	}
	public User() {
		super();
	}
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", address=" + address + "]";
	}
}

 
 
在这之后,自然是需要配置 XML 了,用于映射实体类和表的关系, eclipse 配置 XML 是有点恶心哈。
一般都有默认的规范: 类名.hbm.xml,所以我的映射文件叫 User.hbm.xml
这个映射文件放哪都行,反正要在 hibernate 的核心配置文件指定位置的。

<?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>
	<!-- 配置类和表的映射
		class标签
		name属性:实体类全路径
		table属性:数据库表名称
	 -->
	<class name="top.yibobo.entity.User" table="user_">
		<!-- 配置实体类id和表id对应 -->
		<id name="uid" column="uid">
			<!-- 设置数据表id增长策略
				native:生成表id值就是主键自动增长 -->
			<generator class="native">
            </generator>
		</id>
		<!-- 配置其他属性和表字段的映射 -->
		<property name="username" column="username"></property>
		<property name="password" column="password"></property>
		<property name="address" column="address"></property>
	</class>
</hibernate-mapping>

 
然后需要在 src 目录下创建 hibernate.cfg.xml ,必须在 src 目录下!

<?xml version="1.0" encoding="UTF-8"?>
<!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>
		<!-- 配置数据库信息 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mybase?characterEncoding=UTF-8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">614</property>
        <!-- 下面是配置hibernate信息 -->
        <!-- 这表示使用MySQL方言。 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 这是Hibernate事务管理方式,即每个线程一个事务 -->
        <property name="hibernate.current_session_context_class">thread</property>
        <!-- 输出底层sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 这表示是否会自动更新数据库的表结构,有这句话,其实是不需要创建表的,因为Hibernate会自动去创建表结构 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 把映射文件放到核心配置文件中 -->
        <mapping resource="top/yibobo/entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

 
万事具备,测试,经过测试证明他确实给我创建了个表,还往里加了一条字段。所以是没有问题的。
使用hibernate操作的基本步骤是:
1. 获取SessionFactory
2. 通过SessionFactory 获取一个Session
3. 在Session基础上开启一个事务
4. 写具体逻辑crud操作
5. 提交事务
6. 关闭Session
7. 关闭SessionFactory

package top.yibobo.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import top.yibobo.entity.User;
public class TestHibernate {
	public static void main(String[] args) {
		SessionFactory sf = new Configuration().configure().buildSessionFactory();
		Session s = sf.openSession();
		//事务
		s.beginTransaction();
		User user = new User();
		user.setAddress("长沙");
		user.setUsername("张三三");
		user.setPassword("666666");
		s.save(user);
		//提交
		s.getTransaction().commit();
		s.close();
		sf.close();
	}
}

 
 
期间遇到了一个问题。报错:Message: cvc-complex-type.3.2.2,元素 ‘property’ 中不允许出现属性 ‘generated’
百度都百度不到。。搞了半天找到原因了,原来是XML文件的约束写错了,这个映射xml和核心配置xml用的不是一个约束,那个指向的链接不同。我是直接复制过来的。所以爆了错。
话说这个错误百度google都找不到解决方法,也不知道为啥,还好对着教程一行行对比找出来问题所在了,不然就卡死在这了= =

           


CAPTCHAis initialing...
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00