zoukankan      html  css  js  c++  java
  • hibernate 简单入门 配置

    hibernate两个配置文件,一个是类和表的映射关系文件,一个是数据库连接的配置文件

    类和表的映射关系

    <?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">
    <hibernate-mapping auto-import="false">
     <!-- 
            class:将持久化对象(javabean)关联数据库表
                * name:持久化对象的名称(包名)
                * table:表名称
         -->
     <class name="com.itheima.a_primer.Customer" table="a_customer">
      <!-- 
                id:主键映射(必须要有主键)
                    * <generator class="increment"></generator>:主键生成策略
                            * increment:自增长
                            
             -->
      <id column="id" name="id" type="integer">
       <generator class="increment"/>
      </id>
      <!-- 
                property:将持久化对象对象(javabean)中的属性映射数据库表的字段
                    * name:持久化对象的属性名称
                    * type:表示Hibernate的类型(用来将持久化对象的属性类型,映射成数据库所支持的类型)
                            * 写成:java.lang.String
                            * 写成:string
                    * column:数据库表列的名字
             -->
      <property generated="never" lazy="false" name="name" type="string">
       <column name="name" sql-type="varchar(50)"/>
      </property>
      <property column="age" generated="never" lazy="false" name="age" type="integer"/>
      <property column="des" generated="never" lazy="false" name="des" type="string"/>
     </class>
    </hibernate-mapping>

    连接配置

    <?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itheima0309?useUnicode=true&amp;characterEncoding=utf8</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            
            <!-- 操作Hibernate的配置 -->
            <!-- 
                方言:hibernate在执行查询的时候,指定哪种数据库来执行查询,因为每种数据库执行的查询是不同的
             -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
            <!-- 
                映射文件to数据库表
                    * 指定程序运行时是否在数据库自动生成数据表
                    * create:如果数据库中没有表,可以创建表,但是每次操作都会先删除表,再创建表
                    * none:默认:不能通过hibernate的映射文件不能创建表,有表会直接操作
                    * update:如果数据库中没有表,可以创建表,如果有表,就直接操作,不需要创建表
            -->
            <property name="hibernate.hbm2ddl.auto">update</property> 
            <!-- 
                在控制台显示sql语句(方便我们查看hibernate底层输出的sql)
             -->
            <property name="hibernate.show_sql">true</property>
            
            
            
        </session-factory>
    </hibernate-configuration>

    代码操作

    实体类遵循javabean规范

    package com.itheima.a_primer;
    
    public class Customer {
    
        private Integer id;//主键字段
        private String name;
        private Integer age;
        private String des;
        
        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 Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public String getDes() {
            return des;
        }
        public void setDes(String des) {
            this.des = des;
        }
        
        
    }

    测试存储

    package com.itheima.a_primer;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class CopyOfApp {
    
        @Test
        public void save(){
            //加载hibernate.cfg.xml和Customer.hbm.xml
            Configuration configuration = new Configuration();
            configuration.configure();//默认加载classpath路径下(src下)的hibernate.cfg.xml
            /**
             * 方案一:要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同
             * configuration.addClass(Customer.class)
             * 等同于:在hibernate.cfg.xml中配置:
             * <mapping class="com.itheima.a_primer.Customer"/>
             * 
             * 方案二:如果Customer.java和Custoemr.hbm.xml不放在同一个包下
             * configuration.addResource("com/itheima/a_primer/Customer.hbm.xml");
             * 等同于:在hibernate.cfg.xml中配置:
             * <mapping resource="com/itheima/a_primer/Customer.hbm.xml"/>
             */
            configuration.addClass(Customer.class);//加载Customer.java文件(要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同)
            //创建SessionFactory类,这是hibernate操作数据库的工厂,相当于jdbc中的连接池
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            //建Session类,这是hibernate操作数据库的核心类,相当于jdbc中的连接(connection)
            Session session = sessionFactory.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现
            Customer c = new Customer();
            c.setName("黄蓉");
            c.setAge(18);
            c.setDes("女侠");
            
            //保存
            session.save(c);
            //提交事务
            tr.commit();
            session.close();
        }
    }
    package com.itheima.a_primer;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class App {
    
        static SessionFactory sf = null;
        
        static{
            //加载hibernate.cfg.xml和Customer.hbm.xml
            Configuration configuration = new Configuration();
            configuration.configure("com/itheima/a_primer/hibernate.cfg.xml");
            configuration.addClass(Customer.class);
            sf = configuration.buildSessionFactory();
        }
        
        /**保存*/
        @Test
        public void save(){
            Session session = sf.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现
            Customer c = new Customer();
            c.setName("黄老邪");
            c.setAge(68);
            c.setDes("侠");
            
            //保存
            session.save(c);
            //提交事务
            tr.commit();
            session.close();
        }
        
        /**更新*/
        @Test
        public void update(){
            Session session = sf.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现
            Customer c = new Customer();
            c.setId(2);
            c.setName("蓉儿");
            c.setAge(18);
            c.setDes("修改后");
            
            //更新
            session.update(c);
            //提交事务
            tr.commit();
            session.close();
        }
        
        /**8.通过id删除客户信息*/
        @Test
        public void delete(){
            Session session = sf.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现
            Customer c = new Customer();
            c.setId(2);
            
            //删除
            session.delete(c);
            //提交事务
            tr.commit();
            session.close();
        }
        
        /**9.通过id查询客户信息*/
        @Test
        public void findObjectByID(){
            Session session = sf.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现
            Customer c = (Customer) session.get(Customer.class, 3);//或者session.load()
            System.out.println(c.getId()+"     "+c.getName());
            //提交事务
            tr.commit();
            session.close();
        }
        
        /**10. 查询所有的客户信息*/
        @Test
        public void findAll(){
            Session session = sf.openSession();
            //开启事务
            Transaction tr = session.beginTransaction();
            
            //操作对象的过程就是操作数据库表的实现(面向对象的编程)
            //HQL语句:hql语句,操作持久化对象和对象中的属性 select c from Customer c  ===  from Customer c
            //SQL语句:sql语句,操作数据表和字段,select * from a_customer
            String hql = "from Customer c";
            Query query = session.createQuery(hql);
            List<Customer> list = query.list();
            if(list!=null && list.size()>0){
                for(Customer c:list){
                    System.out.println(c.getId()+"     "+c.getName());
                }
            }
            //提交事务
            tr.commit();
            session.close();
        }
    }
  • 相关阅读:
    ORA-28040: No matching authentication protocol
    kettle增量抽取数据--高效抽取方式
    为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?
    echarts饼图指示线文字换行
    数据库概论
    Java学习笔记
    案例分析
    软件工程作业3
    软件工程作业2
    软件工程作业1
  • 原文地址:https://www.cnblogs.com/baijin05/p/5093568.html
Copyright © 2011-2022 走看看