zoukankan      html  css  js  c++  java
  • Hibernate学习2—Hibernate4 CRUD体验初步

    接着上一节,工程结构:

    jar包没有变化;

    一、HibernateUtil 封装:                                            

    com.cy.util.HibernateUtil.java:

    package com.cy.util;
    
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.registry.StandardServiceRegistry;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
    
        private static final SessionFactory sessionFactory = buildSessionFactory();
        
        private static SessionFactory buildSessionFactory(){
            Configuration configuration = new Configuration().configure();    //实例化配置文件,默认指定的就是hibernate.cfg.xml
            StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();//实例化服务登记,服务注册
            return configuration.buildSessionFactory(serviceRegistry);    //获取session工厂
        }
        
        //获取sessionFactory,是单例的
        public static SessionFactory getSessionFactory(){
            return sessionFactory;
        }
    }
    View Code

    二、XML 版CRUD 实现:                                            

    对Student类进行xml配置,crud操作;

    com.cy.model.student.java:

    package com.cy.model;
    
    public class Student {
        private long id;
        private String name;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + "]";
        }
        
        
    }
    View Code

    Student.hbm.xml:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.cy.model">
        <class name="Student" table="t_student">
            <!-- 
                <id>代表主键
                类的属性名是id,对应表中列名是stuId
             -->
            <id name="id" column="stuId">
                <!-- 主键生成策略,这里采用mysql的native,自增 -->
                <generator class="native"></generator>
            </id>
            
            <!-- 普通属性采用property 
                 不写column,那么数据库table的列名也叫name
            -->
            <property name="name"></property>
            
        </class>
        
    
    </hibernate-mapping>
    View Code

    com.cy.service.StudentTest.java:--这里是测试类,对Student进行CRUD:

    package com.cy.service;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    
    import com.cy.model.Student;
    import com.cy.util.HibernateUtil;
    
    public class StudentTest {
        
        private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        
        //添加学生
        private void add(){
            Session session = sessionFactory.openSession();    //生成一个session
            session.beginTransaction();        //开启事务
            
            Student s = new Student();
            s.setName("张三");
            session.save(s);
            
            session.getTransaction().commit();    //提交事务
            session.close();    //关闭session
        }
        
        //删除学生
        private void delete(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
            
            Student student = (Student) session.get(Student.class, 1L);
            session.delete(student);
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        //更新学生
        private void update(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
            
            Student student = (Student) session.get(Student.class, 6L);
            student.setName("张三22");
            session.save(student);
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        //查找所有学生
        private void getAllStudents(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
    
            String hql = "from Student";
            Query query = session.createQuery(hql);
            List<Student> studentList = query.list();
            for(Student student : studentList){
                System.out.println(student);
            }
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        public static void main(String[] args) {
            StudentTest studentTest = new StudentTest();
    //        studentTest.add();
    //        studentTest.delete();
    //        studentTest.update();
            studentTest.getAllStudents();
        }
    }
    View Code

    hibernate.cfg.xml中加入Student映射(为了方便后面,也加入了Teacher):

    <?xml version='1.0' encoding='utf-8'?>
    <!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>
            <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">root</property>
           
            <!-- 方言 -->
            <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        
            <!-- 控制台显示SQL -->
            <property name="show_sql">true</property>
    
            <!-- 自动更新表结构 -->
            <property name="hbm2ddl.auto">update</property>
            
            <mapping resource="com/cy/model/Student.hbm.xml"/>
            <mapping class="com.cy.model.Teacher"/>
        </session-factory>
    
    </hibernate-configuration>

    StudentTest.java运行main函数,结果:

    删除:

    修改:

    查询所有:

    三、注解版CRUD 实现                                                

    1.注解版CRUD:注解版的很方便,官方也推荐使用;
    2.运行测试程序,hibernate会根据映射关系,如有没有表的话,自动创建表。(如果配置了hbm2ddl.auto为update);

    这里是对Teacher类进行注解的配置,然后进行CRUD操作:

    com.cy.model.Teacher.java:

    package com.cy.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import org.hibernate.annotations.GenericGenerator;
    
    //@Entity代表Teacher是一个映射实体
    @Entity
    @Table(name="t_teacher")
    public class Teacher {
        private long id;
        private String name;
        
        //@Id代表id是一个主键
        //@GenericGenerator配置主键生成策略 name是起个名字,strategy是具体的策略;
        //@GeneratedValue配置生成策略为@GenericGenerator的名字
        @Id
        @GeneratedValue(generator="_native")
        @GenericGenerator(name="_native",strategy="native")
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        @Override
        public String toString() {
            return "Teacher [id=" + id + ", name=" + name + "]";
        }
        
        
    }

    将Teacher类加入hibernate.cfg.xml:

    <mapping class="com.cy.model.Teacher"/>

    com.cy.service.TeacherTest.java测试代码:

    package com.cy.service;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    
    import com.cy.model.Teacher;
    import com.cy.util.HibernateUtil;
    
    public class TeacherTest {
        
        private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        
        //添加老师
        private void add(){
            Session session = sessionFactory.openSession();    //生成一个session
            session.beginTransaction();        //开启事务
            
            Teacher s = new Teacher();
            s.setName("张三");
            session.save(s);
            
            session.getTransaction().commit();    //提交事务
            session.close();    //关闭session
        }
        
        //删除老师
        private void delete(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
            
            Teacher Teacher = (Teacher) session.get(Teacher.class, 1L);
            session.delete(Teacher);
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        //更新老师
        private void update(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
            
            Teacher Teacher = (Teacher) session.get(Teacher.class, 4L);
            Teacher.setName("张老师22");
            session.save(Teacher);
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        //查找所有老师
        private void getAllTeachers(){
            Session session = sessionFactory.openSession();    
            session.beginTransaction();    
    
            String hql = "from Teacher";
            Query query = session.createQuery(hql);
            List<Teacher> TeacherList = query.list();
            for(Teacher Teacher : TeacherList){
                System.out.println(Teacher);
            }
            
            session.getTransaction().commit();    
            session.close();    
        }
        
        public static void main(String[] args) {
            TeacherTest TeacherTest = new TeacherTest();
    //        TeacherTest.add();
    //        TeacherTest.delete();
    //        TeacherTest.update();
            TeacherTest.getAllTeachers();
        }
    }
    View Code

    测试结果和StudentTest结果差不多,不再说明了。打印出来的语句也基本一样的。

  • 相关阅读:
    ArcGIS自定义工具箱-列举损坏的数据源
    ArcGIS自定义工具箱-修复损坏的工作空间
    ArcGIS自定义工具箱-显示地图文档结构
    ArcGIS自定义工具箱-字段合并
    ArcGIS自定义工具箱-字段分割
    ArcGIS自定义工具箱-字段值部分替换
    [转载]ArcGIS Engine 中的多线程使用
    一个WebService Demo
    [GeoServer]Openlayers简单调用
    [ArcEngine]Geotransformation地理变换
  • 原文地址:https://www.cnblogs.com/tenWood/p/7237372.html
Copyright © 2011-2022 走看看