Java Hour 45 Hibernate ( 2 )
基本确定了,一个月后也就是在2014年的开端,我将离开这个公司。
所以我大概还有30个学时。
45.1 你需要一个数据库
首先,必须有一个试验用的数据库,这里我们使用MySQL.
尽管书中的说明是使用ANT, 我这里还是采用MAVEN来管理。
package mike.weather.hibernate; public class HelloHibernate { public static void main(String[] args) { Message message = new Message("Hello Hibernate!"); System.out.println(message.getText()); } }
啥都不多说,先来个Hello Hibernate! 请个安。
然后MySql 就已经装好了,在我的破机器上比SQL Server 安装快多了 - -。
45.2 然后你需要一个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"> <!-- Generated 2013-11-19 20:21:23 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="mike.weather.hibernate.Message" table="MESSAGE"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <one-to-one name="nextMessage" class="mike.weather.hibernate.Message"></one-to-one> <property name="text" type="java.lang.String"> <column name="TEXT" /> </property> </class> </hibernate-mapping>
这里我们使用eclipse 的hibernate 插件来帮助我们自动生成映射文件,当然也可以直接从数据库生成这一切,这个后面再说。
装这个插件的时候,Maven 居然崩溃了,好像装上Jboss Tools 后又恢复正常了,JBoss 是啥?
45.3 Maven Dependency
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.4.GA</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.14</version> </dependency> </dependencies>
开源的悲剧之处在于各种jar 包的版本实在是太多了。
45.4 Hibernate 配置和启动
1 构建SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
new Configuration() 先在classpath 的根目录搜索hibernate.properties 文件。
.configure() 的时候,又搜索一遍hibernate.cfg.xml, 如果没有就抛出异常。
当然也可以用参数的形式指定位置。
同时在.buildSessionFactory() 之前也可以显示的自己构造。
贴上配置文件,然后不解释。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.mysql.jdbcDriver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <!-- SQL to stdout logging <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <mapping resource="mike/weather/hibernate/Message.hbm.xml" /> </session-factory> </hibernate-configuration>
45.5 数据库连接池
1 新数据库连接很贵 2 维护闲置的连接很贵 3 连接驱动语句也很贵
使用Hibernate 后
Hibernate 是一个插件架构,允许任何连接池软件整合。然后对于C3P0 的支持是和Hibernate 捆绑在一起的,
所以C3P0 只是一个捆绑好的连接池管理应用而已,你随时可以自己替换它。
配置文件到此告一个段落,接下去是SessionFactory
45.6 SessionFactory
一般来说,SessionFactory 应该在应用程序初始化期间被实例化一次。
这个东西如何放和访问呢,高级的来说可以用JNDI 和JMX. 当时我们这里用一个静态的全局变量和静态的初始化。
这个辅助类在没有Java EE 服务的普通Java 应用程序中,是Hibernate 启动的一种常用模式。
45.7 启用日志和统计
Hibernate 通过Apache 的 commons-logging 输出日志到Apache Log4j.
当然,你也需要一个配置文件log4j.properties
Java Hour 45 Hibernate ( 2 )的更多相关文章
- java数据类型,hibernate数据类型,标准sql数据类型之间的对应表
Hibernate API简介 其接口分为以下几类: l 提供访问数据库的操作的接口: l 用于配置Hibernate的接口: l 回调接口 l ...
- Java EE 之 Hibernate异常总结【4】org.hibernate.exception.SQLGrammarException: could not execute statement
本质原因:配置的Java Bean,由Hibernate自动产生的SQL语句中有语法错误 原因如下: 情况1.存在字段名/表名与数据库关键字冲突 情况2.MySQL5.0以后与MySQL5.0以前事务 ...
- java框架篇---hibernate入门
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...
- -java转json hibernate懒加载造成的无限递归问题
1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系. JoinColumn(name="pid") 2. 在保存数据时,总是先保存的 ...
- Manning Java Persistence with Hibernate & hibernate_in_action
Manning | Java Persistence with Hibernatehttps://www.manning.com/books/java-persistence-with-hiberna ...
- Java Data JPA +hibernate 保存或者是查询遇到的坑
由于项目需求,接触了Java Data JPA +hibernate,它的调用方式是controller调用service,service有实现的接口serviceimpl,serviceimpl调用 ...
- Java EE 之 Hibernate异常解决:org.hibernate.exception.SQLGrammarException: could not execute statement
本质原因:配置的Java Bean,由Hibernate自动产生的SQL语句中有语法错误 原因如下: 情况1.存在字段名/表名与数据库关键字冲突 情况2.MySQL5.0以后与MySQL5.0以前事务 ...
- Java Persistence with Hibernate
我们在Java中谈到持久化时,一般是指利用SQL在关系数据库中存储数据. ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系, 框架据此将实体对象 ...
- [Java面试八]Hibernate总结以及在面试中的一些问题.
1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. ②.Hiber ...
随机推荐
- mac 下终端访问文件出现“Permission Denied”解决方案
mac 下终端访问文件出现“Permission Denied”解决方案: 一个文件有3种权限,读.写.可执行,你这个文件没有可执行权限,需要加上可执行权限. 1. 终端下先 cd到该文件的目录下 2 ...
- php + mysql 分布式事务(转)
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicity).一个事务是一个不可分割的工作单 ...
- gcc的-D和-U参数:宏的设置与取消 _CCFLAGS=" -w -enable-threads=posix -DLINUX -D_REENTRANT -DWORKONGN -Dlinux -D_GN_DETAIL_SDR_"
_CCFLAGS=" -w -enable-threads=posix -DLINUX -D_REENTRANT -DWORKONGN -Dlinux -D_GN_DETAIL_SDR_&q ...
- jQuery1.11源码分析(6)-----jQuery结构总揽
(在看以下内容之前请先对原型链有一定的了解,比如:prototype是对象还是函数?) 在看jQuery的其他源码之前,必须对jQuery的数据结构有一定的了解. jQuery的核心很简单,jQuer ...
- [原] Android持续优化 - 提高流畅度
一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...
- 如何在WordPress中使用七牛云存储
序:七牛云存储可以方便的将网站的图片等数据镜像到七牛云存储的空间,直接从云端将数据返回给用户.这样可以大大节省网站的空间,提升网站的访问速度. 真正显示一键实现WordPress博客静态文件CDN加速 ...
- Linux常用指令(持续更新)
(这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) PP真的是一位很有姿势的程序猿,有这样的邻居真好,榜样啊. pwd 当前路径 df -kh ...
- PHP快速抓取快递信息
<?php header("Content-type:text/html;charset=utf-8"); /** * Express.class.php 快递查询类 * @ ...
- Android 云服务器的搭建和友盟APP自动更新功能的实现
setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...
- LInux 安全测试
[CVE-2013-2094]Linux PREF_EVENTS Local Root 2.6.37-3.8.10 x86_64 踩(0)http://zone.wooyun.org/content/ ...