zoukankan      html  css  js  c++  java
  • java之hibernate之crud

    这篇文章主要讲解:

      1>.对Hibernate使用的一些简单封装;

    ·  2>.在单元测试中,使用Hibernate的封装的工具进行增删改查的测试

    1.目录结构展示

    2.代码展示

    2.0 配置文件 hibernate.cfg.xml

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <!-- 数据库连接信息 -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 默认 localhost:3306 -->
            <property name="connection.url">jdbc:mysql:///test</property>
            <property name="connection.username">root</property>
            <property name="connection.password">root</property>
            
            <!-- 通用配置 -->
            <!-- 方言:hibernate要支持多种数据库,根据不同数据库生成对应的sql语句
                告诉hibernate使用的什么数据库,以便生成对应数据库的sql
             -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- 打印sql语句 -->
            <property name="show_sql">true</property>
            <!-- 格式化sql -->
            <property name="format_sql">true</property>
            <!-- 映射信息  注意映射文件存放的是文档路径 需要用/ -->
            <mapping resource="cn/vincent/pojo/User.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    View Code

    2.1 pojo 类 

    User

    package cn.vincent.pojo;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private int  id;
        private String name;
        private int age;
        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 int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + id;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (id != other.id)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
        
    }
    View Code

    User.hbm.xml 即User的映射

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 映射文件的头文件和hibernate.cfg.xml的头文件不一样 -->
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="cn.vincent.pojo">
        
        <class name="User" table="t_user">
            
            <id name="id" column="id" type="int">
                
                <generator class="native"></generator>
            </id>
            
            <property name="name" column="name" type="java.lang.String"/>
            <property name="age" column="age" type="int"/>
        </class>
    </hibernate-mapping>
    View Code

    2.2 util 工具类

    package cn.vincent.util;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    
    public class HibernateUtil {
        private static Configuration cfg;
        private static ServiceRegistry registry;
        private static SessionFactory factory;
        private static ThreadLocal<Session> session;
        
        static{
            //初始化
            cfg=new Configuration().configure();
            registry=new StandardServiceRegistryBuilder()
                        .applySettings(cfg.getProperties())
                        .build();
            factory=cfg.buildSessionFactory(registry);
            session=new ThreadLocal<>();
        }
        //获取连接
        public static Session getSession(){
            if(session.get()==null){
                session.set(factory.openSession());
            }
            return session.get();
        }
        
        //释放资源
        public static void close(){
            if(session.get()!=null){
                session.get().close();
                session.set(null);
            }
        }
        
    }

    2.3 单元测试

    HibernateTest

    package cn.vincent.hibernate;
    
    import java.util.List;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import cn.vincent.pojo.User;
    import cn.vincent.util.HibernateUtil;
    
    public class HibernateTest {
    
        //根据id查询单个对象
            @Test
            public void testGetById(){
                Session session = HibernateUtil.getSession();
                User user=(User)session.get(User.class, 2);
                System.out.println(user.getId()+"----"+user.getName()+"----"+user.getAge());
                HibernateUtil.close();
            }
            //添加数据
            @Test
            public void testSave(){
                Session session=null;
                Transaction tx =null;
                try {
                    session = HibernateUtil.getSession();
                    User user= new User();
                    user.setName("金庸");
                    user.setAge(80);
                    //开启事务
                    tx = session.beginTransaction();
                    //返回 被保存数据的id
                    session.save(user);
                    //提交事务
                    tx.commit();
                    System.out.println("保存数据成功");
                } catch (Exception e) {
                    e.printStackTrace();
                    //回滚事务
                    if(tx!=null)
                        tx.rollback();
                    System.out.println("保存数据失败");
                }finally{
                    HibernateUtil.close();
                }
                
            }
            //删除数据
            @Test
            public void testDelete(){
                Session session=null;
                Transaction tx =null;
                try {
                    session = HibernateUtil.getSession();
                    //开启事务
                    tx = session.beginTransaction();
                    User user =(User)session.get(User.class, 4);
                    session.delete(user);
                    //提交事务
                    tx.commit();
                    System.out.println("删除数据成功");
                } catch (Exception e) {
                    e.printStackTrace();
                    //回滚事务
                    if(tx!=null)
                        tx.rollback();
                    System.out.println("删除数据失败");
                }finally{
                    HibernateUtil.close();
                }
            }
            //更新
            @Test
            public void testUpdate(){
                Session session=null;
                Transaction tx =null;
                try {
                    session = HibernateUtil.getSession();
                    //开启事务
                    tx = session.beginTransaction();
                    User user =(User)session.get(User.class, 4);
                    user.setName("本拉登");
                    session.update(user);
                    //提交事务
                    tx.commit();
                    System.out.println("更新数据成功");
                } catch (Exception e) {
                    e.printStackTrace();
                    //回滚事务
                    if(tx!=null)
                        tx.rollback();
                    System.out.println("更新数据失败");
                }finally{
                    HibernateUtil.close();
                }
            }
            //查询所有
            @Test
            public void testFindAll(){
                Session session=null;
                try {
                    session = HibernateUtil.getSession();
                    List<User> list = session.createCriteria(User.class).list();
                    for(User u:list){
                        System.out.println(u);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    HibernateUtil.close();
                }
            }
    }

    3.单元测试运行效果

    运行单元测试

    如下图:

  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11198327.html
Copyright © 2011-2022 走看看