以前听起hibernate总感觉是一个很奇怪的东西,不知道是用做什么,只知道是一个框架,今天对hibernate的学习,使我受益匪浅,知道了hibernate的作用。
以前在写程序的时候看,特别是在编写连接数据库程序的时候,总要用到jdbc,提前都感觉到jdbc是一个很好的手工方式,并没有想到更好的实现方法,也不知道jdbc的缺点是什么,因为在做大型项目的时候,必定会要写很多的程序,当然操作数据库的更不可缺,所以每次的有很多都是重复的,而且在对象模型和关系模型之间总会遇到很多的问题,也往往会转来转去的,当用了hibernate后,可以很方便的操作数据,不用写那么麻烦的代码,节省了很多的操作和代码的编写,这样大大提高了代码编写的效率,提高了开发的速度!现在将走向hibernate的世界:
一:首先要使用hibernate框架,必定要引入hibernate2.jar包,当然还要引入很多的包,然后写一个与数据表对应的JavaBean类,与数据库的字段对应,比如一个简单的java类如下:
package tmc.hibernat.domian; import java.util.Date; public class User { private int id; private String name; private Date date; 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 getDate() { return date; } public void setDate(Date date) { this.date = date; } }
然后编写一个映射的文件,
<?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="tmc.hibernat.domian"> <class name="User"> <id name="id"> <generator class="native" /> </id> <property name="name" unique="true" /> <property name="date" /> </class> </hibernate-mapping>
在写一个加载数据库和连接数据库的的配置文件:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/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:///test</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <mapping resource="tmc/hibernat/domian/User.hbm.xml"/> </session-factory> </hibernate-configuration>
在此,一切的准备都已经完成,接下来执行写一些service的java类对数据库进行操作,就可以实现对数据库的操做了
写一个service的java类:
package tmc.hibernate.service; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public final class HibernateUitl { private static SessionFactory sessionFactory; private HibernateUitl(){ } /** * 初始化代码 */ static{ //配置的一个实例说明属性允许应用程序在测绘文件被用来当创造一个SessionFactory Configuration cfg = new Configuration(); cfg.configure();//读取配置文件 sessionFactory = cfg.buildSessionFactory();//找出配置文件的所有信息 } /** * 获取SessionFactory的方法 * @return */ public static SessionFactory getSessionFactory(){ return sessionFactory; } /** * 获取session的方法 * @return */ public static Session getSession(){ return sessionFactory.openSession(); } }
然后写对数据库的各种操作:
1.写一个接口:
package tmc.hibernat.domian; public interface UserDao { public void saveUser(User user); public User findUserById(int id); public User findUserByName(String name); public void updateUser(User user); public void remove(User user); }
2.实现接口:
package tmc.hibernate.service; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import tmc.hibernat.domian.User; import tmc.hibernat.domian.UserDao; public class UserHibernateImp implements UserDao{ /** * 根据id获取查询数据库的内容 */ @Override public User findUserById(int id) { Session s = null; try{ s = HibernateUitl.getSession(); //Criteria c = s.createCriteria(User.class); //c.add(Restrictions.eq("name",name)); User user =(User)s.get(User.class,id);//User.class方便找到映射文件 return user; }finally{ if(s!=null){ s.close(); } } } /** * 根据用户名,查询用户的信息 */ @Override public User findUserByName(String name) { Session s = null; try{ s = HibernateUitl.getSession(); Criteria c = s.createCriteria(User.class); c.add(Restrictions.eq("name",name)); User user =(User)c.uniqueResult();//映射是唯一的 return user; }finally{ if(s!=null){ s.close(); } } } /** * 和上面的使用是一样的,只是用不同的查询方式而已 * @param name * @return */ public User findUserByName1(String name) { Session s = null; try{ s = HibernateUitl.getSession(); //Criteria c = s.createCriteria(User.class); //c.add(Restrictions.eq("name",name)); String hql = "from User as user where user.name=:n"; Query q = s.createQuery(hql); q.setString("n",name); User user =(User)q.uniqueResult();//映射是唯一的 return user; }finally{ if(s!=null){ s.close(); } } } /** * 移除数据库一条记录 * @see tmc.hibernat.domian.UserDao#remove(tmc.hibernat.domian.User) */ @Override public void remove(User user) { Session s = null; //创建一个事务 Transaction tx = null; try{ s = HibernateUitl.getSession(); tx = s.beginTransaction(); s.delete(user); tx.commit(); }finally{ if(s!=null){ s.close(); } } } /** * 向数据库添加数据 */ @Override public void saveUser(User user) { Session s = null; //创建一个事务 Transaction tx = null; try{ s = HibernateUitl.getSession(); tx = s.beginTransaction(); s.save(user); tx.commit(); }finally{ if(s!=null){ s.close(); } } } /** * 修改数据库数据 */ @Override public void updateUser(User user) { Session s = null; //创建一个事务 Transaction tx = null; try{ s = HibernateUitl.getSession(); tx = s.beginTransaction(); s.update(user); tx.commit(); }finally{ if(s!=null){ s.close(); } } } }
3.测试上面的类:
package tmc.hibernate.service; import java.util.Date; import tmc.hibernat.domian.User; import tmc.hibernat.domian.UserDao; public class TestDao { public static void main(String[] args){ UserDao dao = new UserHibernateImp(); User user = new User(); user.setName("name"); user.setDate(new Date()); System.out.println("1111"); dao.saveUser(user); user.setName("new name"); System.out.println("222"); dao.updateUser(user); User u = dao.findUserByName(user.getName()); System.out.println("3333"); } }
这样的话,就可以完成了对数据库的各种操作,这样写真的很方便,很灵活,减少了很多的重复代码,但就是配置文件的时候很麻烦,呵呵,反正很多都这样的,没有十全十美的东西,但只要好用,就足够了!
原文地址:http://www.blogjava.net/weishuangshuang/archive/2011/01/23/343401.html
相关推荐
Hibernate操作数据库的方法.doc
hibernate 操作数据库的详细图解。
详细介绍Hibernate操作数据库的步骤,附例图
Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源
Hibernate对数据库操作的一些理解.pdf
对hibernate的数据库操作封装: 1.分页查询 2.保存对象 3.保存对象组 4. 更新对象 5.更新对象组 6.保存或更新对象 7.保存或更新对象组 8. 删除对象 9. 删除对象组 10.删除对象(此类的所有对象) 11.删除(HQL) 12....
hibernate数据库操作jar包
在hibernate中的数据库操作的具体讲解和说明
Hibernate多数据库支持解决方案 一、 去掉数据库级的外键关联 二、 如何动态加载.hbm.xml文件 ...五、 hibernate主键生成器(数值型主键操作方法) 六、 Oracle 转换 SQL Server 2000注意 七、 对UTF-8数据库的特殊处理
使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...
一个经过测试,可用的hibernate数据库操作的方法 可重用性强,没有错误。
Hibernate对数据库的增删改查的操作.pdf
Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据。Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD。Hibernate使用方便,配置响应的XML文件即可。由于spring3.x,基于...
Hibernate配置数据库连接;操作技巧;减少写代码
Hibernate数据库操作实例.zip,博客:http://blog.csdn.net/Peng_Hong_fu/article/details/53229450
Hibernate不同数据库的连接及SQL方言 在Hibernate中,连接不同的数据库需要使用不同的数据库连接驱动程序和SQL方言。下面我们将详细介绍如何在...通过配置文件中的设置,我们可以轻松地连接和操作不同的数据库。
对Hibernate底层操作数据库做了DAO层封装
hibernate可以实现简单的数据库操作,可以实现简单的数据增加,数据查询,数据修改,数据删除。
这个类完全可以实现对数据库的基本操作;此类适用于hibernate4以上版本 ;hibernate4用hibernateSupport很容易引发一系列的问题,如果想避免的话,可以用此类