1.jdbc连接的优缺点

JDBC的优点

直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。

JDBC的缺点

1).因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。

2).操作比较繁琐,很多代码需要重复写很多次。

3).如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。

Jdbc是一个比较底层的东西,灵活写SQL语句

1)、注册驱动

2)、获得连接

3)、产生一个Statement

4)、进行操作

返回数据ResultSet

1)、new List对象

2)、把ResultSet数据放入List过程中

A a = new A();

a.setXXX(rs.getString("xxx"));

代码比较繁琐,纯的JDBC是没有缓存的。

2. hibernate引言

l 模型不匹配(阻抗不匹配)

Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。

l 解决办法

1使用JDBC手工转换。

2使用ORM(Object Relation Mapping对象关系映射)框架来解决。

对象模型中对象与对象之间的关联关系与关系模型中数据库表之间的关系无法一一对应。

对象模型中对象的继承关系在关系模型中无法直接表示。

对象模型中对象的等值性(equals)在关系模型中无法直接实现。

对象模型中有关联的对象之间的导航访问在关系模型中无法直接实现。

3  hibernate

l Hibernate是一个开源ORM框架。

l ORM全称Object Relation Mapping,即对象关系映射。它是一种用来完成对象模型到关系模型的映射技术。就是把应用程序中的对象数据持久化到关系数据库的表的一种技术。

l 使用ORM( Object Relation Mapping )框架来解决。主流的ORM框架有JBoss公司的Hibernate、Oracle公司的TopLink、Apache组织的OJB、Sun公司的JDO。

l 简单的说:ORM能利用面向对象的思想开放基于关系型数据库的应用程序,它的主要工作是将对象数据保存到关系数据库的表中,以及将关系数据库表中数据读入到对象中。

4安装配置

下载地址http://www.hibernate.org,这里举例使用的是3.3版本。解压获取必需类库文件。将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:

需要使用的jar包以及jar包对应含义如下:

l 配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件,后者中列举的更详细,主要是与各种数据库连接模版。

l可以在配置文件指定

数据库的URL、用户名、密码、JDBC驱动类、方言等。

启动时Hibernate会在CLASSPATH里找这个配置文件。

l 映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。

l一个小例子步骤

1).新建java或web项目,并加入相应的jar包及jdbc驱动。

2).创建持久化类(java bean)

3).准备数据库表

4).创建配置文件 hibernate.cfg.xml

5).创建映射文件 xxx.hbm.xml(与bean类在同一个包中)

6).创建测试文件(测试本项目)

5  细节分析

Hibernate.connection.url 表示要链接的数据库地址

Hibernate.connection.driver_class表示要链接的数据库的驱动类

Hibernate.connection.username 要连接的数据库的用户名

Hibernate.connection.password 要连接的数据库的密码

Hibernate.dialect 表示要使用的数据库的类型

org.hibernate.dialect.MySQL5Dialect mysql数据库

org.hibernate.dialect.Oracle9Dialect oracle数据库

org.hibernate.dialect.SQLServerDialect SQLServer数据库

hibernate.hbm2ddl.auto

validate:加载hibernate时验证创建表结构

update:加载hibernate时自动更新数据库结构,如果表存在不用创建,如果不存在就创建。

create:每一次加载hibernate时都创建表结构

create-drop:加载hibernate时创建,退出时删除

6. 基本概念和CURD

开发流程:

1、由Domain object -> mapping->db。(官方推荐)

2、由DB开始,用工具生成mapping和Domain object。(使用较多)

3、由映射文件开始。

Domain Object限制

1、默认的构造方法(必须的)。

2、有无意义的标示符id(主键)(可选)

3、非final的,对懒加载有影响(可选)

7.案例说明

Domain Java Object(User)

public class User {

private int id;

private String name;

private Date birthDay;

//getter setter…

}

l 对象关系映射文件:把面向对象中的实体类对象映射到数据库中的实体(表的记录),把实体类之间的关联关系也映射到数据库中多个表之间的相互关系中。这样,在Hibernate中对这些实体对象的操作就直接转换为对数据库表的记录的操作。

user.hbm.xml

<?xml version="1.0"?>

<hibernate-mapping package=“cn.itcast.domain">

<class name="User" table="user">

<id name="id">

<generator class="native"/>

</id>

<property name="name"/>

<property name="birthday”/>

</class>

</hibernate-mapping>

hibernate.cfg.xml

<!DOCTYPEhibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factoryname="foo">

<propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>

<propertyname="connection.url">jdbc:mysql:///hibernate</property>

<propertyname="connection.username">root</property>

<propertyname="connection.password">root</property>

<propertyname="dialect">org.hibernate.dialect.HSQLDialect</property>

<propertyname="show_sql">true</property>

<propertyname="hbm2ddl.auto">update</property>

<mappingresource="com/hbsi/domain/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

测试类 DemoTest.java

package com.hbsi.test;

import java.text.DateFormat;

import java.text.ParseException;

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import com.hbsi.domain.User;

public class UserTest {

/**

* @param args

* @throws ParseException

*/

public static void main(String[] args) throws ParseException {

//给user类字段赋值

User user = new User();

user.setName("aa");

//user.setBirthday(new Date());

user.setBirthday(DateFormat.getDateInstance().parse("1992-01-01"));

//获取hibernate.cfg.xml的配置文件

Configuration cfg = new Configuration().configure();

//从session工厂中获取session,相当于jdbc中的connection

SessionFactory factory = cfg.buildSessionFactory();

Session session = factory.openSession();

session.beginTransaction();

session.save(user);

session.getTransaction().commit();

session.close();

}

}

概述hibernate入门安装配置的更多相关文章

  1. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  2. Hibernate入门案例配置以及增、删、改、查看

    享受痛苦就是走向成功的第一步. 一.创建一个项目(lib里面是需要的夹包小奶瓶要导包) 二.书写大配置文件 大配置文件必须放置在项目根目录(专业classpath下):界定:就是src 1名称:hib ...

  3. hibernate入门-基本配置及简单的crud操作

    框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...

  4. Laravel 5.5 文档 ] 快速入门 —— 安装配置篇

    服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...

  5. 双机冗余备份和负载均衡策略(Mysql Cluster入门安装配置指南)

    MySQL Cluster 是MySQL适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.MySQL Clus ...

  6. windows服务器入门 安装配置IIS和ASP

    本人以windows2012R2为例   其他版本都大同小异   可以按照这个来 1) 点击Windows云服务器左下角[开始(Start)],选择[服务器管理器(Server Manager)],打 ...

  7. 转载maven安装,配置,入门

    转载:http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html 本书代码下载 大家可以从我的网站下载本书的代码:http://ww ...

  8. Debian 入门安装与配置2

    Debian 入门安装与配置2 1. C/C++开发必装软件 atp-get install gcc    这个不用说,用来编译C程序 apt-get install g++ 用来编译C++程序 ap ...

  9. Debian 入门安装与配置1

    Debian 入门安装与配置1 最近安装了多个发行版本的Linux,包括Ubuntu.Fedora.Centos和Debian,发现只有Debian在界面和稳定性等综合特性上表现最优,自己也最喜欢,所 ...

随机推荐

  1. NYOJ-289 苹果 289 AC(01背包) 分类: NYOJ 2014-01-01 21:30 178人阅读 评论(0) 收藏

    #include<stdio.h> #include<string.h> #define max(x,y) x>y?x:y struct apple { int c; i ...

  2. 【bzoj1012】[JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8339  Solved: 3624[Submi ...

  3. [工作积累] JNI native 函数签名

    对于一个Java 类 class MyClass { ... public native boolean nativeMyFunc(long param); } 一般来说native对应的声明是这样: ...

  4. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static

    在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...

  5. Isomorphic JavaScript: The Future of Web Apps

    Isomorphic JavaScript: The Future of Web Apps At Airbnb, we’ve learned a lot over the past few years ...

  6. 从CMO到龙泉寺弟子:佛法改变人生

    今天,移动精英开发社为大家请来了佛家弟子孫濟初师兄给大家分享学佛心得.濟初师兄根据自己的亲身经历,讲述了佛法对他人生的影响,以及他所获得的启示.本文系国内ITOM管理平台OneAPM授权转载. 孫濟初 ...

  7. SGU101

    Dominoes – game played with small, rectangular blocks of wood or other material, each identified by ...

  8. HDU 2852 KiKi's K-Number(树状数组+二分搜索)

    题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+ ...

  9. Android调用天气预报的WebService简单例子

    下面例子改自网上例子:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html 不过网上这个例子有些没有说明,有些情况不 ...

  10. __stdcall 与 __cdecl

    (1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈. WIN32 Api都采用_stdcall调用方式,这样的宏定 ...