Hibernate官方手册:http://docs.jboss.org/hibernate/orm/current/quickstart/html_single/#hibernate-gsg-tutorial-basic-test
踩坑心得:官网页面一定要看,英语一定要会,看不懂就慢慢看,真的很有用
为什么要用Hibernate?
java语言是面向对象的,而使用数据库Mysql等关系型数据库时,使用java语言操作关系型数据库是不一致的,使用JDBC操作数据库时非常繁琐,怎么解决呢,当然是通过映射,而Hibernate就很好的解决了这个问题。
Hibernate是一个开放源代码的对象关系映射框架,通过对JDBC进行了轻量级的对象封装,使Java程序员能随心所欲的使用面向对象的编程思维来操作数据库
Hibernate的工作原理:
一、
Hibernate准备:(我使用的开发环境环境是)
1.准备数据库环境:MYSQL5.5
2.准备开发工具:Spring-tool-suite-3.9.4.RELEASE
3.准备数据库的驱动程序::jdbc
4.准备Hibernate包:这里我们使用maven
安装教程:http://maven.apache.org/install.html
其实安装非常简单:下载完毕解压后就可以了,如果想要测试一下,可以将解压后的文件夹的bin目录配置到环境变量path中,然后在dos命令行测试:
-
输入: mvn -v
5.在sts中集成maven,addapache-maven-3.5.4
创建项目:
配置pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xintoucloud</groupId>
<artifactId>hibernate_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hibernate_test</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.7.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果需要修改版本,只需要修改配置文件中的版本号即可,非常方便
创建实体类:
package com.xintoucloud.entity;
public class User {
private int uid;
private String uname;
private String upass;
private String email;
private int state;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
创建映射文件:
<?xml version="1.0"?>
<!--
~ 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">
<hibernate-mapping package="com.xintoucloud.entity">
<class name="User" table="user">
<id name="uid" column="uid">
<generator class="native"/>
</id>
<property name="uname" column="uname"/>
<property name="upass" column="upass"/>
<property name="email" column="email"/>
<property name="state" column="state"/>
</class>
</hibernate-mapping>
创建测试文件
package com.xintoucloud.hibernate_test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.xintoucloud.entity.User;
public class HibernateTest {
public SessionFactory sessionFactory;
@Before
public void setUp() throws Exception {
//1.读取配置文件,创建SessionFactory
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure()
.build();
try {
//SessionFactory(创建Session):线程安全,重量级对象,一个数据库只需要创建一个
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
e.printStackTrace();
// The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
// so destroy it manually.
StandardServiceRegistryBuilder.destroy( registry );
}
}
@After
public void tearDown() throws Exception {
if ( sessionFactory != null ) {
sessionFactory.close();
}
}
@Test
public void testSave() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
User user = new User();
user.setEmail("user@qq.com");
user.setState(1);
user.setUname("jhq");
user.setUpass("123456");
//4.执行保存
session.save(user);
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testGet() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行查询
User user=session.get(User.class,13);
System.out.println("uname:"+user.getUname());
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testLoad() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//load支持lazy(懒加载):执行完load不会立即查询数据库2.查询一条不存在的记录出现ObjectNotFoundException
User user = session.load(User.class, 13);
System.out.println(user.getUname()+","+user.getEmail()+","+user.getState());
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testList() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行查询
List<User> users=session.createQuery("from User").list();
for (User user2 : users) {
System.out.println("uname:"+user2.getUname());
}
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testDelete() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行查询
User user=session.get(User.class,12);
session.delete(user);
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testUpdate() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行查询
User user=session.get(User.class,13);
user.setUname("修改后");
user.setEmail("123456@163.com");
session.update(user);
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
@Test
public void testListPage() {
//Session(执行数据库操作,和HttpSession没有任何关系):线程不安全的,轻量级对象,每个操作就应该使用不同的Session,用来后立即关闭
//2.打开Session
Session session = sessionFactory.openSession();
//3.开启事务
session.beginTransaction();
//4.执行查询
List<User> users=session.createQuery("from User").setFirstResult(0).setMaxResults(5).list();
for (User user2 : users) {
System.out.println("uname:"+user2.getUname()+",email"+user2.getEmail());
}
//5.提交事务
session.getTransaction().commit();
//6.关闭Session
session.close();
}
}
运行测试文件:
总结:
1.先配置pom.xml文件,添加依赖关系
2.hibernate.apache.org,中找到hibernate的Gav坐标配置到pom.xml文件中,(依赖一)
3.maven.apache.org中找到plugins-compiler-compile using-source and -targetjavac options,配置到文件中
4.mvnrepository.com中搜索mysql,找到对应版本
5.我的是jdk1.8所以junit需要4.8.1,改完之后,更新maven项目
6.按照maven目录的结构创建必要的目录,src/main/resources
7.去官网上下载maven项目的tutorials(模板)就可以开始创建自己的项目了