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的 ...
随机推荐
- JAVA词汇大全
JAVA词汇大全 A B C D E F H I J L M O P R S T U V W A Abstract Window Toolkit(AWT)抽象窗体工具集 一个用本地图形组件实现的 ...
- Nice way for strip_tags a like
I found this code works great as the function strip_tags in php to replace html tags from string and ...
- 关于css的默认宽度
<div class="boxa"> <div class="boxb">我是div</div> </div> ...
- 微型 ORM 的第一篇 DapperLambda发布
引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions 到现在用的FluentDat ...
- USACO Section 5.3 Big Barn(dp)
USACO前面好像有类似的题目..dp(i,j)=min(dp(i+1,j),dp(i+1,j+1),dp(i,j+1))+1 (坐标(i,j)处无tree;有tree自然dp(i,j)=0) .d ...
- [NewCoder]复杂链表的复制
看下面一个链表结点的定义: struct ComplexListNode { int val; struct ComplexListNode *next; struct ComplexListNode ...
- linux基础命令整理
1 显示当前工作目录 pwd 2 查看目录下的所有内容 ls ls -l 以列方式查看 ls -a 显示所有 ...
- C#获取桌面壁纸图片的路径(Desktop Wallpaper)
原文 C#获取桌面壁纸图片的路径(Desktop Wallpaper) 利用 Windows 的 API 获取桌面壁纸的实际路径,使用的是 SystemParametersInfo 这个API,此AP ...
- 《UNIX环境高级编程》笔记--文件共享
1.文件共享 内核使用3种数据结构来表示打开的文件,他们的关系如下: 每个进程都有一张进程表项,记录进程打开的文件: fd标志:close_on_exec,若一个文件描述符在close_on_exec ...
- COM编程之IUnknown接口
COM组件其实是一种特殊的类,遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个类的函数和方法,也就可以做到组件通用. com就是统一的标准--通过接口来调用com组件.接口是你的com组件能 ...