hibernate学习笔记(一)
来源:互联网 发布:mac系统怎么重装win10 编辑:程序博客网 时间:2024/06/08 14:18
一、hibernate是什么?
关于hibernate的定义, 大多时候看到这样一句话: Hibernate是一个基于“元数据”的轻量级的ORM框架。先解释一下元数据和ORM。
元数据(Metadata):描述数据的数据,对数据及信息资源的描述性信息。
ORM(Object Relation Mapping):对象关系数据库的映射,也就是说将我们程序中的实体(bean)和数据库中的表进行映射。
hibernate的作用:Hibernate将我们的数据库表和程序的实体类进行映射,对数据的操作进行了封装,使我们不需要对数据库知识很了解,面向对象编程就可以了,这样大大提高了我们的编程效率。
二、搭建hibernate环境
1.新建一个工程
首先新建一个Dynamic Web Project工程,导入jar包(以hibernate4..2为例)。导入hibernate-release-4.2.21.Final的以下jar包:
- lib\required下的所有jar(必须)。
- 然后导入lib\optional\c3p0文件夹中的c3p0-0.9.1.jar(数据源连接池组件)。
- 然后导入lib\optional\ehcache文件夹中的Hibernate-ehcache-4.2.21.final.jar(缓存组件)
- 数据库驱动jar包。根据数据库类型选择,这里我使用的是oracle数据库,导入的是ojdbc14.jar。
- (可选)commons-logging-1.0.4.jar , log4j-1.2.11.jar(日志输出组件)
- (可选)dom4j-1.6.1.jar(XML解析)
新建一个jdbc.properties文件
jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcljdbc.username=smjdbc.password=sm
新建完成如下图
2.引入配置文件
(1)首先建立hibernate.cfg.xml,如下是一个简单的hibernate.cfg.xml的配置
<?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配置文件的开始--> <hibernate-configuration> <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作--> <session-factory> <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序--> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <!--Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。--> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <!--设置数据库的连接url:jdbc:oracle:thin:@localhost:port:sid,其中localhost表示访问地址,此处为本机,port是端口,sid是数据库名--> <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:orcl</property> <!--连接数据库的用户名、密码--> <property name="hibernate.connection.username">sm</property> <property name="hibernate.connection.password">sm</property> <!--程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句,开发时设置为true。项目部署后可以设置为false,提高运行效率--> <property name="hibernate.show_sql">true</property> <!--格式化SQL语句,便于查看--> <property name="hibernate.format_sql">true</property> <!-- 指定映射文件 --> <mapping resource="com/main/entity/Userinfo.hbm.xml"/> </session-factory></hibernate-configuration>
(2)然后创建一个log4j.properties,下面是配置内容
#debug info errorlog4j.rootLogger=error,A1#Output to the consolelog4j.appender.A1=org.apache.log4j.ConsoleAppender#Output to the file#log4j.appender.A1=org.apache.log4j.FileAppender#log4j.appender.A1.File=d:/log.txt #log4j.appender.A1.layout=org.apac he.log4j.SimpleLayout #Style is PatternLayout log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=>>> %d %5p [%t] (%F:%L) - %m%n#log4j.appender.A1.DatePattern='.'yyyy-MM-ddlog4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG
(3)生成实体类和hbm.xml文件
在这里我是通过先在数据库建表,然后再eclipse中用hibernatetools逆向生成实体类和映射文件如下。(以userinfo为例)
public class Userinfo implements java.io.Serializable { private BigDecimal id; private String name; private String sex; private Date birthday; private String department; private String phone; public Userinfo() { } public Userinfo(BigDecimal id) { this.id = id; } public Userinfo(BigDecimal id, String name, String sex, String phone) { this.id = id; this.name = name; this.sex = sex; this.phone = phone; } public BigDecimal getId() { return this.id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone = phone; }}
hbm.xml文件:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- Generated 2017-7-25 15:56:24 by Hibernate Tools 4.3.1.Final --><hibernate-mapping> <class name="com.main.entity.Userinfo" table="USERINFO" schema="LP" optimistic-lock="version"> <id name="id" type="big_decimal"> <column name="ID" precision="22" scale="0" /> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="NAME" length="50" /> </property> <property name="sex" type="string"> <column name="SEX" length="50" /> </property> <property name="phone" type="string"> <column name="PHONE" length="50" /> </property> </class></hibernate-mapping>
(4)编写测试类
public class Client { public static void main(String[] args) { //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //建立SessionFactory SessionFactory factory = cfg.buildSessionFactory(); //取得session Session session = null; try { session = factory.openSession(); //开启事务 session.beginTransaction(); Userinfo userinfo = new Userinfo(); userinfo.setId(new BigDecimal(2)); userinfo.setName("张三"); userinfo.setPhone("11111111"); String date1 = "1994-06-10"; userinfo.setSex("男"); //保存Userinfo对象 session.save(userinfo); //提交事务 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); //回滚事务 session.getTransaction().rollback(); }finally { if (session != null) { if (session.isOpen()) { //关闭session session.close(); } } } } }
(5)结果
如下图所示,已经将数据存储到表userinfo表中:
以上就是初步完成一个hibernate的步骤,其中log4j.properties并不是hibernate环境必须的,但是为了之后的框架整合,可以先试着尝试一下在框架中使用日志。
- Hibernate学习笔记(一)
- Hibernate学习 笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- hibernate学习笔记(一)
- hibernate学习笔记(一)
- hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate 学习笔记(一)
- Hibernate 学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- Hibernate学习笔记(一)
- hibernate学习笔记(一)
- JS 控制图片在浏览器上幻灯片式自动播放
- 浅谈分布式消息技术 Kafka
- Linux 下cut用法总结
- POJ
- 并发Queue一
- hibernate学习笔记(一)
- 多线程总结
- UVA11624 Fire 两次BFS
- Java程序-1
- JSP&Servlet jsp(2)
- SimpleDateFormat 使用注意事项
- linux下boost库的安装及使用
- 连接池
- Could not resolve hostname t143ghl: Name or service not known lost connection