hibernate 是一种ORM框架,是ORM框架中一个典范 ORM叫做对象关系映射
是面向对象语言和关系型数据库之间的映射关系
所以只有在面向对象语言或者关系型数据库没用的时候ORM才会消失

ORM为我们做什么

  减少乏味的代码
  更加面向对象的设计
  更好的性能
  更好的移植性

使用Hibernate  http://hibernate.org/ 

1. 加入Hibernate的jar包

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>4.2.0.Final</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.33</version>
</dependency>

2. 创建持久化类(pojo)

  就是以前的实体类

3. 创建映射文件(xxx.hbm.xml)

pojo->xxx.hbm.xml->table表示一个实体类于一张表的映射关系文件
在pojo包里新建User.hbm.xml文件,和类名相同

<?xml version="1.0" encoding="UTF-8"?>
<!-- 展开jar包有个hibernate-mapping-3.0.dtd,拷贝这几行dtd -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 根节点叫做hibernate-mapping,package表示User所在的包名
子节点的class,name属性写类名,package和name组成一个完全限定名
所以不写package的时候name属性要写完全限定名,table写表名---->
<hibernate-mapping package="com.kaishengit.pojo"> <class name="User" table="user">
<!-- pojo中的属性要对应表里面的列 -->
<!-- id这个节点是主键列,name写属性的名字,column
是表中列的名字,作为主键还要有生成策略
generator class="native"native表示自动增长-->
<id name="id" column="id">
<generator class="native"/>
</id>
<!-- 剩下普通列和属性的对应,当name和column相同的时候可以只
写name-->
<property name="username"/>
<property name="password" column="password"/> </class>
</hibernate-mapping>

4. 创建Hibernate配置文件(hibernate.cfg.xml)总配置文件
建在根目录下

    <?xml version="1.0" encoding="UTF-8"?>
<!-- 打开jar包中的hibernate-configuration-3.0.dtd,复制这几行dtd -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 这个session和http中的session没有关系 -->
<!--\hibernate-release-4.1.1.Final\hibernate-release-4.1.1.Final\project\etc的hibernate.properties -->
<session-factory>
<!-- 以hibernate.开头的可以省略hibernate. -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 方言(较好的移植性) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- c3p0数据源(以前用的dbcp)
需要pom中导入这两个jar包
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.0.Final</version>
</dependency>-->
<property name="c3p0.max_size">10</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.timeout">5000</property>
<property name="c3p0.max_statements">100</property>
<property name="c3p0.idle_test_period">3000</property>
<property name="c3p0.acquire_increment">2</property>
<property name="c3p0.validate">false</property> <!-- 执行的时候能看到sql语言 -->
<property name="show_sql">true</property>
<!-- 把session放到当前线程里 比如放在main方法中就是放在主线程里,使用的
时候就可以获得session.-->
<property name="current_session_context_class">thread</property>
<!-- 表明映射文件的位置 -->
<mapping resource="com/kaishengit/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>

5. 运行

Hibernate对pojo的要求:
1属性要有对应的get和set方法
2要有无参数的默认构造方法
3 不要使用final进行修饰

    //configure()才会去读取hibernate,cfg.xml
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry= new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
/* 最终是为了创建sessionfactory,这是4.0 3.0的hibernate只需要
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();*/
Session session = sessionFactory.getCurrentSession(); /* 增删改查都在事务中完成 session.beginTransaction();
session.getTransaction().commit();或者
session.getTransaction().rollback();*/
session.beginTransaction(); User user = new User();
user.setUsername("jack");
user.setPassword("123"); session.save(user); session.getTransaction().commit();
/*或者Transaction tran = session.beginTransaction();
tran.commit();*/

应该只有一个sessionfactory而且读取配置文件
Configuration cfg = new Configuration().configure();应该也只读一次
所以写成单例模式

public class HibernateUtil {
// 静态只读一次
private static SessionFactory factory = buildSessionFactory(); private static SessionFactory buildSessionFactory() {
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry= new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
return cfg.buildSessionFactory(serviceRegistry);
}
//提供获取sessionfactory方法
public static SessionFactory getSessionFactory() {
return factory;
}
// 提供获取session的方法
public static Session getSession() {
return getSessionFactory().getCurrentSession();
} }

test中

public class Test {

    public static void main(String[] args) {
//添加
User user = new User();
user.setUsername("tom");
user.setPassword("000000"); Session session = HibernateUtil.getSession();
session.beginTransaction();
// 保存要放在事务中
session.save(user);
session.getTransaction().commit(); // 查询
Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 ,根据主键查询
User user = (User) session.get(User.class, 1);
System.out.println(user.getUsername());
session.getTransaction().commit(); // 删除 Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 ,查出来才能删,会输出两条sql语句
User user = (User) session.get(User.class, 2);
session.delete(user);
session.getTransaction().commit(); //修改 Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 查出来才能修改
User user = (User) session.get(User.class, 1);
//只有当set的值跟以前不一样才回去执行update修改
user.setUsername("jack");
session.getTransaction().commit(); // 查询所有
Session session = HibernateUtil.getSession();
String hql = "from User";// User是类名,不是表名,要切记
Query query = session.createQuery(hql);
List<User> userList = query.list();
for(User user : userList) {
System.out.println(user.getUsername() + " : " + user.getPassword());
} }
}

hibernate的配置 1的更多相关文章

  1. Hibernate 基础配置及常用功能(一)

    本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...

  2. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  3. 【转】Spring+Hibernate+EHcache配置(一)

    大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...

  4. Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...

  5. Hibernate——hibernate的配置测试

    Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...

  6. Hibernate学习笔记2.1(Hibernate基础配置)

    Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...

  7. t3用户-角色-权限hibernate经典配置

    用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...

  8. hibernate核心配置

    # hibernate核心配置 注意:  - hibernate.cfg.xml默认放在src目录下(这样可以自动加载该文件) - 必须配置的参数:   * 数据库的四大参数和方言  - 可选配置的参 ...

  9. Hibernate常见配置详细解释

      <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1. ...

  10. (转)Hibernate的配置详解

    http://blog.csdn.net/yerenyuan_pku/article/details/65041077 在<Hibernate快速入门>一文中,我有讲到Hibernate的 ...

随机推荐

  1. PID教程

    PID教程 介绍 本教程将向您展示了比例每一个比例项 (P)的特点,积分项(I)和微分项 (D) 控制,以及怎样使用它们来获得所需的响应.在本教程中,我们会考虑下面单位反馈系统: Plant[被控对象 ...

  2. gcc 的编译过程

    通常我们都是使用下面的命令来直接生成可执行文件 gcc demo.c -o demo 对于我们来说十分简单,但是对编译器来说却完成了一系列复杂的工作,概括起来有如下几步: 1. 预处理 gcc -E ...

  3. python 以面向对象的方式创建线程 实现售票系统

    ---恢复内容开始--- 转载或借鉴请注明转自http://www.cnblogs.com/FG123/p/5068556.html   谢谢! 通过面向对象的方法实现多线程,其核心是继承thread ...

  4. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  5. C# Convert an enum to other type of enum

    Sometimes, if we want to do convert between two enums, firstly, we may think about one way: var myGe ...

  6. yield return in C#

    Yield has two great uses It helps to provide custom iteration with out creating temp collections. It ...

  7. SubLime BracketHighlighter 配置

    很多插件在github上都有比较详细的说明  告知安装位置什么的一般来说 插件都是放在Packages目录里面的   从Github上下载 解压得到的文件夹然后放入到Packages中这个目录在哪里呢 ...

  8. Sublime Text2

    Ctrl+L选择整行(按住-继续选择下行) Ctrl+KK 从光标处删除至行尾 Ctrl+Shift+K 删除整行 Ctrl+Shift+D 复制光标所在整行,插入在该行之前 Ctrl+J 合并行(已 ...

  9. js函数调用模式总结

    在javascript中一共有四种调用模式:方法调用模式.函数调用模式.构造器调用模式和apply调用模式.这些模式在如何初始化关键参数this上存在差异 方法调用模式 当一个函数被保存为对象的一个属 ...

  10. CPU卡

    CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机.人们经常使用的集成电路卡(IC卡)上的金属片就是CPU卡芯片.CPU卡可适用于金融.保险.交警.政府行业等多个领域,具有 ...