Hibernate连接数据库
包结构如下图所示(按图标进行对齐):
环境搭好后代码分为以下几步:
/**
* private static final Configuration CONFIGURATION;
* private static final SessionFactory SESSION_FACTORY;
* 1、加载配置文件
* Configuration CONFIGURATION = new Configuration().configure();
* 2、创建 session工厂
* SessionFactory SESSION_FACTORY = CONFIGURATION.buildSessionFactory();
* 3、创建session (类似于connection)
* Session SESSION_FACTORY.getCurrentSession()
* 4、开启事务
* Transaction tx = session.beginTransaction();
* 5、操作
* 6、提交事务
* tx.commit();(如果 session 不是线程绑定需执行session.close();)
* @author Administrator
*
*/
下面进行详细说明:
创建customer javabean
package cn.itcast.domain; public class Customer {
private long cust_id;
private String cust_name;
private String cust_source;
private String cust_industry;
private String cust_level;
private String cust_phone;
private String cust_mobile;
public long getCust_id() {
return cust_id;
}
public void setCust_id(long cust_id) {
this.cust_id = cust_id;
}
public String getCust_name() {
return cust_name;
}
public void setCust_name(String cust_name) {
this.cust_name = cust_name;
}
public String getCust_source() {
return cust_source;
}
public void setCust_source(String cust_source) {
this.cust_source = cust_source;
}
public String getCust_industry() {
return cust_industry;
}
public void setCust_industry(String cust_industry) {
this.cust_industry = cust_industry;
}
public String getCust_level() {
return cust_level;
}
public void setCust_level(String cust_level) {
this.cust_level = cust_level;
}
public String getCust_phone() {
return cust_phone;
}
public void setCust_phone(String cust_phone) {
this.cust_phone = cust_phone;
}
public String getCust_mobile() {
return cust_mobile;
}
public void setCust_mobile(String cust_mobile) {
this.cust_mobile = cust_mobile;
} }
在javaBean所在的包下创建映射关系文件Customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 建立表和类的映射关系 name类的全路径 table表名 catalog 数据库名(可省略) -->
<class name="cn.itcast.domain.Customer" table="customer" catalog="hibernate">
<!-- id 表示主键 name类属性名 column表中字段名 如果相同可以省略-->
<id name="cust_id" column="cust_id"><generator class="native"/></id>
<!-- property 表示表中的普通属性 -->
<property name="cust_name" column="cust_name"/>
<property name="cust_source" column="cust_source"/>
<property name="cust_industry" column="cust_industry"/>
<property name="cust_level" column="cust_level"/>
<property name="cust_phone" column="cust_phone"/>
<property name="cust_mobile" column="cust_moblie"/>
<!-- length 字段长度 type 数据类型-->
</class>
</hibernate-mapping>
在src下创建Hibernate的配置文件 hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 必要的配置信息 :连接数据库的基本参数 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/Hibernate?characterEncoding=utf8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否输出sql语句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql语句 -->
<property name="format_sql">true</property>
<!-- Hibernat的hbm2ddl(数据定义语言:cteate drop alter ...)-->
<!--
hbm2ddl.auto的取值:
*none :不用Hibernate自动生成表
*create : 每次都会创建一个新的表(测试)
*create-drop:每次都会创建一个表,执行程序结束后删除这个表(测试)
*update :如果数据库中有表使用原来的表,创建一个新表,可以更新表结构
*validate :只会使用原来的表对映射关系进行校验
-->
<property name="hbm2ddl.auto">update</property>
<!-- 配置本地jdbc事务配置 ,通过getCurrentSession创建的session会绑定当前线程
thread 对象生命周期会与本地线程绑定
jta 对象生命周期与JTA事务绑定
managed Hibernate委托程序管理对象的生命周期
-->
<property name="current_session_context_class">thread</property> <!-- hibernate内部维护有一个连接池,如果要使用c3p0 等外部连接池 可以添加相应的jar包后进行配置 -->
<!-- 最小连接数 -->
<property name="c3p0.min_size">5</property>
<!-- 最大连接数 -->
<property name="c3p0.max_size">20</property>
<!-- 设定数据库连接的过期时间 以秒为单位 -->
<property name="c3p0.timeout">120</property>
<!-- 没3000秒检查所有数据库的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property> <!-- 加载映射 -->
<property name="myeclipse.connection.profile"></property>
<mapping resource="cn/itcast/domain/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>
封装加载配置类为工具类:
package cn.util; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* 加载配置文件 封装工具类
* @author Administrator
*
*/
public class HibernateUtil {
private static final Configuration CONFIGURATION;
private static final SessionFactory SESSION_FACTORY;
static{
//加载配置文件
CONFIGURATION = new Configuration().configure();
//创建一个SessionFactory
SESSION_FACTORY = CONFIGURATION.buildSessionFactory();
}
/**
* 提供获得Session的方法
*/
/**
* 直接创建新的Session实例 使用完成后需要调用 close方法手动关闭
* @return
*/
public static Session openSession() {
return SESSION_FACTORY.openSession();
}
/**
* 创建的session会被绑定到当前线程中,它在提交或回滚操作时会自动关闭
* @return
*/
public static Session getCurrentSession(){ return SESSION_FACTORY.getCurrentSession();
}
}
创建测试类进行测试:
public class Demo1 { public static void main(String[] args) {
////获取session
//Session session = HibernateUtil.getCurrentSession();
////开启事务
//Transaction tx = session.beginTransaction();
//Customer customer= new Customer();
//customer.setCust_name("小王");
//customer.setCust_source("网络推广");
//session.save(customer);
////事务提交
//tx.commit();
////如果采用 openSession 获取实例 还需要 执行session.close();释放资源
////session 为轻量级 Configuration SessionFactory为重量级 之间重建所消耗的资源不同 //Session session = HibernateUtil.getCurrentSession();
//Transaction tx = session.beginTransaction();
//Customer customer = session.get(Customer.class,Long.valueOf("1"));
//session.delete(customer);
//tx.commit(); Session session =HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
Customer customer = session.get(Customer.class,Long.valueOf("2"));
customer.setCust_mobile("124575615121");
session.update(customer);
tx.commit();
}
}
Hibernate连接数据库的更多相关文章
- JDBC、mybatis、hibernate连接数据库
JDBC连接数据库五步骤: 一.加载驱动 Class.forName(“com.mysql.jdbc.Driver”); 二.建立连接 Connection conn = DriverManager. ...
- MySQL数据库的使用流程,代码解释+Hibernate连接数据库
数据库的使用流程: 1.注册驱动: 2.用DriverManager.getConnection方法获得连接对象con: A方法: 3.用连接对象的createStatement()方法,获得可以执 ...
- hibernate连接数据库和反向工程
一.JSP界面连接数据库: 导包:将11个包倒进web-inf的lib目录下: 二.建立hibernate.cfg.xml的配置文件:!注意:是放到项目SRC目录下: 三.将视图切换到java下,在左 ...
- hibernate连接数据库和使用
hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...
- Hibernate连接数据库超时设置autoReconnect=true
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat. 不用hibernate的话, connection url加参数: autoReconnect ...
- hibernate连接数据库的步骤
三个准备 一.导包 mysql二.在默认src下创建hibernate.cfg.xml 1.创建xml文件,命名为hibernate.cfg.xml 2.添加约束 (在org.hibern ...
- hibernate 连接数据库时报错
错误信息 : com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allo ...
- *IntelliJ IDEA使用Hibernate连接数据库
在IntelliJ IDEA中配置MySQL Database.
- hibernate连接数据库中文乱码
4.做完这两步还是不行,需要修改hibernate的配置文件hibernate.cfg.xml,在配置文件配置hibernate.connection.url属性.示例: <property n ...
随机推荐
- 用node写个简单的静态服务器
直接上代码吧,我把它命名为 app.js, 只要在该文件所在目录下,控制台运行 node app.js 即可启动一个本地服务器了. /** * 服务器 * Author jervy * Date */ ...
- jquery的$().each,$.each的区别02
在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...
- IDEA使用properties配置文件进行mysql数据路连接
1. 新建一个web项目(过程不需要教了吧,所以就省略啦) 2. 右键点击新建的项目名,选择创建文件目录(Directory),一般properties文件夹命名应为resoures; 3.右键点击新 ...
- 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用
一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...
- NodeJs中数据库的使用
另一遍通用的NODEJS数据库方法koa,express,node 通用方法连接MySQL 1.Node.js 连接 MySQL $ cnpm install mysql 连接mysql: var m ...
- linux 负载各项查看命令
free -h top -c 查看使用情况 sar -r/s/b 查看IO状态 iostat -x 1 10 查看服务器的状态 vmstat 查看内存使用率最后的前10个进程 ps -aux |sor ...
- ORM之创建数据库
ORM之创建数据库 样板:创建表名为UserInfo的表,表的主键可自行写,Django的ORM也可自行创建. from django.db import models class UserInfo( ...
- 关于微信小程序getUserInfo最新修改后,如何在原有项目的授权逻辑的调整
今天一大早调试小程序,结果出现这个...微信小程序也是醉了,这么大的改动,也没有通过开发者服务号通知一声 人在屋檐下不得不低头(改呗,那么如何以最小的代价更新呢,下面给我的解决方案) 原来我们在首次进 ...
- Apollo源码解析看一文就够
对于配置中心我们先抛出问号三连,什么是配置中心?为什么要用配置中心?配置中心怎么用? 笔者说说自己理解的配置中心,个人观点的十六字 消息存储 消息推送 环境隔离 灰度发布 今天我们先来看Apollo配 ...
- python后端开发工程师考证试题
python开发工程师考证试题 问答题链接 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的“ ...