zoukankan      html  css  js  c++  java
  • Hibernate基础入门

    Hibernate基础入门

    0)导包并且建一个web项目

     

    1)创建数据库对应的实体和元数据配置文件

    package com.hibernate.domain;
    
    public class Customer {
        private Long cust_id;
        private String cust_name;
        private String cust_source;
        private String cust_industry;
        private String cust_level;
        private String cust_linkman;
        private String cust_phone;
        private String cust_mobile;
    
        public Long getCust_id() {
            return cust_id;
        }
    
        public void setCust_id(Long cust_id) {
            this.cust_id = cust_id;
        }
    
        public String getCust_name() {
            return cust_name;
        }
    
        public void setCust_name(String cust_name) {
            this.cust_name = cust_name;
        }
    
        public String getCust_source() {
            return cust_source;
        }
    
        public void setCust_source(String cust_source) {
            this.cust_source = cust_source;
        }
    
        public String getCust_industry() {
            return cust_industry;
        }
    
        public void setCust_industry(String cust_industry) {
            this.cust_industry = cust_industry;
        }
    
        public String getCust_level() {
            return cust_level;
        }
    
        public void setCust_level(String cust_level) {
            this.cust_level = cust_level;
        }
    
        public String getCust_linkman() {
            return cust_linkman;
        }
    
        public void setCust_linkman(String cust_linkman) {
            this.cust_linkman = cust_linkman;
        }
    
        public String getCust_phone() {
            return cust_phone;
        }
    
        public void setCust_phone(String cust_phone) {
            this.cust_phone = cust_phone;
        }
    
        public String getCust_mobile() {
            return cust_mobile;
        }
    
        public void setCust_mobile(String cust_mobile) {
            this.cust_mobile = cust_mobile;
        }
    
        @Override
        public String toString() {
            return "Customer [cust_id=" + cust_id + ", " +
                    "cust_name=" + cust_name + "]";
        }
    
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- orm元数据配置 -->
    <!-- 配置表与实体对象的关系 -->
    <!-- package属性:填写一个包名,在元素内部凡是需要书写完整类名的属性,可以直接写简单类名了 -->
    <hibernate-mapping package="com.hibernate.domain">
        <!-- class元素:配置实体与表的对应关系的
                name:完整类名
                table:数据库表名 -->
        <class name="Customer" table="cst_customer">
            <!-- id元素:配置主键映射的属性
                    name:填写主键对应属性名
                    column(可选):填写表中的主键列名,默认值:列名会默认使用属性名
                    type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型,
                            每个类型有三种填法: java类型|hibernate类型|数据库类型
                    not-null(可选):配置该属性(列)是否不能为空,默认值:false
                    length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度 -->
            <id name="cust_id">
                <!-- generator:主键生成策略,每条数据录入时,主键的生成规则
                             identity:主键自增,添加数据时不需要指定ID
                             increment(了解):主键自增,添加数据时会找到目前表的最大ID,然后加1
                             sequence:oracle主键生成策略
                             hilo(了解):高低位算法,主键自增,开发时不使用
                             native:hilo+sequence+identity三选一策略
                             uuid:生成一个随机字符串作为主键,所以主键必须为string类型
                             assigned:自然主键生成策略,由开发人员自己指定(比如身份证号为主键)-->
                <generator class="native"></generator>
            </id>
            <!-- property元素:除id之外的普通属性映射
                    name:填写属性名
                    column(可选):填写列名
                    type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型,
                            每个类型有三种填法: java类型|hibernate类型|数据库类型
                    not-null(可选):配置该属性(列)是否不能为空,默认值:false
                    length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度 -->
            <property name="cust_name" column="cust_name">
                <!--  <column name="cust_name" sql-type="varchar" ></column> -->
            </property>
            <property name="cust_source" column="cust_source"></property>
            <property name="cust_industry" column="cust_industry"></property>
            <property name="cust_level" column="cust_level"></property>
            <property name="cust_linkman" column="cust_linkman"></property>
            <property name="cust_phone" column="cust_phone"></property>
            <property name="cust_mobile" column="cust_mobile"></property>
        </class>
    </hibernate-mapping>

     

    2)创建一个Hibernate配置文件

    <?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主配置文件 -->
    <hibernate-configuration>
        <session-factory>
            <!--
            #hibernate.dialect org.hibernate.dialect.MySQLDialect
            #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
            #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
            #hibernate.connection.driver_class com.mysql.jdbc.Driver
            #hibernate.connection.url jdbc:mysql:///test
            #hibernate.connection.username gavin
            #hibernate.connection.password
             -->
            <!-- 数据库驱动 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 数据库url -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/hibernate?characterEncoding=UTF-8
            </property>
            <!-- 数据库连接用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 数据库连接密码 -->
            <property name="hibernate.connection.password">admins</property>
            <!-- 数据库方言
                不同的数据库中,sql语法略有区别,指定方言可以让hibernate框架在生成sql语句时,针对数据库的方言生成
                sql99标准:DDL 定义语言 库表的增删改查
                           DCL 控制语言 事务 权限
                           DML 操纵语言 增删改查
                注意: MYSQL在选择方言时,请选择最短的方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    
            <!-- #hibernate.show_sql true
                 #hibernate.format_sql true -->
            <!-- 将hibernate生成的sql语句打印到控制台 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 将hibernate生成的sql语句格式化(语法缩进) -->
            <property name="hibernate.format_sql">true</property>
    
            <!--
            ## auto schema export  自动导出表结构,自动建表
            #hibernate.hbm2ddl.auto create        自动建表,每次框架运行都会创建新的表,以前表将会被覆盖,表数据会丢失(开发环境中测试使用)
            #hibernate.hbm2ddl.auto create-drop 自动建表,每次框架运行结束都会将所有表删除(开发环境中测试使用)
            #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表,如果已经存在不会再生成,如果表有变动,自动更新表(不会删除任何数据)
            #hibernate.hbm2ddl.auto validate    校验,不自动生成表,每次启动会校验数据库中表是否正确,校验失败
             -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 引入orm元数据,路径书写:填写src下的路径 -->
            <mapping resource="com/hibernate/domain/Customer.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

     

    3)创建一个创建单例工厂的工具类

    package com.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    /**
     * @author: XDZY
     * @date: 2018/11/15 15:04
     * @description: 获取session对象
     */
    public class HibernateUtils {
        private static SessionFactory sessionFactory;
    
        //静态代码块,类加载时执行
        //保证SessionFactory的唯一
        static {
            //配置加载类,加载元数据配置文件和src下的主配置文件
            //调用无参方法,其中主配置文件名必须为hibernate.cfg.xml
            Configuration conf = new Configuration().configure();
            //创建SessionFactory对象
            //这是一个线程安全对象,用于保存和使用配置信息,消耗内存资源巨大(所以以后只创建一个)
            sessionFactory = conf.buildSessionFactory();
        }
    
        /**
         * 获取一个全新的session
         *
         * @return
         */
        public static Session openSession() {
            //创建Session对象
            //hibernate与数据库之间的会话;完成增删改查操作
            Session session = sessionFactory.openSession();
            //返回session
            return session;
        }
    
        /**
         * 获取一个与线程绑定的session
         *
         * @return
         */
        public static Session getCurrentSession() {
            //创建Session对象
            //hibernate与数据库之间的会话;完成增删改查操作
            Session session = sessionFactory.getCurrentSession();
            //返回session
            return session;
        }
    
        public static void main(String[] args) {
            System.out.println(HibernateUtils.openSession());
        }
    }

     

    4)测试增删改查

    package com.hibernate.test;
    
    import com.hibernate.domain.Customer;
    import com.hibernate.utils.HibernateUtils;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    /**
     * @author: XDZY
     * @date: 2018/11/15 11:41
     * @description: 测试hibernate框架
     */
    public class HibernateTest {
        /**
         * 添加客户信息
         */
        @Test
        public void addTest() {
            //配置加载类,加载元数据配置文件和src下的主配置文件
            //调用无参方法,其中主配置文件名必须为hibernate.cfg.xml
            Configuration conf = new Configuration().configure();
            //创建SessionFactory对象
            //这是一个线程安全对象,用于保存和使用配置信息,消耗内存资源巨大(所以以后只创建一个)
            SessionFactory sessionFactory = conf.buildSessionFactory();
            //创建Session对象
            //hibernate与数据库之间的会话;完成增删改查操作
            Session session = sessionFactory.openSession();
            //开启事务并获取事务对象
            Transaction tx = session.beginTransaction();
    
            /********************* 数据库操作 **********************/
    
            Customer customer = new Customer();
            customer.setCust_name("xdzy");
            session.save(customer);
    
            /*******************************************************/
    
            //提交事务
            tx.commit();
            session.close();
            sessionFactory.close();
        }
    
        /**
         * 删除客户信息
         */
        @Test
        public void deleteTest() {
            //创建Session对象
            Session session = HibernateUtils.openSession();
            //开启事务并获取事务对象
            Transaction tx = session.beginTransaction();
    
            /********************* 数据库操作 **********************/
    
            //获取ID为1的客户
            Customer customer = session.get(Customer.class, 1L);
            //删除
            session.delete(customer);
    
            /*******************************************************/
    
            //提交事务
            tx.commit();
            session.close();
        }
    
        /**
         * 修改客户信息
         */
        @Test
        public void updateTest() {
            //创建Session对象
            Session session = HibernateUtils.openSession();
            //开启事务并获取事务对象
            Transaction tx = session.beginTransaction();
    
            /********************* 数据库操作 **********************/
    
            Customer customer = session.get(Customer.class, 1L);
            customer.setCust_name("张三");
            session.update(customer);
    
            /*******************************************************/
    
            //提交事务
            tx.commit();
            session.close();
        }
    
        /**
         * 查询客户信息
         */
        @Test
        public void selectTest() {
            //创建Session对象
            Session session = HibernateUtils.openSession();
            //开启事务并获取事务对象
            Transaction tx = session.beginTransaction();
    
            /********************* 数据库操作 **********************/
    
            Customer customer = session.get(Customer.class, 1L);
            System.out.println(customer);
    
            /*******************************************************/
    
            //提交事务
            tx.commit();
            session.close();
        }
    }

     

  • 相关阅读:
    游标cursor
    SQL: EXISTS
    LeetCode Reverse Integer
    LeetCode Same Tree
    LeetCode Maximum Depth of Binary Tree
    LeetCode 3Sum Closest
    LeetCode Linked List Cycle
    LeetCode Best Time to Buy and Sell Stock II
    LeetCode Balanced Binary Tree
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/xdzy/p/9964066.html
Copyright © 2011-2022 走看看