Hibernate进行对象的增删改查

简介: 首先我们看看hibernate手动配置步骤  (这个了解一点就可以了,以后是不会自己全部手动配置的) 1、    创建WEB项目 2       下载hibernate-release-4.3.11.Final.zip,并解压。

首先我们看看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".

 

相关文章
|
7月前
|
SQL 缓存 Java
Hibernate对象状态之间的神奇转换
Hibernate对象状态之间的神奇转换
|
4月前
|
SQL Java 数据库连接
Hibernate - QBC和本地SQL对象检索详解
Hibernate - QBC和本地SQL对象检索详解
29 0
|
4月前
|
SQL Java 数据库连接
Hibernate - HQL对象检索详解
Hibernate - HQL对象检索详解
22 0
|
10月前
|
SQL Java 数据库连接
Hibernate中的Session对象
Hibernate中的Session对象
57 0
|
缓存 Java 数据库连接
Hibernate保存对象出现 org.hibernate.NonUniqueObjectExce
Hibernate保存对象出现 org.hibernate.NonUniqueObjectExce
|
Java 数据库连接 数据库
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
700 0
|
SQL 缓存 Java
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
 学习过操作系统的朋友,脑子里肯定都会有这张进程的状态转换图:
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
|
SQL Java 数据库连接
hibernate自定义sql关联查询结果组装为对象
hibernate自定义sql关联查询后没有对应的entity,如何映射为对应的bean
205 0