【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
这篇文章主要介绍hibernate的配置以及如何实现hello world。至于如何使用maven等工具获取到hibernate的jar文件以及配置文件请大家自行解决。
注意,在eclipse中使用hibernate需要先下载其插件。
1.hibernate介绍:
hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC。所以,Hibernate处于三层架构中的D层(持久层)。
通俗的讲:hibernate是关系--对象映射框架,意思就是hibernate可以把数据库中的表对应到java的普通对象(POJO),通过xml映射文件。然后hibernate将数据库操作封装在一个类当中,当用户需要存数据,取数据的时候,就不用使用JDBC了,直接调用方法即可。
2.项目中使用hibernate时需要什么?如何整合?
hibernate的jar文件可以在hibernate官网下载到,若是没有直接下载链接,可以使用maven项目自动下载。
jar文件如下:
是由一部分核心jar包和其依赖包所组成。将这些jar包复制到项目的classpath中即可
3.将jar包加入classpath中,然后进行下面几步操作:
(1).建立包和对应的java文件:
package org.cat.test;
public class User {
private int userid;
private String username;
private String userpassword;
..........//getter and setter
..........//constructors
//toString
@Override
public String toString() {
return "User [userid=" + userid + ", username=" + username + ", userpassword=" + userpassword + "]";
}
}
(2).在类路径下新建一个个xml文件,类型是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 2017-3-28 23:06:05 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="org.cat.test.User" table="USER">
<id name="userid" type="int">
<column name="user_id" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="user_name" />
</property>
<property name="userpassword" type="java.lang.String">
<column name="user_password" />
</property>
</class>
</hibernate-mapping>
这个文件中的信息连小学6年级的同学都能看懂是什么意思。
(3)紧接着在项目中右键建立一个新的source foler,(不是folder),命名为conf,可以存一些配置文件,在资源文件夹中新建一个hibernate的配置文件,用于配置hibernate的连接参数和一些其他的参数。(包括数据库表和实体类之间的映射表的导入):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--配置数据库连接参数 -->
<property name="connection.username">root</property>
<property name="connection.password">1314</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mrtah</property>
<!-- 配置hibernate基本信息 -->
<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- console diaplay sqls -->
<property name="show_sql">true</property>
<!-- 對sql進行格式化 -->
<property name="format_sql">true</property>
<!-- 指定自動生成數據表的策略 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定關聯的.hbm.xml文件 -->
<mapping resource="org/cat/test/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
在这个xml中,有5种信息配置,大家请自己仔细看看。
(4).然后就差不多配置完了,现在剩下的就是我们要在项目中使用hibernate来进行数据持久化和查询等相关操作了。比如登陆,就可以从数据库中取数据,使用get()方法。具体测试代码如下:
package org.cat.test;
import static org.junit.Assert.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;
/**
* @author Mrruan qkmc@outlook.com:
* @version 类诞生:2017年3月28日 下午11:09:26
*/
public class testHibernate {
@Test
public void test() {
fail("Not yet implemented");
}
@Test
public void m1(){
//1.創建sessionfactory
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure();
//3.0前
//sessionFactory = configuration.buildSessionFactory();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2.session
Session session = sessionFactory.openSession();
//3.open transaction
Transaction transaction = session.beginTransaction();
//4.save data
User user = new User("liyanlin","liyanlin520");
//保存到数据库
//session.save(user);
//从数据库获取一个数据吧
User user2 = (User) session.get(User.class, 1);
System.out.println(user2);
//5.commite transaction
transaction.commit();
//6.close session
session.close();
//7.close session factory
sessionFactory.close();
}
}