工程目录结构在最后
Eclipse版本:Mars 4.5.2
数据库:MySQL+navicat
1.需要Hibernate Tools for Eclipse plugins
在JBoss Tools下载与自己Eclipse版本相对应的Tools。用于方便的构建hibernate工程。
选择好版本后,会出现这样一个界面:
这时直接把链接(红圈)拖进Eclipse就行了。
然后获取资源后,点击finish,会进行在线安装:
中途可能会弹出警告,忽略就是,装完会重启:
重启后会弹出是否加入用户体验之类的:
然后我们在File->New里面就可以看到hibernate选项了:
2.下载jdbc驱动
我用的mysql数据库,在官网下载Mysql JDBC
解压出其中的jar包就好。
3.下载Hibernate包
在Hibernate官网下载:
大概100M,下载完后解压出来:
在文件夹下的所有jar包都需要。
4.下载Junit
junit的jar包下载就很多了,我这里用的是4.10版
5.创建User Library
为了方便导包,我们创建自己的用户library:
在Windows-preference下:
将jar包都引进来。
接下来新建一个java工程
在工程下右键–》properties下:
点击next后选中需要的自定义库:
然后在工程下就会多出来自己的库:
上面有个junit测试单元不是必须的。
6.配置文档
在工程src目录下新建一个cfg.xml文件:
在编写代码前可能没有提示功能,这时找到hibernate的下载包:
这个路径有dtd文件,导入到Eclipse中:
然后编写文档:
<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
</session-factory>
</hibernate-configuration>
7.持久化类
在src目录下写一个实体类:
public class Student {
/**
* 遵循javabean要求
* 1.公有的类
* 2. 提供公有的布袋参数的默认的构造方法
3. 属性要私有化private
4. 属性要用setter/getter封装
*/
private int sid;
private String name;
private String number;
public Student(){
}
public Student(int sid, String name, String number) {
super();
this.sid = sid;
this.name = name;
this.number = number;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
8.创建对象-关系映射文件
同样新建一个hbm.xml文件:
一路next后,它会自动帮我们生成Student的hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-4-26 16:07:07 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="Student" table="STUDENT">
<id name="sid" type="int">
<column name="SID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="number" type="java.lang.String">
<column name="NUMBER" />
</property>
</class>
</hibernate-mapping>
然后我们将它引入cfg.xml文件中,加一句:
<mapping resource="Student.hbm.xml"/>
9.建数据库
我用的navicat:
10.使用junit测试
虽然可以不用junit测试,但他更加方便。
首先看一下junit的三个注解标签:Before,After,Test:分别代表执行测试前(一般进行初始化),执行后(一般销毁资源)和执行测试代码。
在工程中建一个test文件夹,里面写一个StudentTest类:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class StudentTest {
/*
* 测试学生类
*/
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init() {
/**
* 在之前用ServiceRegistryBuilder,但是 在hibernate4.3.x版本后
* ServiceRegistryBuilder 过时了,可以用StandardServiceRegistryBuilder替代,
* 但最好还是用下面的方法
*/
// 创建配置对象
//Configuration config = new Configuration().configure();
// 创建服务注册对象
// ServiceRegistry serviceRegistry = new
// ServiceRegistryBuilder().applySettings(config.getProperties()).build();
// //创建会话工厂对象
// sessionFactory = config.buildSessionFactory(serviceRegistry);
// //会话对象
// session = sessionFactory.openSession();
// //开启事务
// transaction = session.beginTransaction();
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder()
.applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE).build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
// 会话对象
session = sessionFactory.openSession();
// 开启事务
transaction = session.beginTransaction();
}
@After
public void destory() {
// 先提交事务
transaction.commit();
// 关闭会话
session.close();
// 关闭会话工厂
sessionFactory.close();
}
@Test
public void testSaveStudent() {
// 生成学生对象
Student s = new Student(1, "jimo", "0001");
session.save(s);// 保存对象进数据库
}
}
仔细研究下上面的代码就可以知道Hibernate怎么做的。
现在,按图操作:
右键,选择Junit测试:
第一次可能会弹出:
android开发基本没用过。
然后,报错了,原因是找不到Mapping对应的资源,没错,我们需要把Student.hbm.xml文件移到cfg.xml文件找得到的地方,于是,我移到了同一个目录下,所以最后工程的完整目录如下:
现在看一下junit测试的结果:
在console中打印出一些东西:
Hibernate:
drop table if exists STUDENT
Hibernate:
create table STUDENT (
SID integer not null,
NAME varchar(255),
NUMBER varchar(255),
primary key (SID)
)
四月 26, 2016 4:59:50 下午 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
INFO: HHH000476: Executing import script ‘org.hiber[email protected]10fde30a‘
Hibernate:
insert
into
STUDENT
(NAME, NUMBER, SID)
values
(?, ?, ?)
然后打开数据库,发现多了一张Student的表(坑人的是需要重启navicat):
11.总结
也许,这就是命吧,开始总是艰难的。