我的hibernate学习之旅(2)
来源:互联网 发布:截面数据回归分析实例 编辑:程序博客网 时间:2024/06/09 17:36
一、HIbernate第一个实例
该实例的目录结构如下
说明:最后一个HIBERNATE3里面包含了所有的需要引用的jar包
1、新建一个普通的java项目,按照上面的步骤引入相关的jar包和配置文件
2、建立User实体类
package com.dapeng.domain;import java.util.Date; public class User { private String id; private String username; private String password; private Date createTime; private Date expireTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String userName) { this.username = userName; } 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; } }
2、提供User.hbm.xml文件,完成实体类的映射
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--生成默认为user的数据库表--> <class name="com.dapeng.domain.User"> <id name="id"> <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID --> <generator class="uuid"></generator> </id> <property name="username"></property> <property name="password"></property> <property name="createTime" type="date"></property> <property name="expireTime" type="date"></property> </class> </hibernate-mapping>
其中的property标签是将要生成是数据库表中的字段,在这里不用关心各个字段是什么类型的。因为Hibernate会根据上面的实体类中属性的类型来决定将来表中字段的类型
3、配置hibernate.cfg.xml文件
<!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.driver_class">com.mysql.jdbc.Driver</property> <!-- 设置数据库URL --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property> <!-- 数据库用户名 --> <property name="hibernate.connection.username">root</property> <!-- 数据库密码 --> <property name="hibernate.connection.password">11231007</property> <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 映射文件 --> <mapping resource="com/dapeng/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration>
注意:必须是“/”而不能是“.”。
4、生成表:编写工具类ExoprtDB.java,将hbm生成ddl
package com.dapeng.domain;import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * 将hbm生成ddl * @author liang * */ public class ExportDB{ public static void main(String[]args){ //默认读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); ////生成并输出sql到文件(当前目录)和数据库 SchemaExport export = new SchemaExport(cfg); export.create(true, true); } }
到这里就可以生成User表了,但是如果直接运行ExoprtDB.java文件是不能生成User表的。因为在mysql数据中还没有建立数据库Hibernate-first。所以在mysql控制台中通过create database hibernate-first; use hibernate-first;之后再执行ExoprtDB.java文件就可以生成表了。
5、向表中添加数据
package com.dapeng.domain;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) { //读取配置文件 Configuration cfg=new Configuration().configure(); SessionFactory factory=cfg.buildSessionFactory(); Session session=null; try{ session=factory.openSession(); //开启事务 session.beginTransaction(); User user=new User(); user.setUsername("张永鹏"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //保存User对象 session.save(user); //提交事务 session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally { if(session!=null){ if(session.isOpen()){ //关闭session session.close(); } } }}}
执行该java文件就可以完成向表中增加数据了,效果如下
二、总结
通过上面的代码我们可以看出,在代码中没有涉及到任何有关JDBC的代码,作为开发人员只需要写好相应的实体类,然后通过配置就可以实现了表的建立以及向表中实现数据的插入。
在代码中有许多Hibernate的核心对象,例如Configuration、SessionFactory、Session、Transaction接口、Query接口和Criteria接口。这些内容的用处将在(1)中已经做出解释。
- 我的hibernate学习之旅(2)
- 我的hibernate学习之旅(1)
- 我的Hibernate学习之旅(4)~多对一单向关联映射
- 我的Hibernate学习记录(一)
- 我的Hibernate学习记录(二)
- 我的hibernate之旅一
- 我的见解之hibernate(二)
- 我的见解之hibernate(三)
- 我的见解之hibernate(四)
- 我的见解之hibernate(五)
- 我的见解之hibernate(六)
- 我的见解之hibernate(七)
- 我的见解之hibernate(八)
- 我的见解之hibernate(九)
- 我的见解之hibernate(十)
- 我的见解之hibernate(十一)
- 我的见解之hibernate(十二)
- 我的见解之hibernate(十三)
- CI连接数据库
- 生活随笔:我在百度阅读挣的20元
- uva 580 Critical Mass(递推)
- 简单button样式的设置(不是直接将背景设置为图片,而是设置背景的颜色)
- Android—RadioButton(单选框)和CheckBox(复选框)
- 我的hibernate学习之旅(2)
- hdu 1253 胜利大逃亡 BFS
- 学习嵌入式的第一天
- 熟练使用java集合001 总览
- try-catch-finally块中的退出语句
- E:in-range伪类选择器与E:out-of-range伪类选择器
- python字典为什么要用clear方法
- 网络库封装
- mysql通过job任务调度(event)执行存储过程