1.创建Hibernate的配置文件hibernate.cfg.xml
2.创建持久化类
3.创建对象-关系映射文件
4.通过Hibernate API编写访问数据库的代码
第一步创建配置文件:首先我是使用hibernate tools工具辅助创建的,不知道怎么安装的请参考我之前的博客:
选中文件src右键 new->other
入门课程按照默认的一直next就行了
这样会自动生成一个hibernate.cfg.xml文件
打开文件
填写配置:(配置文件代码网上很多,建议去官网开发文档中找。复制粘贴后,改一下数据库驱动,账号密码等配置就行了)
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- JDBC connection pool (use the built-in) -->
<!-- <property name="connection.pool_size">1</property> -->
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Enable Hibernate's automatic session context management -->
<!--<property name="current_session_context_class">thread</property> -->
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
上面的数据库连接可以有多种写法下面这两种写法也正确:后面的hibernate是创建的数据库的名字
//略去端口号但是/不能略,所以是三个//。因为mysql的默认端口号是3306.都知道。除非你更改了端口号 才必须写明端口号
<property name="connection.url">jdbc:mysql:///hibernate</property>
第三种写法是:在后面加上字符编码,更国际化防止中文乱码
jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8
或者
jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8
注意:
这里我用的是mysql数据库,如果是其它数据库,请自行百度或去官网查找
1:在hibernate配置文件中方言配置“org.hibernate.dialect.MySQLDialect”中的MYSQL那个y要小写。
2:Junit的版本要是4.5会报错,换成4.7就好了
3:如果数据库是本地,hibernate配置文件中的地址这样配置:jdbc:mysql://localhost/hibernate或如上面提到的三种方式中的一种
第二步创建持久化类
持久化类要遵循JavaBean的规范:
⑴ JavaBean 必须放在一个单独的包中
⑵ JavaBean 必须申明为 public class 即:必须是公有的类
⑶ JavaBean 的所有属性必须申明为 private 即:属性必须私有
⑷ 通过 setter 方法和 getter 方法设值和取值
⑸ 必须有一个公有无参构造方法
⑹ 编写代码要严格遵守 Java 程序的命名规范
例如我创建了一个学生类的持久化类:
package hibernate_001;
import java.util.Date;
public class Student {
private int id;// 学号
private String name;// 姓名
private Date birthday;// 出生日期
private String address;// 家庭住址
public Student() {
}
public Student(int id, String name, Date birthday, String address) {
// super();
this.id = id;
this.name = name;
this.birthday = birthday;
this.address = address;
}
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", birthday=" + birthday + ", address=" + address + "]";
}
}
第三步:创建关系映射文件和数据库:
创建关系映射文件:(创建方法同第一步)如下 new-other-Hibernate-Hibernate XML Mapping file(hbm.xml) 然后一直next就行了
之后操作如下:选择对应的持久化类然后next
注意这里点击next之后如果出现如下提示:(没有这项错误的请跳过)
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
请做如下操作:
这种错误一般有3个原因
1.jdbc驱动包版本问题或错误
2.数据库配置不正确或服务未启动
3.hibernate 配置问题
不过一般查错 按照 3 2 1的顺序来
我的问题是数据库未启动:(数据库默认是开机自启动的,我之前把自启动关闭了,所以需要手动启动一下)
打开:任务管理器->服务
右键选择启动就行了
但是启动了还是不行,我接着接着hibernate配置问题。
弄啦半天还是不行。推测是版本不匹配的问题:我降低了eclipse的版本
换成了:Version: Luna Service Release 2 (4.4.2)之前是最高的4.6的oxygen那个
注意eclipse降低版本后,hibernate tools 也要降低到与eclipse对应的版本
即:重新安装配置hibernate tools工具:之前已经讲过了,忘记的请回到hibernate 入门教程第二课第三课
同时我又降低了导入的hibernate jar包的版本现在使用的是4.2.4
现在问题解决了(看来以后用软件还是不要用最新的,各种问题版本不匹配。开发项目建议用稍微老一点的稳点版本)
下面接着讲:如下图是工具自动帮我们生成的对象关系映射的文档,如果没有这个工具,我们只能自己写,而且一不小心写错个字母也不好检查。是不是很方便?
映射文档把我们的实体类Student映射为数据库中的一张表,属性映射为表中的字段
注意:下面红框里面的类是我们刚才创建的实体类,默认生成的不会有错,因为我们创建的实体类在默认的包中。如果后来想把实体类的路径该了,比如后来放到了com.edu.model包中:红框中就该改写为com.edu.model.Student。如果不改的话会找不到实体类
映射文档生成后需要加到配置文档hibernate.cfg.xml中 如下图所示
注意:这里因为Student.hbm.xml的路径因为在默认的包中所以全路径就是Student.hbm.xml,
如果持久化类在其它自定义的包中写全路径名就应该这样写:
例如Student.hbm.xml在com.edu.model包中需要这样写
<mapping resource="com/edu/model/Student.hbm.xml" />
创建数据库:注意编码规则,选择utf-8避免出现中文乱码问题