如题,当建好Model 时,不想自己手工建表,可以采取hibernate进行自动建表。下面将用一个小例子来说明如何将其实现。
二、实现
说明:1)这里用的是4.3.1.Final版本的hibernate,mysql-connector-java用的是5.1.26版本的;
2)这里要手工新那一个数据库ssh,建库语句为:
create database ssh;
1.新建maven项目
都填写好了,点击finish即可。
2.项目架构图
下面是maven默认的目录,如果没有main/java 和test/java那么自己手工建吧。
3.代码
pom.xml
复制代码
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
复制代码
hibernate.cfg.xml
复制代码
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
复制代码
自动建表的关键是在update ,看hibernate的文档就发现还有其它几个选项:
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构,如果没有,那就新建数据结构。
model中的Person.java
复制代码
package com.amos.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "person2")
public class Person {
@Id
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator", strategy = GenerationType.TABLE)
@Column(unique = true, nullable = false)
private Long id;
@Column(name = "name", length = 50)
private String name;
@Column
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
复制代码
注:这里使用注解的方式,使用自增的方式,注意加粗的地方的配置。
PersonDao.java
复制代码
package com.amos.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;