版权声明:本文为博主原创文章,如需转载请标注转载地址

博客地址:http://www.cnblogs.com/caoyc/p/5593406.html 

环境:

myelipse2015+Hibernate5.2+mysql

一、新建一个hibernate01的Java项目并导入jar包

  1、在hibernate01项目下添加一个lib文件夹,用于存储需要的jar包

  2、在lib下面添加hibernate需要的jar包,在下载的hibernate文件中,找到\hibernate-release-5.2.0.Final\lib\required,并将下面的所有文件拷贝到lib中

  

  3、将mysql的驱动包mysql-connector-java-5.1.39-bin.jar拷贝到lib下

  4、选中lib下面所有文件,点击右键->Build Path->Add to Build Path

  

  

二、在mysql中建立一个test数据库,数据库中建一个person表

 CREATE TABLE `person` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) DEFAULT NULL,
`Age` tinyint(4) DEFAULT NULL,
`Gender` varchar(20) DEFAULT NULL,
PRIMARY KEY (`Id`)
)

三、类型对象和映射

  1、新建一个com.mypro.domain包

  2、在com.mypro.domain包下建一个Person的实体类

 package com.mypro.domain;

 public class Person {

     private int id;
private String name;
private int age;
private String gender;
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", gender=" + gender + "]";
} }

  3、配置实体类和数据库中表和字段的映射,在该包下建一个Person.hbm.xml文件,内容如下:

 <?xml version="1.0"?>

 <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.mypro.domain">
<class name="Person" table="person">
<id name="id" column="Id" type="int">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="age" column="Age" type="int"></property>
<property name="gender" column="Gender" type="string"></property>
</class>
</hibernate-mapping>

  package:实体类所在的包

  <class>标签:name:需要映射实体类的类名;table:数据库中对于的表明

  <id>标签:为数据库中主键字段配置,其它非主键字段用property来配置。name:实体类中属性名称,column:数据库中列名,type:属性类型

  <generator>标签:自动增长

  <properyt>标签:配置field主键字段使用

四、配置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 name="mysqldb"> <!-- 配置方言:选择数据库类型 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置数据库连接信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test?characterEncoding=utf8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> <!-- 允许显示sql语句 -->
<property name="show_sql">true</property>
<!-- 导入映射文件 -->
<mapping resource="com/mypro/domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>

五、测试

  

 package com.mypro.domain;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class App { private static SessionFactory sessionFactory;
static{ //通过配置类加载hibernate.cfg.xml
Configuration config=new Configuration();
config.configure("hibernate.cfg.xml");
//获取SessionFactory对象
sessionFactory= config.buildSessionFactory();
} /**
* 添加Person对象到数据库中
* @return 返回自动增长ID
*/
public int addPerson(){
Session session=null;
Transaction tran=null;
try{
//获取Session对象
session=sessionFactory.openSession();
//启用事务
tran=session.beginTransaction();
Person person=new Person();
person.setName("张三");
person.setAge(25);
person.setGender("男");
//将数据保存到数据库
session.save(person);
//提交事务
tran.commit();
return person.getId();
}catch(Exception e){
if(tran!=null){
tran.rollback();
}
e.printStackTrace();
return 0;
}finally{
if(session!=null){
session.close();
}
}
} /**
* 通过ID获取Person对象
* @param id 主键ID
* @return 返回Person对象
*/
public Person getPeronById(int id){
Session session=null;
Transaction tran=null;
try{
session=sessionFactory.openSession();
//获取Person对象,该方法中第一个参数,是需要获取对象的类型
Person person= session.get(Person.class, id);
return person;
}catch(Exception e){
e.printStackTrace();
return null;
}finally{
if(session!=null){
session.close();
}
}
} public static void main(String[] args) {
App a=new App();
int id= a.addPerson();
Person p=a.getPeronById(id);
System.out.println(p);
}
}

  

  控制台输出结果:

Hibernate: insert into person (name, Age, Gender) values (?, ?, ?)
Hibernate: select person0_.Id as Id1_0_0_, person0_.name as name2_0_0_, person0_.Age as Age3_0_0_, person0_.Gender as Gender4_0_0_ from person person0_ where person0_.Id=?
Person [id=1, name=张三, age=25, gender=男]

Hibernate 入门示例的更多相关文章

  1. Linq to NHibernate入门示例

    Linq to NHibernate入门示例 NHibernate相关: 09-08-25连贯NHibernate正式发布1.0候选版 09-08-17NHibernate中一对一关联的延迟加载 09 ...

  2. Spring(二)之入门示例

    任何编程技术,特别是入门示例,通常都是Hello World,在这里我也遵循这个业界公认的原则. 这里我使用的maven项目,大家如果想要演示,建议使用Eclipse(含maven插件)或Idea(含 ...

  3. 三大框架之hibernate入门

    hibernate入门   1.orm      hibernate是一个经典的开源的orm[数据访问中间件]框架           ORM( Object Relation Mapping)对象关 ...

  4. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

  5. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  6. Maven入门示例(3):自动部署至外部Tomcat

    Maven入门示例(3):自动部署至外部Tomcat 博客分类:  maven 2012原创   Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...

  7. 1.【转】spring MVC入门示例(hello world demo)

    1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于 ...

  8. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  9. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

随机推荐

  1. 子查询在DELETE语句中的应用

    子查询在DELETE 中唯一可以应用的位置就是WHERE 子句,使用子查询可以完成复杂的数据删除控制.其使用方式与SELECT 语句中的子查询基本相同,而且也可以使用相关子查询等高级的特性.下面的SQ ...

  2. python队列、线程、进程、协程(转)

    原文地址: http://www.cnblogs.com/wangqiaomei/p/5682669.html 一.queue 二.线程 #基本使用 #线程锁 #自定义线程池 #生产者消费者模型(队列 ...

  3. 【动态规划/递推】BZOJ1806[IOI2007]- Miners

    IOI历史上的著名水题,我这种蒟蒻都能写的东西. [思路] 用1.2.3分别代替三种食物,0表示当前矿井没有食物.f[i][a][b][c][d]当前第i个食物,矿1的食物顺序由上至下为a,b:矿2的 ...

  4. iOS .a静态库的制作及使用

    一.制作.a静态库 1.创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK.

  5. Linux下KVM虚拟机基本管理及常用命令(转)

    说明:可能有重复 一.KVM的基本管理 1.查看KVM虚拟机配置文件 #Kvm虚拟机默认配置文件位置 [root@kvm qemu]# pwd /etc/libvirt/qemu [root@kvm ...

  6. ORACLE查询表最近更改数据的方法

    修改项目时,涉及到了Oracle中许多表的修改(包括:增加.删除字段,修改注释等).由于开始没有进行记录,造成在上测试机时,忘记了具体修改过哪些表了.后来在网上查找了一些资料,例如: 1.select ...

  7. 二八定律全面分析SEO全过程

    首先,大体的了解SEO的整个流程,SEO的整个流程无非是:关键词选定.标题标签描述的正确描写---内部优化----外链----内容---友情链接---更新. 在SEO界流行这样一句话:“内容为王,外链 ...

  8. centos7 将服务添加到systemctl

    centos7中提供了systemd服务,可以方便的管理各种服务 但是有些通过编译安装的服务systemd里面没有,我们只需要添加一下服务文件即可 以下用nginx作为例子,展示如何添加服务到syst ...

  9. 解决 KendoUI TabStrip 高度 100% 问题

    摘自: http://www.kendoui.com/forums/kendo-ui-web/tabstrip/forcing-tabstrip-to-take-up-100-of-it-s-pare ...

  10. Docker Swarm 让你事半功倍

    2016 年 DockerCon (天啊……我多么希望我当时在场)上展示的最重大的变革之一就是 1.12 版本引擎的 Swarm 模式.它意味着什么呢?它意味着:如果你在运行 Docker 1.12时 ...