Hibernate入门学习
2015-05-27 15:31
274 查看
接下来我们就可以来进行我们的实体开发了:
User.java
<span style="font-size:14px;">package toone.com.cn.bo;
import java.util.Date;
public class User {
private int id;//必须有主键,因为hibernate很多方法都需要用到主键id
private String name;
private Date birthday;//必须提供默认的构造方法,这里没有,但是所有类都带有默认的构造方法;</span></span>
User.java
<span style="font-size:14px;">package toone.com.cn.bo;
import java.util.Date;
public class User {
private int id;//必须有主键,因为hibernate很多方法都需要用到主键id
private String name;
private Date birthday;//必须提供默认的构造方法,这里没有,但是所有类都带有默认的构造方法;</span></span>
<pre name="code" class="java"><span style="font-size:14px;"><span style="font-size:14px;"> 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 Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }</span>
<span style="font-size:14px;"><span style="font-family: Arial; line-height: 26px;">User.hbm.xml(映射文件)</span> </span>
<span style="font-family: Arial; line-height: 26px;"><span style="font-size:14px;"></span></span><pre name="code" class="html"><span style="font-size:14px;"><hibernate-mapping package="toone.com.cn.bo.domain"> <class name="User" table="user"><!--这里的table值对应数据库中的表名;如果没有table值,默认等于类名小写 --> <id name="id" column="id"> <span style="white-space:pre"> </span><generator class="native"></generator><!--采用主键自增长方式--> </id> <property name="name" column="name"/><!-- 这里的column值对应数据库中的属性名;如果没有column值,默认等于属性名 --> <property name="birthday" column="birthday"/> </class> </hibernate-mapping></span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;">Main.java</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import toone.com.cn.bo.User; public class Main { public static void main(String[] args){ //这里千万注意,不能写成Configuration cfg = new Configuration();否则会报Hibernate Dialect must be explicitly set 错误信息将我们误导 //;实际上前面我们已经配置了mysql的方言; Configuration cfg = new Configuration().configure();//对于configure()方法,我们可以引入其源代码进行查看,其会在类路 //径下自动去加载一个默认的hibernate.cfg.xml文件;如果我们想换其他名字,可以使用其重载方法,具体可以查看其源代码(下载的压缩包中有) SessionFactory factory = cfg.buildSessionFactory(); User user = new User(); user.setName("Kobi"); user.setBirthday(new Date()); Session session = null; Transaction tx = null; try { session = factory.openSession(); tx = session.beginTransaction();//开启事务 session.save(user);//进行保存 tx.commit();//提交事务 } catch (HibernateException e) { if(tx!=null){ tx.rollback();//回滚事务 } throw e;//必须抛出异常 }finally{ if(session!=null){ session.close();//关闭session } } } }</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;">HibernateUtils.java</span>
<span style="font-family: Arial; line-height: 26px; white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn.util; import java.io.Serializable; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sessionfactory; private HibernateUtils(){} static{ Configuration cfg = new Configuration().configure(); sessionfactory = cfg.buildSessionFactory(); } public static Session getSession(){ return sessionfactory.openSession(); } //添加 public static void add(Object obj){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); session.save(obj);//区别:save()方法如果没有开启事务,它会执行一条插入语句,但之后由于没有提交事务,它又进行 //session.persist(obj);//回滚了,而persist()方法在没有开启事务的时候,它根本不会去执行,即没有那条插入语句 tx.commit(); }finally{ if(session!=null){ session.close(); } } } //修改 public static void update(Object obj){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); session.update(obj); tx.commit(); }finally{ if(session!=null){ session.close(); } } } //删除 public static void delete(Object obj){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); session.delete(obj); tx.commit(); }finally{ if(session!=null){ session.close(); } } } //查找 不需要开启事务 public static Object findById(Class clazz,Serializable id){ Session session = null; try { session = HibernateUtils.getSession(); //这里需要区分一下get()与load()的区别,load()不会立即//去访问数据库只有在第一次使用的时候才会去加载(懒加载); //load方法永远不可能返回空对象(如果不存在,其会产生一个user的子类)具体可以去查资料区别这两个方法 //Object obj = session.load(clazz, id); Object obj = session.get(clazz, id);return obj;}finally{if(session!=null){session.close();}}}} </span>
<p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;">最后,一个实体的增删改查操作就完成了,下面我们可以重写Main.java文件来使用HibernateUtils工具类来对实体进行操作了:</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;">Main.java</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; line-height: 26px;"><span style="white-space: pre;"></span><pre name="code" class="html"><span style="font-size:14px;">package toone.com.cn; import java.util.Date; import toone.com.cn.bo.User; import toone.com.cn.util.HibernateUtils; public class Main { public static void main(String[] args){ User user = new User(); user.setName("Kobi"); user.setBirthday(new Date()); HibernateUtils.add(user);//添加 user.setName("Jams"); HibernateUtils.update(user);//修改 HibernateUtils.delete(user);//删除 User user1 = (User) HibernateUtils.findById(User.class, user.getId());//查找 System.out.println(user1.getName()); } }</span>总结:了解了Hibernate的基本作用,学会了使用其来进行增删改查操作,算是工作之余的一点收获吧,以后还得继续坚持发帖,不断学习!
相关文章推荐
- Hibernate的学习之路二(入门)
- Hibernate的学习之路四(入门代码)
- hibernate 入门学习
- Hibernate学习笔记 -- day02 hibernateAPI详解以及入门案例演示
- java学习:Hibernate入门
- Hibernate学习(2)入门案例
- Hibernate入门学习笔记2
- 数据持久层框架Hibernate入门学习
- Hibernate的学习之路二(入门)
- Hibernate的学习之路四(入门代码)
- Hibernate入门学习(2)----Hibernate Tools的安装及环境的搭建
- Hibernate入门学习(3)----第一个Hibernate例子
- Hibernate入门学习(4)----Hibernate配置文档常用总结
- 框架学习之Hibernate 第五节 HQL和Criteria查询入门
- 二、框架学习 (一)Hibernate框架学习 (1)Hibernate入门和基本操作
- hibernate 入门学习 Demo
- Hibernate入门学习笔记1
- Hibernate框架入门(学习笔记)
- hibernate学习笔记--入门
- Hibernate的学习之路二(入门)