hibernate的配置 1
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的更多相关文章
- Hibernate 基础配置及常用功能(一)
本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- 【转】Spring+Hibernate+EHcache配置(一)
大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...
- Hibernate缓存配置
一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...
- Hibernate——hibernate的配置测试
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- Hibernate学习笔记2.1(Hibernate基础配置)
Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...
- t3用户-角色-权限hibernate经典配置
用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...
- hibernate核心配置
# hibernate核心配置 注意: - hibernate.cfg.xml默认放在src目录下(这样可以自动加载该文件) - 必须配置的参数: * 数据库的四大参数和方言 - 可选配置的参 ...
- Hibernate常见配置详细解释
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1. ...
- (转)Hibernate的配置详解
http://blog.csdn.net/yerenyuan_pku/article/details/65041077 在<Hibernate快速入门>一文中,我有讲到Hibernate的 ...
随机推荐
- ZOJ 38727(贪心)
这道题真心坑.越想越远 想的飞起来了. 最后纠结起后缀表达式的定义来了. 题意: 就是给你一个串 , 让你用最少改动次数来实它变成一个合法的后缀表达式, 改动方式有两种, 一种是直接加入数字或者 ...
- CVT电子集团--笔试部分试题
之前有在网上答了下CVT的网上笔试题,特别把它们都弄下来,答案参考,不一定是对的,有错希望大家能提出来. 1.有关系R和S,R∩S等价于(B) A.S-(R-S) B.R-(R-S) C.( ...
- Spring 构造注入 传參数
1. 提供相应的构造方法 //构造器注入 public class Bean6 { private String name; private Integer age; // 服务于构造器 ...
- MinGW gcc 生成动态链接库 dll 的一些问题汇总 (补充)
我以前写过一个小短文,介绍MinGW gcc 生成动态链接库 dll 的一些问题.当时写的并不全面.近期又遇到写新的问题.这里记录一下,做个补充. 通常情况下,dll 中的函数假设採用 _stdcal ...
- Jquery 遍历数组之grep()方法介绍
grep()方法用于数组元素过滤筛选. grep(array,callback,boolean);方法参数介绍. array ---待处理数组 callback ---这个回调函数用来处理数组中 ...
- 新建一个类并绑定一个activity
1.新建一个类(.java 文件),继承Android.app.Activity 2.新建一个activity 文件 3.重写onCreate 方法,设置绑定activity 文件 @Override ...
- Android乐学成语之自定义Adapter
一.首先对Adapter概念深刻的了解 首先看看他的继承图
- list根据所存对象属性排序
比如有个list,里面存的是一个个对象,对象有个list属性,其值可以是字符串和数字. private void getSortList(List<AclResource> newList ...
- pl/sql oracle
http://uule.iteye.com/blog/2061773(出处) 批量导入脚本: 打开一个command window > 输入@ > 它会让你选择要导入的文件 (自己要知道 ...
- 【算法】求多个数组中的交集(Java语言实现)
简介: 最近在工作中遇到一个问题,需要离线比较两张Mongodb表的差异:大小差异,相同的个数. 所以,我将导出的bson文件转成了json文件(2G以上),一条记录正好是一行. 问题: 因此我将以上 ...