zoukankan      html  css  js  c++  java
  • hibernate基础增删查改简单实例

    hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子

    建一个web-project

    我这里用了junit单元测试环境来进行增删查改的测试,别的不多说,导包就行

    本次用到的所有jar包下载地址:

    链接:http://pan.baidu.com/s/1skHrg0t 密码:dbe2

    1、hibernate配置文件(hibernate.cfg.xml):主要是数据库连接核心的配置项

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <!--数据库URL -->
            <property name="connection.url">
                jdbc:oracle:thin:@127.0.0.1:1521:orcl
            </property>
            <!--数据库用户 -->
            <property name="connection.username">rent</property>
            <!--数据库用户密码 -->
            <property name="connection.password">rent</property>
            <!--数据库JDBC驱动 -->
            <property name="connection.driver_class">
                oracle.jdbc.driver.OracleDriver
            </property>
            <!--每个数据库都有其对应的Dialect以匹配其平台特性 -->
            <property name="dialect">
                org.hibernate.dialect.Oracle9Dialect
            </property>
            <!--是否将运行期生成的SQL输出到日志以供调试 -->
            <property name="show_sql">true</property>
            <!--是否格式化SQL -->
            <property name="format_sql">true</property>
    
            <mapping resource="com/cn/entity/User.hbm.xml" />
    
    
        </session-factory>
    
    
    </hibernate-configuration>

    2、映射文件(User.hbm.xml),主要是对象一表的映射

    <?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>
        <class name="com.cn.entity.User" table="users" >
            <id name="id" column="id" type="java.lang.Integer">
                <!-- 主键的生成策略 -->
                <generator class="assigned"/>
            </id>
            <property name="name" type="java.lang.String" column="name"/>
            <property name="password" type="java.lang.String" column="password"/>
             <property name="telephone" type="java.lang.String" column="telephone"/>
              <property name="username" type="java.lang.String" column="username"/>
               <property name="isadmin" type="java.lang.String" column="isadmin"/>
            
          
        </class>
    </hibernate-mapping>
    <!-- 
        class ==== 表
        对象    =====一行数据
        属性     ===== 列
        属性的类型    ==== 列的类型
    
     -->

    3、我的数据库表结构。这里表结构与实体类中属性的名称和类型要保持一致

    4、实体类(User.java)

    package com.cn.entity;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private Integer id;
        private String name;
        private String password;
        private String telephone;
        private String username;
        private String isadmin;
        public User(Integer id, String name, String password, String telephone,
                String username, String isadmin) {
            super();
            this.id = id;
            this.name = name;
            this.password = password;
            this.telephone = telephone;
            this.username = username;
            this.isadmin = isadmin;
        }
        public User() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getTelephone() {
            return telephone;
        }
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getIsadmin() {
            return isadmin;
        }
        public void setIsadmin(String isadmin) {
            this.isadmin = isadmin;
        }
        
    }

    重要的事再说一遍:为避免以后可能遇到的问题和麻烦,强烈要求实体类属性和类型与数据库表中字段名称和类型保持一致。实体类中的类型用包装类的类型

    5、建junit测试环境:新建junit文件

    帖代码:

    package com.cn.test;
    
    import static org.junit.Assert.*;
    
    import java.io.Serializable;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    import com.cn.entity.User;
    
    public class TestHibernate {
    
        @Test
        public void add() {
            // 读取配置文件
            Configuration config = new Configuration().configure();
            SessionFactory factory = config.buildSessionFactory();
            // 得到当前连接数据库的session
            Session session = factory.openSession();
            // 开启事务
            Transaction tx = session.beginTransaction();
            try {
                User user = new User(15, "liujuan1", "123456", "13610249898",
                        "admin", "yes");
                Serializable id = session.save(user);
    
                if (id != null) {
                    System.out.println("新增成功!");
                    tx.commit();// 提交事务
                } else {
                    tx.rollback();// 失败回滚
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                session.close();
            }
        }
    
        @Test
        public void select() {
            // 读取配置文件
            Configuration config = new Configuration().configure();
            SessionFactory factory = config.buildSessionFactory();
            // 得到当前连接数据库的session
            Session session = factory.openSession();
            // 开启事务
            Transaction tx = session.beginTransaction();
            try {
                // 查询get
                User user = (User) session.get(User.class, 15);
                System.out.println("查询结果:" + user.getName());
                tx.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                session.close();
            }
        }
    
        @Test
        public void update() {
            // 读取配置文件
            Configuration config = new Configuration().configure();
            SessionFactory factory = config.buildSessionFactory();
            // 得到当前连接数据库的session
            Session session = factory.openSession();
            // 开启事务
            Transaction tx = session.beginTransaction();
            try {
                // 第1种:update持久化修改:先查询,与数据库有关联
            /*    User user = (User) session.get(User.class, 15);
                user.setName("duheyu");
                user.setPassword("duheyu");
                session.update(user);
                tx.commit();*/
                
                //第2种:瞬时状态下修改,会set全部字段,不修改的字段全部清空了
                /*User user =new User();
                user.setId(15);
                user.setName("duxinke");
                user.setPassword("duxinke");
                session.update(user);
                tx.commit();*/
                
                //第3种,新增或修改,拿瞬时状态来测试
                User user =new User();
                user.setId(15);
                user.setName("duxinke");
                user.setPassword("duxinke");
                session.saveOrUpdate(user);
                tx.commit();
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                session.close();
            }
        }
        
        @Test
        public void delete(){
            //读取并解析配置文件hibernate.cfg.xml
            Configuration config=new Configuration().configure();
            //读取并解析映射信息,User.hbm.xml,创建SessionFactory
            SessionFactory factory = config.buildSessionFactory();
            //打开一个连接数据库的Session
            Session session = factory.openSession();
            //开始一个事务,增删除查改操作必须有,查询操作可选
            Transaction tx =session.beginTransaction();
            //执行操作,都是用当前Session执行
            try {
                User user =new User();
                user.setId(15);
                session.delete(user);
                tx.commit();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    
    }

    本次是以帖代码为主,不讲原理,如果你懂一点,看的话,会非常容易上手做项目。我做东西就是的,原理似懂非懂,上网搜代码,下来改改,就能用了。还好我的环境对代码质量和性能要求不是太严格。一切以工具能运行即可。

  • 相关阅读:
    LINUX内核参数调优集锦
    性能测试基础-开门篇3(LR常用函数介绍)
    高并发WEB服务的演变
    数据链路层学习之LLDP
    Win8.1 Metro应用无法联网终极解决方法
    Win8.1 Metro应用无法联网,提示“无法加载此页面”解决方法!(看红色字体部分)
    SecureCrt脚本(三)二级对象之Screen详解
    SecureCrt自动化
    Python数据类型一:数字与运算符
    高阶函数
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6012764.html
Copyright © 2011-2022 走看看