hibernate快速入门

第一步:下载Hibernate的开发包:
  http://sourceforge.net/projects/hibernate/files/hibernate3

第二步:Hibernate框架目录结构:
  documentation :Hibernate文档
  lib :Hibernate开发jar包
    bytecode :操作字节码jar包.
    jpa :Hibernate的实现jpa规范.
    optional :Hibernate的可选jar包.
    required :Hibernate的必须的jar包.
  project :Hibernate提供的工程

第三步:创建一个工程:(Java工程)
  导入相应jar包:
    hibernate3.jar
    HIBERNATE_HOME/lib/required/*.jar
    HIBERNATE_HOME/lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar
  导入日志记录的包:
    log4j-1.2.16.jar
    slf4j-log4j12-1.7.2.jar
  导入数据库驱动:
    mysql-connector-java-5.0.4-bin.jar

第四步:创建表:(关系型数据库)

create database hibernate3_day01;
use hibernate3_day01;
create table customer(id int primary key auto_increment,name varchar(20),age int
);

第五步:创建一个实体类:(面向对象)

public class Customer {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

第六步:创建ORM的映射
  映射文件只要是一个XML格式文件就可以.名字任意.通常情况下名称规范:实体类名称.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><!-- 建立类与表的映射 --><!-- class标签:用于映射类与表的关系 name :类的全路径  table:表名称 --><class name="cn.yzu.hibernate3.demo1.Customer" table="customer"><!-- 建立类中属性与表中的字段映射 --><!-- 唯一标识 --><!-- 使用id的标签 配置唯一属性 --><!-- 在<id>标签中配置一个主键的生成策略. --><id name="id" column="id"><generator class="native"/></id><!-- 普通属性 --><!-- property标签:映射类中的普通属性 name:类中的属性名称, column:表中字段名称 --><!-- type:三种写法* Java类型        :java.lang.String* Hibernate类型    :string* SQL类型        :不能直接使用type属性,需要子标签<column>* <column name="name" sql-type="varchar(20)"/>--><property name="name" column="name" type="string"/><property name="age" column="age"/></class>
</hibernate-mapping>

第七步:创建一个Hibernate的核心配置文件
  通知Hibernate连接是哪个数据库.在src下创建一个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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate3_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property><!-- Hibernate的方言 --><!-- 生成底层SQL不同的 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选的属性 --><!-- 显示SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- hbm:映射 to DDL: create drop alter --><property name="hibernate.hbm2ddl.auto">update</property><!-- 通知Hibernate加载那些映射文件 --><mapping resource="cn/yzu/hibernate3/demo1/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>

第八步:编写测试

@Test
// 向数据库中插入一条记录
public void demo1(){// 1.Hiberante框架加载核心配置文件(有数据库连接信息)Configuration configuration = new Configuration().configure();// 2.创建一个SessionFactory.(获得Session--相当连接对象)SessionFactory sessionFactory = configuration.buildSessionFactory();// 3.获得Session对象.Session session = sessionFactory.openSession();// 4.默认的情况下,事务是不自动提交.Transaction tx = session.beginTransaction();// 5.业务逻辑操作// 向数据库中插入一条记录:Customer customer = new Customer();customer.setName("任童");customer.setAge(28);session.save(customer);// 6.事务提交
  tx.commit();// 7.释放资源
  session.close();sessionFactory.close();
}

 

补充:Hibernate中的持久化类

  持久化类:实体类 + 映射文件.
  持久化类是有编写规范:
    提供一个无参数 public访问控制符的构造器(hibernate底层要用到反射
    提供一个标识属性,映射数据表主键字段 :
      java区分两个对象是否是同一个是使用地址.
      数据库区分两条记录是否一致是使用主键.
      Hibernate中区分持久化对象是否是同一个,根据唯一标识:
    所有属性提供public访问控制符的 set get 方法 :框架中存值和取值的时候使用.
    标识属性应尽量使用基本数据类型的包装类型
      若使用基本数据类型,如下例,当成绩是0时,并不能区分该同学是没有参加考试还是考试得了0分,如果使用包装类型,那么默认值是null,这是null就可以表示没有参加考试,而0就表示该同学考试得了0分
                  成绩表:
            学号      姓名      成绩
            1       张三      0
    持久化类尽量不要使用final进行修饰 :
      用final修饰的类是不能被继承.无法生成代理对象.(延迟加载的时候返回代理对象.延迟加载就失效.)

转载于:https://www.cnblogs.com/fengmingyue/p/6165590.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

U-boot给kernel传参数和kernel读取参数—struct tag

U-boot 会给 Linux Kernel 传递很多参数&#xff0c;如&#xff1a;串口&#xff0c; RAM &#xff0c; videofb 等。 而 Linux kernel 也会读取和处理这些参数。两者之间 通过 struct tag 来传递参数。 U-boot 把要传递给 kernel 的东西保存在 struct tag 数据结构中&#xf…

异步FIFO设计(Verilog)

FIFO&#xff08;First In First Out&#xff09;是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出&#xff08;后进后出&#xff09;。其实&#xff0c;多位宽数据的异步传输问题&#xff0c;无论是从快时钟到慢时钟域&#xff0c;还是从慢时钟到快时钟域&…

python中RabbitMQ的使用(路由键模糊匹配)

路由键模糊匹配 使用正则表达式进行匹配。其中“#”表示所有、全部的意思&#xff1b;“*”只匹配到一个词。 匹配规则&#xff1a; 路由键&#xff1a;routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…

数据仓库事实表分类[转]

1&#xff09;在数据仓库领域有一个概念叫Transaction fact table&#xff0c;中文一般翻译为“事务事实表”。 事务事实表是维度建模的数据仓库中三种基本类型事实表中的一种&#xff0c;另外两种分别是周期快照事实表和累积快照事实表。 事务事实表与周期快照事实表、累积快…

嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

Linux支持多种文件系统&#xff0c;包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等&#xff0c;为了对各类文件系统 进行统一管理&#xff0c;Linux引入了虚拟文件系统VFS(Virtual File System)&#xff0c;为各类文件系统提供一个统一的操作界面和应用编程接口。 …

Codeforces Beta Round #17 C. Balance DP

C. Balance题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes to rotate them, sort them, rearrange characters within a string... Once he wrote a random string of characters a, b, c on a piece of paper and began t…

时钟切换处理(Verilog)

随着各种应用场景的限制&#xff0c;芯片在运行时往往需要在不同的应用下切换不同的时钟源&#xff0c;例如低功耗和高性能模式就分别需要低频率和高频率的时钟。两个时钟源有可能是同源且同步的&#xff0c;也有可能是不相关的。直接使用选择逻辑进行时钟切换大概率会导致分频…

SSH整合中,使用父action重构子类action类.(在父类中获取子类中的泛型对象)

import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type;import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;/*** 文件名 : BaseAction.java* 提取SSH中的action类* 由于SSH的action中采用模型驱动的方法,使用泛…

用BusyBox制作Linux根文件系统

STEP 1&#xff1a;构建目录结构 创建根文件系统目录&#xff0c;主要包括以下目录 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir /home/rootfs #cd /home/rootfs #mkdir dev etc lib usr var proc tmp home roo…

Angular Elements 组件在非angular 页面中使用的DEMO

2019独角兽企业重金招聘Python工程师标准>>> 一、Angular Elements 介绍 Angular Elements 是伴随Angular6.0一起推出的新技术。它借助Chrome浏览器的ShadowDom API&#xff0c;实现一种自定义组件。 这种组件可以用Angular普通组件的开发技术进行编写&#xff0c;…

(转) android里,addContentView()动态增加view控件,并实现控件的顶部,中间,底部布局...

http://blog.csdn.net/bfboys/article/details/52563089转载于:https://www.cnblogs.com/zhangminghan/p/6182909.html

verilog仿真——$test$plusargs 和 $value$plusargs

VERILOG的参数可以用define和parameter的方式定义&#xff0c;这种方法要求我们在编译前将变量必须定义好&#xff0c;编译完成之后再也不能修改&#xff1b; 然而&#xff0c;有时候我们在进行仿真时&#xff0c;需要从外部传递参数&#xff0c;这个要求怎么满足呢&#xff1…

卢卡斯定理

卢卡斯定理:解决一类组合数取模问题 A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余 即&#xff1a;Lucas(n,m,p)c(n%p,m%p)*Luc…

内核理解

在纯技术方面&#xff0c;内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件&#xff0c;并充当底层的驱动程序&#xff0c;对系统中的各种设备和组件。内核启动init程序作为第一个进程&#xff0c;该进程负责进一步的系统初始化操作&#xff0c;并显示登…

loadrunner中对https证书的配置

1、准备好网站的证书&#xff0c;一般证书是cer格式&#xff1b; 2、因为loadrunner只支持pem格式的证书&#xff0c;所以要将证书转换格式&#xff0c;利用openssl工具&#xff1b;&#xff08;或者直接让开发提供pem格式的证书&#xff09;3、得到pem格式的证书之后&#xff…

Android 9 Pie震撼来袭 同步登陆WeTest

作者&#xff1a;We Test小编商业转载请联系腾讯WeTest获得授权&#xff0c;非商业转载请注明出处。原文链接&#xff1a;wetest.qq.com/lab/view/40…WeTest 导读2018年8月7日&#xff0c;Google对外发布最新 Android 9.0 正式版系统&#xff0c;并宣布系统版本Android P 被正…

Datapath综合代码规范(Verilog)

一、一般准则 1、有符号数运算 利用类型“signed”完成有符号数运算&#xff0c;而不是用无符号数模拟有符号数运算。这样可以得到更好的QoR。在资源报告中检查操作数的类型和大小。 2、符号/零扩展 尽量不要手动扩展。verilog利用signed/unsigned会自动完成扩展。这样代码可…

Linux下V4L2编程小结

http://www.360doc.com/content/12/0318/16/532901_195392228.shtml :davind dm365linux移植 http://www.embedhq.org/html/jsbw/2010/0425/390.html :Linux下V4L2编程小结

百(垃)度(圾)之星初赛B hdu6114

Chess 题意&#xff1a;中文题 思路&#xff1a;其实就是在n个格子上放m个棋子&#xff08;n>m&#xff09;&#xff08;xjb套Lucas的板子... AC代码&#xff1a; #include "iostream" #include "string.h" #include "stack" #include "…

variable 'xxx' unsafe in 'case'的处理

问题描述&#xff1a; case get(?Player_LoopTaskInfo) of{TargetCnt, TaskStar, TaskExp} ->ok;_ ->throw("not_found_loop_task_info") end 在case语句中&#xff0c;这样写&#xff0c;编译时&#xff0c;会提示变量unsafe&#xff0c;解决编译器报错的…