前一篇简单实现了利用hibernate进行数据库的读取操作,此篇主要说明如何利用hibernate进行自动新建表并且插入操作
第一步新建项目
本次使用普通的java project项目进行演示,首先新建java project项目
建好项目后项目目录下只有一个src目录,我们在他的同级目录下,也就是项目根目录下,再新建一个lib目录,然后吧mysql官方提供的jar包复制进来,然后将hibernate解压目录下lib目录下的jpa-metamodel-generator与required中的jar包也全部复制进来,然后再看我们的lib目录
然后还没有完还需要右击lib目录,在选项中选择Build Path->Configure Build Path…然后可以看到
我这里是已经配置完成的,如果没有配置的话,这个显示框中应该是没有这么多东西的,现在点Add External JARs
将我们刚才复制进lib目录下的所有jar包选中完成,如果没有问题的话在Referenced Libraries下可以看到这些jar包,不过有所不同的是这些jar包都是奶瓶装图标
如果是这样的话那就没有问题了,可以开始写代码了!
第二步编写两个xml文件
前一篇讲过我们需要先写两个xml文件,一个是映射配置文件在此文件中设置我们之后要写的持久化类中的属性与表字段的对应关系,此文件文件名与保存路径没有限制,因为他不会直接被加载,还有一个hibernate的核心配置文件,此文件中设置数据库链接的一些参数,包括设置数据库方言以及数据库登录链接,登录用户名和密码,还有是否进行自动创建表,前篇已经详细说过其他配置,本篇不再赘述,本篇主要详细说说自动创建表
映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.sqlrun.sqlrun" table="sqlrun">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="userName" column="userName"/>
</class>
</hibernate-mapping>
映射文件比较简单,也很好理解,前篇也都有说明,本篇不再赘述
核心配置文件
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1565203609AAaa</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--输出sql语句-->
<property name="show_sql">true</property>
<!--设置自动创建表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="cn/sqlrun/sqlrun.hbm.xml"/>
</session-factory>
</hibernate-configuration>
关于自动创建表值的设置说明:
update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。
还有其他的参数:
create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。
create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。
validate : 加载hibernate时,验证创建数据库表结构
要注意的是hibernate只会帮我们创建表不会为我们创建库,库需要手动创建
核心配置文件中,其他设置前篇都有说明,此处要进行说明的是<property name="show_sql">true</property>
这一句的主要作用是将hibernate生成的sql语句输出到控制台,还有<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
在前一篇中我说过这是设置数据库方言,而在上一篇中此标签的值我说是设置成org.hibernate.dialect.MySQLDialec
在不进行自动生成表的操作时,这样写的确不会出错,但如果用了hibernate5.x版本并且设置了自动创建表在此处就要变成了org.hibernate.dialect.MySQL5Dialec
否则会报错ERROR: Table ‘xxxx.xxx’ doesn’t exist
这样以来两个xml文件就写好了
第三步编写持久化类
还和前一篇一样,一个类属性对应一个表字段名,持久化类对应一个表,所以为了更好理解属性名就是字段名,类名就是表名
package cn.sqlrun;
public class sqlrun {
private int id;
private String userName;
public void setId(int id) {
this.id = id;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getId() {
return id;
}
public String getUserName() {
return userName;
}
}
第四步编写测试类
package cn.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.sqlrun.sqlrun;
public class test {
public static void main(String[] args) {
Configuration cfg=new Configuration().configure();
SessionFactory sFactory=null;
Transaction txTransaction=null;
Session session=null;
try {
sFactory=cfg.buildSessionFactory();
//开启session
session=sFactory.openSession();
//打开事物
txTransaction=session.beginTransaction();
//执行插入保存操作
sqlrun sqlbean=new sqlrun();
sqlbean.setId(1);
sqlbean.setUserName("www");
session.save(sqlbean);
//提交事物
txTransaction.commit();
}catch (Exception e) {
System.out.println(e.getMessage());
}finally {
//关闭session
session.close();
}
}
}
查看最后结果
插入成功