标签:setuid value 交互 column 直接 pass 路径 roo query
1.什么叫hibernate?
Hibernate说的最简单实际上是一种能能够 直接操作 JAVA对象 和 数据库 进行 交互 的一个技术,hibernate就是直接桥梁
JAVA对象<-----Hibernate<----数据库
HIbernate:是用来访问数据库的一种框架
是一个非侵入式的ORMapping框架
是一个对象关系映射的框架
是一个能够将JAVA对象直接映射到关系型数据库的
Hibernate---->JAVA对象------>关系型的数据库
非侵入式框架:
就是我们在使用这个框架的时候,不需要让我们原来的代码来 继承于某些特定的类,或者实现某些特定的类 的这种类型框架。
侵入式框架呢:
就是我们在使用这个框架的时候需要 继承或者实现 某些特定的类或者接口的这种类型的框架。
O------->Object(对象)
R------->Relation(关系型的数据库)
M------->Mapping->映射
2.为什么我们要学习Hbernate呢?
JDBC: 操作数据库需要编写复杂的交互代码====>效率比较高,但是代码比较复杂,很多
Dbutils: 需要编写复杂的Sql代码
Hibernate: 在这个情况下就应运而生了,它减少了程序员要编写Sql的负担,但是同时也降低了程序运行的效率, 也就是说:最终Sql语句的生成是由Hibernate来完成的,所以效率就降低了
3.使用hibernate步骤
* 因为hibernate是持久层(Dao层)的解决方案,既可以建立java工程也可以建立WEB工程
第一步:建立一个JAVA工程或者Web工程
第二步:导入我们的Hibernate的jar包
路径:hibernate-release-5.2.10.Final\lib\required--->改文件夹下面所有架包
第三步:在工程的src目录下config 创建一个名字是 hibernate.cfg.xml的全局配置文件
hibernate.cfg.xml代码:
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/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:///hibernatetest</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<!--配置方言 -->
<!-- org.hibernate.dialect.MySQL57InnoDBDialect -->
<!--org.hibernate.dialect.MySQL5InnoDBDialect -->
<property name="dialect">org.hibernate.dialect.MySQL57InnoDBDialect</property>
<!--让数据库自动创建表 -->
<property name="hbm2ddl.auto">update</property>
<!--在控制台打印SQL语句 -->
<property name="show_sql">true</property>
<!--格式化SQL语句 -->
<property name="format_sql">true</property>
<!--添加映射路径 -->
<mapping resource="com/my/test/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
第四步:建立我数据库对应的实体 User类
User类代码:
package com.my.test;
/**
* Description:User实体类
* Copyright (c) 2017 J.K
* Program Name:User.java
* Date: 2017年9月4日 下午6:50:02
*
* @author : 西瓜瓜
* @version : 1.0
*/
public class User {
private int uid;//注意设置主键的时候类型
private String uname;
private String upwd;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int uid, String uname, String upwd) {
super();
this.uid = uid;
this.uname = uname;
this.upwd = upwd;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", upwd=" + upwd + "]";
}
}
第五步:建立的实体和数据库表之间的映射关系
在实体User类所对应的包里面创建一个映射文件 -----实体类名.hbm.xml
User.hbm.xml代码:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.my.test" auto-import="true">
<!--auto-import="true" :后面使用HQL语句时,自动导入,不需要写全路径 -->
<class name="User" table="t_user" auto-import="true">
<!--配置主键 -->
<id name="uid" column="u_id">
<!--主键生成策略 -->
<!--
class="uuid": 主键是String类型的时候用
class="increment": 主键是int类型的时候用
-->
<generator class="increment"></generator>
</id>
<!-- 普通配置属性 -->
<property name="uname" column="u_name" type="java.lang.String"> </property>
<property name="upwd" column="u_pwd" type="java.lang.String"> </property>
</class>
</hibernate-mapping>
第六步:在hibernate.cfg.xml文件中,添加我们的映射文件的路径(第三步图里面)
路径为全路径名
第七步:编写我们的测试类
Test001.java代码(一个简单测试类)
package com.my.test;
import static org.junit.Assert.*;
import java.util.List;
import javax.swing.plaf.synth.SynthSeparatorUI;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;
/**
* Description:测试类
* Copyright (c) 2017 J.K
* Program Name:Test001.java
* Date: 2017年9月4日 下午7:09:48
*
* @author : 西瓜瓜
* @version : 1.0
*/
public class Test001 {
@Test
public void test() throws Exception {
//加载配置文件
Configuration cfg = new Configuration().configure("config/hibernate.cfg.xml");
//创建session工厂
SessionFactory sfg = cfg.buildSessionFactory();
//打开session
Session openSession = sfg.openSession();
//开起事物
openSession.beginTransaction();
//业务逻辑处理**************************
User user = new User(1,"西瓜瓜","123");
openSession.save(user);
//业务逻辑处理**************************
//提交事物
openSession.getTransaction().commit();
//关闭session
openSession.close();
//关闭工厂
openSession.close();
}
}
注*:除了业务逻辑,事物代码外,其他的都是重复的,可以封装成hibernate工具类
因此,简化代码如下:
HibernateUtil.java代码:
package com.my.utils;
import static org.hamcrest.CoreMatchers.nullValue;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Description:HibernateUtil工具类
* Copyright (c) 2017 J.K
* Program Name:HibernateUtil.java
* Date: 2017年9月4日 下午9:21:26
*
* @author : 西瓜瓜
* @version : 1.0
*/
public class HibernateUtil {
private static Configuration cfg =null;
private static SessionFactory sfg =null;
//加载配置,创建session工厂设置为全局变量
static{
cfg = new Configuration().configure("config/hibernate.cfg.xml");
sfg = cfg.buildSessionFactory();
}
//打开session(不能设置为全局变量)
public static Session getSession() {
return sfg.openSession();
}
//关闭资源
public static void close(Session session,SessionFactory sfg) {
if(null !=session){
session.close();
}
if(null !=sfg){
sfg.close();
}
}
}
后面会继续更新……
标签:setuid value 交互 column 直接 pass 路径 roo query
原文地址:http://www.cnblogs.com/xiguamiao/p/7476637.html