今天试着看了一下hibernate,就做了一个很简单的配置。
现在把它写出来也是巩固一下:
由于hibernate是完全独立的,所以这里只是为了测试可以新建一个javaProject。
我就建了一个hibernate_first工程。
然后将所需要的jar包添加到工程,主要包括:
1、hibernate的核心jar包
2、hibernate所需要的支持jar包
3、所需要的数据库驱动包(这是使用的是mysql)
接着写hibernate的配置文件hibernate.cfg.xml(/src 下)
<!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="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory> </hibernate-configuration>
此配置文件说明了hibernate与数据库连接的配置
所使用的数据库是mysql
本程序用的数据库名是hibernate_first
所以在写完此配置文件后需要到mysql中去新建一个数据库hibernate_first,以后的数据库的操作都由hibernate自动完成。
然后写了一个实体bean类User
package com.mp.hibernate; import java.util.Date; public class User { //用户代码 private String id; //用户姓名 private String name; //密码 private String password; //创建时间 private Date createTime; //失效时间 private Date expireTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getExpireTime() { return expireTime; } public void setExpireTime(Date expireTime) { this.expireTime = expireTime; } }
接着就写此实体类的配置文件user.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"> <hibernate-mapping> <class name="com.mp.hibernate.User"> <id name="id"> <generator class="uuid"></generator> </id> <property name="name"></property> <property name="password"></property> <property name="createTime"></property> <property name="expireTime"></property> </class> </hibernate-mapping>
其中:
<id name="id"> <generator class="uuid"></generator> </id>
<id name="">是一个主键标识标签,name就是User类中的变量名; generator 是配置了它的生成策略的
另外这个配置文件一般是放在与实体类一起的包中。
写好了此配置文件就把它加入到hibernate.cfg.xml配置文件中
在<hibernate-mapping></hibernate-mapping> 的所有<property>之后加入
<mapping resource="com/mp/hibernate/User.hbm.xml" />
然后写一个数据库的导出类ExportDB.java:
package com.mp.hibernate; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ExportDB { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); } }
其实程序中如果仅仅写了Configuration cfg = new Configuration()这个的话,它默认读取的是 properties文件,所以加上它的configure()方法,他就是读取的是hibernate.cfg.xml文件
SchemaExport 工具类 就是把cfg里面配置的对象类生成物理表了
运行该程序,然后进入mysql查看结果:
然后又写了一个客户端测试类Client.java
package com.mp.hibernate; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args) { // 读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //创建sessionFactory SessionFactory factory = cfg.buildSessionFactory(); Session session = null; try { session = factory.openSession(); //开启事务 session.beginTransaction(); User user = new User(); user.setName("张三"); user.setPassword("323"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //保存数据 session.save(user); //提交事务 session.getTransaction().commit(); } catch(Exception e) { e.printStackTrace(); //回滚事务 session.getTransaction().rollback(); } finally { if(session != null) { if(session.isOpen()) { //关闭session session.close(); } } } } }
运行客户端类,然后去mysql查看结果
下面两次执行查询分别是在执行该类的前后: