• Hibernate进行对象的增删改查


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

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

    1、    创建WEB项目

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

    3       将hibernate必须的包加入lib

    4        打开hibernate-release-4.3.11.Finallib equired文件夹,导入jar文件:

    5       打开hibernate-release-4.3.11.Finalliboptionalehcache文件夹,导入jar文件:

              

    6         打开hibernate-release-4.3.11.Finalliboptionalc3p0文件夹,导入jar文件:

                    

    7    配置hibernate.cfg.xml     打开hibernate-release-4.3.11.Finalprojectetc文件夹,选择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".

  • 相关阅读:
    用gdb调试python多线程代码-记一次死锁的发现
    使用docker部署standalone cinder
    Linux上open-iscsi 的安装,配置和使用
    Windows上Ruby开发环境的配置
    在Pypi上发布自己的Python包
    docker X509 证书错误的终极解决办法
    oslo_config中的DuplicateOptError坑
    删除emacs临时文件
    xfce4快捷键设置
    设置emacs启动窗口的两种方法
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/5046770.html
Copyright © 2020-2023  润新知