• 初识Hibernate——添加数据


    ORM:Object Relational Mapping 实体关系映射,Hibernate将关系型数据库转换为对象操作

    利用Java Project项目演示试用Hibernate技术添加数据到数据库

    1、引用相关jar包

      在项目下新建Mylib文件夹,加jar包粘贴就去,试用Build Path添加在项目中(若是Jave Web项目则放在WebRoot-->WEB-INF-->lib中直接使用)

    2、创建Hibernate配置文件, hibernate.cfg.xml或是hibernate.properties 。添加在src下

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <!-- thread:一个线程中使用一个,获取session会话时使用 -->
            <property name="current_session_content_class">thread</property>
            <!-- 是否显示SQL语句,值为布尔型,默认false -->
            <property name="hibernate.show_sql">true</property>
            <!-- 是否格式化显示sql语句,让显示更美观,值为布尔型,默认false -->
            <property name="hibernate.format_sql">false </property>
            <!-- 自动建表
                update:每次执行时,无表则建表,无列则建列,只增不减 
                create:每次启动的时候,删除原表,再次创建
                create-drop:每次启动时创建新表,当显式关闭sessionFactory时,删除表
            -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 连接数据库 -->
            <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/zxd_db</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.username">zxd</property>
            <property name="hibernate.connection.password">123456</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 读取映射文件 -->
            <mapping resource="demo/orm/entity/Hero.hbm.xml" />
                
        </session-factory>
    </hibernate-configuration>

    hibernate.properties配置文件只能配置属性信息,不能配置映射等

    hibernate.connection.username=zxd
    hibernate.connection.password=123456

    3、创建实体

    package demo.orm.entity;
    
    import java.util.Date;
    
    public class Hero {
        private int heroId;
        private String heroName;
        private int heroAge;
        private Date birthday;
        
        
        public int getHeroId() {
            return heroId;
        }
        public void setHeroId(int heroId) {
            this.heroId = heroId;
        }
        public String getHeroName() {
            return heroName;
        }
        public void setHeroName(String heroName) {
            this.heroName = heroName;
        }
        public int getHeroAge() {
            return heroAge;
        }
        public void setHeroAge(int heroAge) {
            this.heroAge = heroAge;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        
    }
    View Code

    4、创建实体映射关系 

    <?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>
        <!-- name:实体, table:表名 -->
        <class name="demo.orm.entity.Hero" table="yingxiong">
            <!-- name:主键的名字,column:主键数据库表列,identity自增 -->
            <id name="heroId" column="ID">
                <!-- Hibernate使用generator类来生成主键 -->
                <generator class="identity" />
            </id>
            <!-- name:实体中的属性名,length:长度 ,column:表中的字段(实体属性和字段一致可省略),type:类型(可不写由hiberbate自动匹配) -->
            <property name="heroName" length="100" column="NAME" type="string" />
            <property name="heroAge" column="AGE" type="int" />
            <property name="birthday" column="BIR" type="timestamp" />
        </class>
    </hibernate-mapping>

    5、保存数据

    package demo.orm.test;
    
    import java.util.Date;
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.classic.Session;
    
    import demo.orm.entity.Hero;
    
    public class SaveTest {
    
        public static void main(String[] args) {
            /*
             * 两种配置文件的加载方式,hibernate.properties只配置数据库的连接方式
             * 属性文件(hibernate.properties)调用代码:Configuration cfg = new Configuration(); 
             * Xml文件(hibernate.cfg.xml) 调用代码:Configuration cfg = new Configuration().configure();
             * */
            
            //加载Hibernate配置信息,默认读取src下的hibernate.cfg.xml
            Configuration cfg = new Configuration().configure();
            //也可以指定hibernate.cfg.xml 的路径加载
            //Configuration cfg1 = new Configuration().configure(Path);
            
            /*
             * 应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。
             * 通常情况下,整个应用只有唯一的一个会话工厂,SessionFactory由Configuration对象创建,
             * 每个Hibernate配置文件,实际上是对SessionFactory的配置
             * */
            //试用配置信息构建sessionFactory
            SessionFactory factory = cfg.buildSessionFactory();
            
            /*
             * Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。
             *  Session也称为持久化管理器,因为它是与持久化有关的操作接口。
             *     持久化对象的状态:瞬时对象(Transient Objects)、持久化对象(Persist Objects)、离线对象(Detached Objects)
             *  Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
             *  它与Web层的HttpSession没有任何关系。
             * */
            //方式一:通过会话工厂构建session会话,进行增删改查,是Hibernate与数据库的会话(需要关闭)
            Session session = factory.openSession();
            //通过Id值查询(查询的时候不需要使用事物)
            session.get(Hero.class, 1);
            //通过hql查询
            Query query =session.createQuery("from Hero where hreoAge=30");
            List<Hero> list = query.list();
            for(Hero model:list){
                System.out.println(model.getHeroName());
            }
            
            
            //方式二:获取当前线程中最近试用的session,没有再open。节省资源
            Session session1 =factory.getCurrentSession();
            //CurrentSession必须使用事物(增删改查)
            session1.beginTransaction();
            session1.get(Hero.class, 1);
            session1.getTransaction().commit();
            
            //启动会话事物
            session.beginTransaction();
            /*******执行增删改查会话操作********/
            Hero model= new Hero();
            model.setHeroName("Don");
            model.setHeroAge(28);
            model.setBirthday(new Date());
            
            session.save(model);
            
            //提交事物
            session.getTransaction().commit();
            //判断会话是否开启
            if(session.isOpen()){
                session.close();
            }
            
        }
    
    }

     注意:数据库使用MySql,连接工具使用navicat连接,需要在数据库中建立相关表,并查看相关数据信息

  • 相关阅读:
    Linux_access the file or directory which start with "-"
    Jasper_crosstab_measure_display a value of field in crosstab total row
    Linux_Shell符号及各种解释对照表
    Linux_Shell type
    Jasper_passValue_return value from the subreport to main report
    Jasper_table_resolve multiple copies of table in detail band issue
    Jasper_crosstab_headerPosition_columngroup header position config
    Linux
    un ange frappe a ma porte
    Linux
  • 原文地址:https://www.cnblogs.com/zxd543/p/6688958.html
Copyright © 2020-2023  润新知