就要期末考试了,正在复习Hibernate的使用,以前的Hibernate使用方法都忘记了,尤其是在IDEA下,许多自动集成的东西都不是很记得,那就今天来好好复习一遍,写篇博客,以便以后复习。
开始创建项目
我们在项目Examination邮件新建Module(Module和Project的关系在IDEA里面,就相当于一个Project里面有几个开发模块Module)
然后记得勾选Hibernate和Web Application,如果自己下载了Hibernate可以将Use library写进去,或者直接勾选Download下载,我这里的版本是5.+
在下面还有两个勾选方案
Create default hibernate Configuration and Main class:这里如果勾选了,就会默认创建hibernate.cfg.xml文件
新建的Module结构就差不多这个样子
其中com文件夹的东西是我自己测试的时候写的不用管
这里注意如果没有勾选之前的自动创建hibernate.cfg.xml文件,那么就打开Project Structure(点击File-》Project Structure)
选择Facets->自己的Hibernate模块,然后点击下面红色标记的+,就可以添加hibernate.cfg.xml文件了。
连接数据库
在IDEA右边的小窗口中打开Database管理工具。
点击+号,创建连接自己机器上的数据库,我这里用的是MySql
输入自己数据库对应的信息就行
比如我这里连接了数据库的信息是test这个数据库,现在我们将用他创建映射。
在右边有一个Persistence的工具窗口,点击它。
一次按下面方式操作
打开对应的操作。
我这里是进行student的操作,所以只用勾选student,如果你用哪个table,就勾选哪几个table。
这样就创建了Student的实体类,还有它的映射文件。
定义映射文件
编写配置文件
对应的账号密码自己根据需要修改即可。
编写测试类:
先看看Student的实体类:
package com;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Student {
private int id;
private Integer studentNo;
private String studentName;
private Integer sage;
private String major;
public Student(){}
public Student(int studentNo,String studentName,int sage,String major){
this.studentNo = studentNo;
this.studentName = studentName;
this.sage = sage;
this.major = major;
}
@Id
@Column(name = "id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Basic
@Column(name = "student_no")
public Integer getStudentNo() {
return studentNo;
}
public void setStudentNo(Integer studentNo) {
this.studentNo = studentNo;
}
@Basic
@Column(name = "student_name")
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
@Basic
@Column(name = "sage")
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage = sage;
}
@Basic
@Column(name = "major")
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return id == student.id &&
Objects.equals(studentNo, student.studentNo) &&
Objects.equals(studentName, student.studentName) &&
Objects.equals(sage, student.sage) &&
Objects.equals(major, student.major);
}
@Override
public int hashCode() {
return Objects.hash(id, studentNo, studentName, sage, major);
}
}
package com;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();//这是5.0+版本的写法
SessionFactory factory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory(); //这是5.0+版本的写法
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Student student = new Student();
student.setStudentNo(2012108);
student.setStudentName("王小明");
student.setSage(20);
student.setMajor("计算机科学技术");
session.save(student);//将student对象持久化到数据表中
System.out.println("插入同学成功!!");
Student stud = (Student) session.get(Student.class,new Integer(1));
System.out.println(stud.getStudentName()+" -- "+stud.getSage());
tx.commit();
session.close();
factory.close();
}
}
一定要注意我是5.0+版本的写法:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
SessionFactory factory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
4.+版本可能是这样,我没用过,也不是很清楚:
ServiceRegistry serviceRegistry= new ServiceRegistrybuilder().applySettings(configuration.getProperties()).buildServiceRegistry();