您的位置:首页 > 数据库 > MySQL

Hibernate+IDEA 2017:记录我的第一个hibernate程序

2017-09-18 14:04 302 查看
环境说明:

※Windows 10 OS version 1703

※IDEA 2017.2.3

※JDK 1.8

※MySQL:5.7

※Hibernate:5.2.11

新建项目

首先呢,我们来新建项目,建一个javaweb项目.



然后往下滑,别点next,你会看到这个



选中它,你就会看到下面



那这1,2,3就得说道说道了,

1是指使用本地的Hibernate jar包,

2是指使用idea集成的jar包,

3是指稍后自己手动导入jar包

在这里呢,可以看到idea集成的是2.5.10版本的,截止到发帖时间,最新的hibernate版本是2.5.11,所以,idea里面的可能会有点过时,如果你介意,可以去官网下载最新的jar包,然后选择第一个就行.不介意的话直接选择第二项就好.

那,导入本地jar包导入哪些呢?



可以看到,在hibernate的lib目录下,有这么多jar包,其实我们只需要导入required里面的就行,也就10个左右.就可以啦.导入完成后,就进入我们的工程界面了.

项目结构



结构说明

由于Hibernate是持久化数据到数据库中的,所以还需要导入你的数据库的驱动jar包.

为什么hibernate里没有数据库驱动jar包呢?因为数据库种类不一,所以呢,就没有放入,根据自己的实际情况导入相应的jar包即可.我这里导入的是mysql的驱动.

还有一个就是单元测试jar包.用来进行单元测试.我这里的版本是4.12

config文件夹是放hibernate的全局配置文件

Student类是实体类

Student.hbm是Student的映射配置文件

HibernateTest是单元测试类

项目代码

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->

<!-- 约束文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- 全局配置-->
<hibernate-configuration>
<!-- session工厂设置,也就是连接设置-->
<session-factory>
<!--四本一言
四本:四大基本标签:驱动,url,用户名,密码
一言:方言,数据库的方言,指明使用的是哪一个数据库
-->
<!--1.配置数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--2.配置数据库的url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_test?charset=UTF-8</property>
<!--3.配置用户名和密码 -->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">4187Qsx-i</property>
<!--4.配置数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</property>
<!--5.设置键表语句的执行:create or update -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--6.设置显示自动生成的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!--7.设置格式化显示的sql语句 -->
<property name="hibernate.format_sql">true</property>

<!--8.引入映射配置文件 -->
<mapping resource="com/cs/qsx/bean/Student.hbm.xml" />

</session-factory>
</hibernate-configuration>


Student.class

package com.cs.qsx.bean;

public class Student {
/**
* 包名: com.cs.qsx.bean
* 类名: Student
* 类描述: 用于生成关系表的实体类
* 作者: Lucifer
* 创建日期: 2017/9/18
* 创建时间: 11:39
*
**/
private int id;
private String name;
private String gender;
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 String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}


***Student.hbm.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!--1.指定要映射关系表的实体类所在的包
包名可以不写,但是在class标签中的name里就得写这个类的全限定名(packageName.className)
-->
<hibernate-mapping package="com.cs.qsx.bean">
<!--2.指明是用哪个实体类来生成关系表
每个实体类对应一个表,想要生成一张表必须有对应的实体类.一一对应
一般情况下,这个实体类的映射配置文件命名是符合这个规则:className.hbm.xml
而且放在和实体类同一个包下
-->
<class name="Student">
<!--3.id标签,指定这张表的主键,一张表,最好都要有个主键,不建没有主键的表,而且最好主键是int类型的
name属性指定的是实体类中的哪个属性作为主键
-->
<id name="id">
<!--4.generator标签指明这个主键的特性,native代表主键自增 -->
<generator class="native"/>
</id>
<!--5.property标签的name属性是实体类中的各个除了主键之外的属性名 -->
<property name="name"/>
<property name="gender" />
<property name="age" />
</class>
<!--6.写完映射配置文件后一定要去全局配置文件中添加 -->
</hibernate-mapping>


HibernateTest.class

package com.cs.qsx.test;

import com.cs.qsx.bean.Student;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class HibernateTest {
/**
* 包名: com.cs.qsx.test
* 类名: HibernateTest
* 类描述: 测试hibernate的一个单元测试类
* 作者: Lucifer
* 创建日期: 2017/9/18
* 创建时间: 11:59
*
**/
/*
单元测试类的几个基本要求:
1.必须要有@Test注解
2.返回值为空
3.没有形参
*/

@Test
public void testHibernate(){
//1.加载全局配置文件
Configuration configuration = new Configuration().configure();
//2.获取session工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.创建session对象
Session session = sessionFactory.openSession();
//4.操作数据
Student student = new Student();
student.setAge(10);
student.setName("楚南");
student.setGender("男");
System.out.println("保存成功:" + session.save(student));
//5.关闭session
session.close();
}
}


Bug说明

1.双击运行测试方法,出现bug:

java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing

说明:上网搜索了一下,这是因为在junit4.12中没有hamcrest包了.

解决办法:下载 hamcrest-core-1.3.jar导入或者使用junit4.8.因为在4.10以上的junit中没有这个包了

2.好了,导入这个jar包后,再次双击运行,出现这个bug

org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml]

说明:没找到这个配置文件

解决办法:那是因为新建的config文件夹是普通文件夹,无法找到.需要将config文件夹变成资源文件夹即可.

步骤如下:

2.1 File–>Project Structure–>Modules

2.2 如图,修改config文件夹的类型,右键config,选择sources即可.



结果



大功告成.

2017/9/18

Lucifer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息