Hibernate进行对象的增删改查

首先我们看看hibernate手动配置步骤 

(这个了解一点就可以了,以后是不会自己全部手动配置的)

1、    创建WEB项目

2       下载hibernate-release-4.3.11.Final.zip,并解压。

3       将hibernate必须的包加入lib

4        打开hibernate-release-4.3.11.Final\lib\required文件夹,导入jar文件:

5       打开hibernate-release-4.3.11.Final\lib\optional\ehcache文件夹,导入jar文件:

          

6         打开hibernate-release-4.3.11.Final\lib\optional\c3p0文件夹,导入jar文件:

 

                

 

7    配置hibernate.cfg.xml     打开hibernate-release-4.3.11.Final\project\etc文件夹,选择hibernate.cfg.xml文件并   复制到src下。

8     打开hibernate.cfg.xml文件,并设置数据库连接

如:

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4
 5 <hibernate-configuration>
 6     <session-factory>
 7         <!-- 用于配置数据库连接信息 -->
 8         <!-- 定义Hibernate访问数据库的方言 -->
 9         <property name="dialect">
10             org.hibernate.dialect.MySQLDialect
11         </property>
12         <!-- 定义数据库的连接信息 -->
13         <property name="connection.url">
14             jdbc:mysql://127.0.0.1:3306/j2ee?characterEncoding=utf-8
15         </property>
16         <!-- 定义连接用户名及密码 -->
17         <property name="connection.username">root</property>
18         <property name="connection.password">root</property>
19         <!-- 定义连接驱动 -->
20         <property name="connection.driver_class">
21             com.mysql.jdbc.Driver
22         </property>
23
24         <!-- 要求Hibernate执行SQL标准 -->
25         <property name="format_sql">true</property>
26         <!-- 要求Hibernate在控制台显示SQL -->
27         <property name="show_sql">true</property>
28
29
30
31
32         <!-- 数据库基本配置完毕,继续配置数据源(DataSource) -->
33         <!-- 配置C3P0数据源信息 -->
34         <property name="hibernate.connection.provider_class">
35             org.hibernate.c3p0.internal.C3P0ConnectionProvider
36         </property>
37
38         <!-- 指定连接池的最大连接量 -->
39         <property name="hibernate.c3p0.max_size">30</property>
40         <!-- 指定连接池的最小连接量 -->
41         <property name="hibernate.c3p0.min_size">1</property>
42         <!-- 指定连接池内连接的超时时长 -->
43         <property name="hibernate.c3p0.timeout">5000</property>
44         <!-- 指定连接池最大可以缓存多少个PreparedStatement -->
45         <property name="hibernate.c3p0.max_statements">100</property>
46         <!-- 指定连接池检查线程间隔多长时间,检测一次池内的所有连接的对象是否超时 -->
47         <property name="hibernate.c3p0.idle_test_period">3000</property>
48         <!-- 当连接池里面的连接用完的之后,C3p0数据源可以重新获取的连接数 -->
49         <property name="hibernate.c3p0.acquire_increment">5</property>
50         <!-- 以上就是C3P0数据源的一个配置 -->
51
52
53
54         <!-- 添加"对象.hbm.xml"文件 -->
55         <mapping resource="com/cy/xmls/UserBean.hbm.xml"/>
56
57     </session-factory>
58 </hibernate-configuration>

View Code

 

 

9   创建数据库表,并封装实体Bean与XXX.hbm.xml文件,

如:

 1 package com.cy.beans;
 2
 3 import java.io.Serializable;
 4
 5 public class UserBean implements Serializable  {
 6
 7     private static final long serialVersionUID = 1L;
 8
 9     private Integer id;
10     private String userName;
11     private String password;
12     public UserBean() {
13         super();
14     }
15
16     public Integer getId() {
17         return id;
18     }
19
20     public void setId(Integer id) {
21         this.id = id;
22     }
23
24     public String getUserName() {
25         return userName;
26     }
27     public void setUserName(String userName) {
28         this.userName = userName;
29     }
30     public String getPassword() {
31         return password;
32     }
33     public void setPassword(String password) {
34         this.password = password;
35     }
36     @Override
37     public String toString() {
38         return "UserBean [id=" + id + ", userName=" + userName + ", password="
39                 + password + "]";
40     }
41
42
43 }

View Code

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6     <hibernate-mapping>
 7
 8     <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee">   <!-- catalog数据库 -->
 9
10     <id name="id" type="int"><!-- 此行的ID,为对象的属性ID -->
11     <column name="id"></column><!-- 此行的ID,为表字段ID -->
12     <generator class="identity"></generator><!-- 给ID指定生成策略 -->
13     </id>
14
15     <property name="userName" type="java.lang.String">
16      <column name="userName"></column>
17     </property>
18
19     <property name="password" type="java.lang.String">
20     <column name="pwd"></column>
21     </property>
22
23     </class>
24
25     </hibernate-mapping>

View Code

 

10 hibernate如何CRUD  获取Session对象:

如:

 1 package com.cy.tools;
 2
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 5 import org.hibernate.cfg.Configuration;
 6 import org.hibernate.service.ServiceRegistry;
 7
 8 /**
 9  * session工厂的工具类
10  * @author acer
11  *
12  */
13
14 public class HibernateUtils {
15
16     private static Configuration cfg;
17     private static SessionFactory sessionFactory;
18     private static ServiceRegistry serviceRegistry;
19
20     static{
21
22         cfg = new Configuration().configure();
23         System.out.println(cfg);
24         serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
25         System.out.println(serviceRegistry);
26         sessionFactory = cfg.buildSessionFactory(serviceRegistry);
27
28     }
29
30     public static SessionFactory getSessionFactory(){
31         return sessionFactory;
32     }
33
34
35
36 }

View Code

 

 

今天主要学习的内容就是hibernate的增删改查;

我们以一个t_user表为例:

先把框架写好:

看UserDaoImpl里的代码:

  1 package com.cy.dao.impl;
  2
  3 import java.io.Serializable;
  4 import java.util.List;
  5 import java.util.Map;
  6
  7
  8
  9
 10 import org.hibernate.Query;
 11 import org.hibernate.Session;
 12 import org.hibernate.Transaction;
 13
 14 import com.cy.beans.UserBean;
 15 import com.cy.dao.IUserDao;
 16 import com.cy.tools.HibernateUtils;
 17
 18 public class UserDaoImpl implements IUserDao {
 19
 20
 21     @Override
 22     public void saveUser(UserBean ub) {
 23                 //获取Session
 24                 Session session = null;
 25                 Transaction tx = null;
 26                 try {
 27                     session = HibernateUtils.getSessionFactory().openSession();
 28                     tx = session.beginTransaction();//开启事务
 29                     session.save(ub);//将user对象交给Session管理
 30                     tx.commit();//提交
 31                 } catch (Exception e) {
 32                     e.printStackTrace();
 33                     tx.rollback();//回滚
 34                 }finally{
 35                     session.close();//关闭
 36                 }
 37     }
 38
 39     @Override
 40     public void updateUser(UserBean ub) {
 41         Session session = null;
 42         Transaction tx = null;
 43         try {
 44             session=HibernateUtils.getSessionFactory().openSession();
 45             tx=session.beginTransaction();
 46             session.update(ub);
 47             tx.commit();
 48         } catch (Exception e) {
 49             e.printStackTrace();
 50             tx.rollback();
 51         }finally{
 52             session.close();
 53         }
 54
 55
 56     }
 57
 58     @Override
 59     public void deleteUser(UserBean ub) {
 60         Session session = null;
 61         Transaction tx = null;
 62         try {
 63             session=HibernateUtils.getSessionFactory().openSession();
 64             tx=session.beginTransaction();
 65             session.delete(ub);
 66             tx.commit();
 67         } catch (Exception e) {
 68             e.printStackTrace();
 69             tx.rollback();
 70         }finally{
 71             session.close();
 72         }
 73
 74     }
 75
 76     @Override
 77     public List<?> findUser(String sql, Map<String, Object> pram) {
 78         Session session = null;
 79         Transaction tx = null;
 80         List<?> list=null;
 81         try {
 82             session=HibernateUtils.getSessionFactory().openSession();
 83             tx=session.beginTransaction();
 84             Query query= session.createQuery(sql).setCacheable(true);//查询
 85         String userName=pram.get("userName").toString();
 86         String password=pram.get("password").toString();
 87         query.setString("userName", '%'+userName+'%');
 88         query.setString("password",'%'+password+'%');
 89         list=query.list();
 90         tx.commit();
 91
 92         } catch (Exception e) {
 93             e.printStackTrace();
 94             tx.rollback();
 95         }finally{
 96             session.close();
 97         }
 98         return list;
 99     }
100
101     @Override
102     public UserBean getUser(Class<?> cls, Serializable pk) {
103         Session session = null;
104         Transaction tx = null;
105         UserBean user=null;
106
107         try {
108             session=HibernateUtils.getSessionFactory().openSession();
109             tx=session.beginTransaction();
110
111             user=(UserBean)session.get(cls, pk);
112
113
114             tx.commit();
115         } catch (Exception e) {
116             e.printStackTrace();
117             tx.rollback();
118         }finally{
119             session.close();
120         }
121
122
123         return user;
124     }
125
126 }

View Code

 

看UserServerImpl的代码:

 1 package com.cy.server.impl;
 2
 3 import java.io.Serializable;
 4 import java.util.List;
 5 import java.util.Map;
 6
 7 import com.cy.beans.UserBean;
 8 import com.cy.dao.IUserDao;
 9 import com.cy.dao.impl.UserDaoImpl;
10 import com.cy.server.IUserServer;
11
12 public class UserServerImpl implements IUserServer{
13
14     IUserDao iusUserDao=new UserDaoImpl();
15    /**
16     * 添加
17     */
18     @Override
19     public void saveUser(UserBean ub) {
20         iusUserDao.saveUser(ub);
21
22     }
23
24
25     /**
26      * 修改
27      */
28     @Override
29     public void updateUser(UserBean ub) {
30         iusUserDao.updateUser(ub);
31
32     }
33
34     /**
35      * 删除
36      */
37     @Override
38     public void deleteUser(Integer id) {
39         //先查询
40         UserBean ub=iusUserDao.getUser(UserBean.class,id);
41         //后删除
42         if(ub!=null){
43             iusUserDao.deleteUser(ub);
44         }
45
46     }
47
48     /**
49      * 数据集合
50      */
51     @Override
52     public List<?> findUser(Map<String,Object>pram) {
53         //模糊查询
54         String hql="from UserBean where 1=1 and userName like :userName and password like :password";
55         return iusUserDao.findUser(hql, pram);
56     }
57
58     /**
59      * 查询
60      */
61     @Override
62     public UserBean getUser(Class<?> cls, Serializable pk) {
63         return iusUserDao.getUser(cls, pk);
64     }
65
66 }

View Code

 

TestAction的代码:

 1 package com.cy.action;
 2
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6
 7 import com.cy.beans.UserBean;
 8 import com.cy.server.IUserServer;
 9 import com.cy.server.impl.UserServerImpl;
10
11 public class TestAction {
12
13     public static void main(String[] args) {
14 //        saveUser();
15 //        delete();
16 //        update();
17 //        queryUserBean();
18     }
19
20     /**
21      *测试 根据条件来查询数据
22      */
23     /*private static void queryUserBean() {
24         Map<String,Object> map=new HashMap<String, Object>();
25         IUserServer  ius=new UserServerImpl();
26         //模糊查询
27         map.put("userName", "kitty");
28         map.put("password", "kitty");
29         List<?> list=ius.findUser(map);
30         for (Object object : list) {
31             UserBean ub=(UserBean) object;
32             System.out.println(ub);
33         }
34     }
35 */
36
37
38     /**
39      * 测试修改数据
40      */
41     /*private static void update() {
42         IUserServer ius=new UserServerImpl();
43         UserBean ub=new UserBean();
44         //先查询
45         ub=ius.getUser(UserBean.class, Integer.valueOf(1));
46         //后修改
47         if(ub!=null){
48             ub.setUserName("tomcat");
49         }
50         ius.updateUser(ub);
51     }
52 */
53
54
55     /**
56      * 测试删除数据
57      */
58     /*private static void delete() {
59         IUserServer ius=new UserServerImpl();
60         ius.deleteUser(Integer.valueOf(11));
61
62     }*/
63
64     /**
65      * 测试添加数据
66      */
67     /*private static void saveUser() {
68         //首先从页面获取数据
69          IUserServer ius=new UserServerImpl();
70          UserBean ub=new UserBean();
71          ub.setPassword("111");
72          ub.setUserName("111");
73          ius.saveUser(ub);
74     }*/
75
76
77
78 }

View Code

 数据库表:

create DATABASE j2ee;
create table t_user(
id int primary key auto_increment,
userName varchar(20),
pwd varchar(20)
);

作业 分页!

 

问题:

在完成这些之前呢,我遇到了个问题,就是我的session就是一直都得不到。

找了很久的错误,在上课的时候就一直没找到,放学的时候同学提醒了我,回去看看你的xml文件配置的问题,一个单词都不可以错的。

我在想会不会是我的表的名字有误呢。我直接把表名设置为user。

 映射文件通常是以"类名+.hbm.xml"这样命名的。

我之前的UserBean.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6     <hibernate-mapping>
 7
 8     <class name="com.cy.beans.UserBean" table="user" catalog="car">   <!-- catalog数据库 -->
 9
10     <id name="id" type="java.lang.integer"><!-- 此行的ID,为对象的属性ID -->
11     <column name="userId"></column><!-- 此行的ID,为表字段ID -->
12     <generator class="identity"></generator><!-- 给ID指定生成策略 -->
13     </id>
14
15     <property name="userName" type="java.lang.String">
16      <column name="userName"></column>
17     </property>
18
19     <property name="password" type="java.lang.String">
20     <column name="pwd"></column>
21     </property>
22
23     </class>
24
25     </hibernate-mapping>

 

 后来我重新建立了个数据库,j2ee,重新建表t_user。

改过之后的UserBean.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6     <hibernate-mapping>
 7
 8     <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee">   <!-- catalog数据库 -->
 9
10     <id name="id" type="int"><!-- 此行的ID,为对象的属性ID -->   <!--这里的type我就没有使用包装类-->
11     <column name="id"></column><!-- 此行的ID,为表字段ID -->
12     <generator class="identity"></generator><!-- 给ID指定生成策略 -->
13     </id>
14
15     <property name="userName" type="java.lang.String">
16      <column name="userName"></column>
17     </property>
18
19     <property name="password" type="java.lang.String">
20     <column name="pwd"></column>
21     </property>
22
23     </class>
24
25     </hibernate-mapping>

 

这样改了之后就可以得到session了。所以总之在配置的时候,需要细心的!字母的大小写

,type="integer";,这样也是对的。

 

type="java.lang.Integer".

 

时间: 2024-09-20 12:34:21

Hibernate进行对象的增删改查的相关文章

使用struts2+hibernate+oracle做一个增删改查的功能

问题描述 求大神指导啊,不会做啊,在线等..... 解决方案 解决方案二: 解决方案三:引用1楼qu1210的回复:感觉有用,去看看.

spring入门((12) spring与hibernate整合完成增删改查的操作

本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java 改为继承HibernateDaoSupport类,还有spring-dao.xml文件加入对HibernateDaoSupport的配置bean即可,具体实现源码如 下: UserDaoImpl.java package www.csdn.spring.hibernate.dao.copy; import java.util.List; i

简述Mybatis增删改查实例代码_java

编写一个简单的mybatis进行插入数据的实例 1 数据库建表 其中建表dob=Date of Birth 的意思 create table students (stud_id number primary key, name varchar2(20), email varchar2(20), dob date ); Oracle数据库中出现表已创建,则表示创建成功,如果出现名称已被使用,则可在建表之前进行删除操作:drop table students;或者进行级联删除drop table s

iOS CoreData 增删改查详解_IOS

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理.  继承CoreData有两种方式:  创建项目时集成   这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDe

利用Hibernate怎么增删改查一个表!

问题描述 小弟新手别喷!!!我现在配置了hibernate.cfg.xml写了一个User的实体类建了个Tableuser_register我想通过hibernate来访问建好的table表,显示在浏览器上!我就想要个例子,最好有增删改查,谢谢各位大神了!! 解决方案 解决方案二:数据层:/*一定要有工具给你自动生成的session工厂(如果你用的IDE是MyEclipse那么在添Hibernate*将会给你自动生成).*/Sessionsess=HibernateSessionFactory.

【框架】[Hibernate]利用Hibernate进行单表的增删改查-Web实例

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 前面两篇博客已经将Hibernate的基础知识讲解得差不多了,差不多到写实例的时候了. 本篇只用hibernate进行单表的增删改查. 应用Hibernate,对students表进行增删改查. service层和DAO层,我都是直接写实现类了(因为这里主要是演示一下Hibernate的使用),如果是开发项目,注意一定要写接口! 准备数据库: 首先准备一个students表: cr

急求一个Spring+Hibernate对MySQL数据库进行增删改查的例子!!!!

问题描述 现急求一个Spring+Hibernate对MySQL数据库进行增删改查的例子,例子比较简单也可以,主要就是要对数据库进行增删改查操作.如果哪位有的话请发到邮箱(395897780@qq.com),或者告诉我网址也行!最好是能连工程一起打包下载的,能够运行的,由于刚刚开始学,想下个完整的下来,怎样便于分析!!!本人在这里先表示感谢!!!!! 解决方案 解决方案二:其实不用这样,你用工具做,其中的包就可以生成的,注意:Hibernate一定要托管给Spring:之后以前Hibernate

现在在学hibernate可是总是不会写各种增删改查方法有什么方法能让我快速搞明白呢

问题描述 现在在学hibernate可是总是不会写各种增删改查方法有什么方法能让我快速搞明白呢 现在在学hibernate可是总是不会写各种增删改查方法有什么方法能让我快速搞明白呢 不会写方法啊 求速教 解决方案 增删查改就4个方法,都学不会?那么基本上你得问问自己,基本的编程知识是不是都没有.建议从基础的学.比如说开发环境怎么搭建,怎么写基本的java程序. 解决方案二: hibernate不难的,他就一个框架.把sql语句研究下就会了.主要发是环镜的搭建,配置spring+springMVC

junit-MyEclipse用Junit测试Hibernate的增删改查出错

问题描述 MyEclipse用Junit测试Hibernate的增删改查出错 我在用myeclipse用Junit测试Hibernate的增删改查时,每次执行某个方法,其它的方法也跟着 执行:比如我先写了个add方法来向数据库插入数据没有问题,然后再写个方法来查询数据库里 的数据时,那个add方法又会自动执行一遍,请问这是怎么回事,该如何解决 解决方案 看一下图片,可以选中指定的方法执行! 解决方案二: http://blog.csdn.net/sias1991/article/details/