Hibernate简单例子以及笔记


先创建Person类,代码如下:(Person.java)

import java.util.*;

public class Person {

public int id;

public String name;

public String password;

public Date birthday;

public Person() {

}

public Person(String name, String password, Date birthday) {

super();

this.name = name;

this.password = password;

this.birthday = birthday;

}

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + ", password=" + password

+ ", birthday=" + birthday + "]";

}

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 String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

}

创建person的映射,代码如下:(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>

<!-- 配置要映射的类 -->

<class name="Person" table="person" >

<id name="id" column="id">

<generator class="native"/>

</id>

<!-- column如果不写,那么会根据name中的值,自动创建;若已存在的话,那就自动映射 -->

<property name="name"></property>

<property name="password" column="password"></property>

<property name="birthday" column="birthday"></property>

</class>

</hibernate-mapping>

配置Hibernate文件,代码如下:(hibernate.cfg.xml)

<!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的属性的值都可以从hibernate文件包中的hibernate.properties拷贝,根据不同数据库类型,复制不同的语句 -->

<!--  数据库方言,就是能让数据库发挥最大的特性  -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 加载数据库的驱动 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- 要连接的数据库,相当于获取连接吧 -->

<property name="hibernate.connection.url">jdbc:mysql:///hibernatedemo</property>

<!-- 数据库账号 -->

<property name="hibernate.connection.username">root</property>

<!--  数据库密码  -->

<property name="hibernate.connection.password">123456</property>

<property name="show_sql">true</property>

<!-- 若表不存在,,添加这句可以自动建表 -->

<!--

create-drop 每次启动时候创建对应数据表结构,在SessionFactory关闭时候删除对应的表结构

create 每次启动时候删除上次创建的表结构然后重新创建一个新的表结构

validate 每次启动时候会验证并修改表结构

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 映射,这个resource的路径一定要写正确,要写上包名,可以右击那个文件,选择roperties就可以看到路径,把src后面的复制黏贴过来即可 -->

<mapping resource="Person.hbm.xml"/>

</session-factory>

</hibernate-configuration>

创建Test类,主要用于测试各个功能,代码如下:(Test.java)

import org.hibernate.*;

import org.hibernate.cfg.*;

import org.hibernate.metamodel.source.annotations.entity.ConfiguredClass;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.hibernate.service.spi.ServiceBinding;

public class Test {

public static void main(String[] args) {

// test();

// sava();

// get();

// load();

// update1();

// update2();

// merge1();

merge2();

}

private static void merge2() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = new Person();

p1.setId(4);

p1.setName("tttmm");

Person p2 = (Person) session.merge(p1);

p1.setName("uuudhaf");

p2.setName("kkkkjjss");

tx.commit();

session.close();

}

private static void merge1() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.load(Person.class, 3);

p1.setName("jjoo");

Person p2 = (Person) session.merge(p1);

// p1.setName("oojj");

// p2.setName("qqww");

p2.setName("qqww");

p1.setName("oojj");

tx.commit();

session.close();

}

private static void update2() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = new Person();

p1.setName("ooxx");// 同样执行这句时候,因为p1是临时态,因此此时的name并没有改变

p1.setId(4);

// session.update(p1);

// p1.setName("xxoo");

tx.commit();

session.close();

}

private static void update1() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.get(Person.class, 3);

p1.setName("tom"); // 这句执行完毕的时候,数据库中的name已经变成了tom了。这就是持久态的一种作用。

// session.update(p1);

// p1.setName("lalala");

// //此时数据库中的name变成了lalala,就是上面说的实时改动,也可看做是一种数据库一天记录的引用,,,一有改变就改变。

tx.commit();

session.close();

}

private static void load() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Person p = (Person) session.load(Person.class, 3);

System.out.println("load----->" + p);

session.close();

}

private static void get() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Person p = (Person) session.get(Person.class, 1);

System.out.println("get----->" + p);

session.close();

}

private static void sava() {

Person p = new Person("kkjj", "123456", new java.util.Date());

Configuration config = new Configuration().configure();

// 这是在hibernate4一种新的获取SessionFactory的方法,这个方法比旧的方法更高效、安全

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

session.save(p);

tx.commit();

session.close();

}

private static void test() {

Person p = new Person("kk", "123", new java.util.Date());

// 读取配置文件

Configuration cfg = new Configuration().configure();

// hibernate的核心接口

// 下面这种方法获取SessionFactory已经被淘汰了,在hibernate4已经用另外的方法了。

SessionFactory factory = cfg.buildSessionFactory();

Session session = factory.openSession();

// 开启事务

Transaction tx = session.beginTransaction();


session.save(p);

// 提交,类似执行吧,可以理解为excetuUpdate()

tx.commit();

session.close();

}

}

				
时间: 2024-10-12 17:43:11

Hibernate简单例子以及笔记的相关文章

struts2,hibernate,spring整合笔记(2)

上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置hibernate时用的javase, 在window-> preferences->java->user libraries,创建一个新的Use libraries,添加相应的jar包 再在项目build path->build configurationpath->add l

Android简单的分享笔记

http://blog.csdn.net/xyz_lmn/article/details/16856843 采用Intent隐式调用Activity的方法,主要使用Intent.ACTION_SEND和Intent.createChooser(); 调用Android系统的分享接口.系统会过滤手机上的具有分享应用的程序,让用户进行选择.如果没有使用Intent.createChooser()则会取系统默认的用户分享方式,只有未设置的情况下才会弹出让用户进行选择. 1.简单的分享文本 1 Inte

Hibernate4注解简单例子

今天经理叫我和搭档做一个文件版本管理工具的Demo给客户,ORM要求需要使用Hibernate4,使用注解开发,之前一直都是在玩Mybatis,hibernate都忘光了...所以重新写了个Hibernate的例子来学习注解. 废话不多说,切入正题.首先建个java项目,引入如下jar包: 其中大部分jar包来自hibernate-release-4.2.13.Final/lib/required目录下的所有jar包以及mysql的驱动jar包,请忽视log4j的包,可有可无...只是个简单例子

七牛云存储C#例用小例子 C#笔记

最近有需求要把网站的图片传到云存储上去.于是就找到了七牛.看上面的SDK...看了才发现里面注释很少.当时看的头大.在网上搜一下,基本上没有好的例子.给初学者带来很大的不便!不过最后还是做出来了.在这里把一些基本的例子放出来.希望给初学者一些帮助. 第一步.首选你得赋值,代码如下(应该都能看懂) Config.ACCESS_KEY = ""; //AK Config.SECRET_KEY = "";//SK Bucket = "";//空间名 D

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Hadoop RPC简单例子

jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型: (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用: (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制: (4)服务器端

extern外部方法使用C#简单例子

外部方法使用C#简单例子 1.增加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", SetLastError = true)] 3.声明外部方法public static extern int GetCurrentDirectory(int a, StringBuilder b); 4.对外部方法操作  GetCurrentDirectory(300, pathstring); using

事件简单例子

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Runtime.InteropServices; 6 7 namespace EventTest 8 { 9 /// <summary> 10 /// 事件订阅者类 11 /// </summary> 12 class Program 13 { 14 static v

spring mvc(注解)上传文件的简单例子

spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少 大家可以看具体代码如下: web.xml &