zoukankan      html  css  js  c++  java
  • hibernate基本配置与简单增删改查

      ORM(Object Relation Mapping)是对象关系映射,是一个思想,它的作用是在关系数据库与对象之间做一个自动映射,将数据库中的表格映射到一个类,也就是持久化类,数据表中每行映射为对象,行中的各个字段映射为对象的属性,这样可以在开发中使用面向对象的思想来操作数据库。

      其中hibernate是ORM思想实现的一个持久层框架。

    其中有三个主要的内容:1.持久化类(*.java) 2.映射文件(*.hbm.xml) 3.配置文件(*.cfg.xml)

    使用Hibernate框架搭建一个最基本的应用(oracle)。。。

    1....首先,创建一个工程,java或web

    2....将hibernate有关的jar包导入及数据库驱动包

     

    hibernate-release-4.3.11.Final
    //由于我使用的4.3.11版本,我把其目录下/lib/required下的所有包都导入工程
    //由于要与数据库连接,需要导入数据连接的驱动jar包
    

    3....书写一个Javabean ---持久化类..须对应于数据表的各个字段

    public class Info {
    	private String sno;
    	private String sname;
    	public String getSno() {
    		return sno;
    	}
    	public void setSno(String sno) {
    		this.sno = sno;
    	}
    	public String getSname() {
    		return sname;
    	}
    	public void setSname(String sname) {
    		this.sname = sname;
    	}
    
    }
    

    4....写一个映射文件,从hibernate包中找个(*.hbm.xml)然后修改,或者使用jboss tools插件生成一个(需要根据eclipse及java版本额外安装),作用是映射持久化类与数据表的不同字段

      一个持久化类对应一个映射文件xml,可有多个映射文件,代码中可以添加其他属性值

    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!--文件名为 持久化类.hbm.xml 存放在持久化类包中即可,在下面配置文件中配置此路径-->
    
    <!-- package 声明一个根包,或者在实体类名字加包名 -->
    <hibernate-mapping package="com.xx">
    	<!-- 实体类 对应 表 -->
        <class name="Info" table="info">
        	<!-- 主键 -->
            <id name="sno" column="sno">
            </id>
            
            <!-- 非主键 -->
            <property name="sname" column="SNAME" >
            </property>
        </class>
    
    </hibernate-mapping>

    5....书写一个配置文件,作用是存储链接数据库与映射文件的一些属性。。其方法同映射文件,找一个修改或者使用插件自动生成

    <!DOCTYPE hibernate-configuration PUBLIC
    	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <!--文件名字为hibernate.cfg.xml 需要存放在src根目录下-->
    <hibernate-configuration>
    	<session-factory>
    		<!-- 数据库连接配置 -->
    		<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    		<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
    		<property name="connection.username">xxx</property>
    		<property name="connection.password">xxxx</property>
    		<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property><!--连接方言,寻找属于自己的数据库类,可以选择低版本-->
    		<property name="show_sql">true</property><!--控制台输出sql语句-->
    		<!-- 加载所有映射(映射文件不止一个) -->
    		
    		<mapping resource="com/xx/Info.hbm.xml"/>
    	</session-factory>
    </hibernate-configuration>
    

    6.....已经配置完成,然后测试一下(插入操作)

    public void add(){
    		Info info = new Info();
    		info.setSno("21");
    		info.setSname("张三sh");
    		//获取加载配置文件的管理类对象
    		Configuration config = new Configuration();
    		config.configure(); //加载 
    		//创建session的工厂对象
    		SessionFactory sf = config.buildSessionFactory();
    		//创建session 一个会话(与数据库连接的会话)
    		Session session = sf.openSession();
    		//开启事务
    		Transaction ts = session.beginTransaction();
    		//执行语句(这是插入语句)
    		session.save(info);
    		//提交事务
    		ts.commit();
    		//关闭session
    		session.close();
    		//关闭session工厂对象
    		sf.close();
    	}
    

    7...运行后 控制台可输出一个插入语句,然后进入数据库查看一下,是否插入成功。。。。。

    -----这只是基本的测试是否成功,至于其他方法,继续测试即可,这里只列举简单的增删改查方法

      1.插入为上边代码

      2.查询方法,以主键查询

    //以主键查询 get方法
        Info info = (Info)session.get(Info.class,"1");
        System.out.println(info.getSno());
        System.out.println(info.getSname());
    //输出结果
    Hibernate: select info0_.sno as sno0_0_, info0_.SNAME as SNAME0_0_ from info info0_ where info0_.sno=?
    1
    张三
    
    
    		
    		
    //以主键查询 load方法
        Info info = (Info)session.load(Info.class,"1");
        System.out.println(info.getSno());
        System.out.println(info.getSname());
    //输出结果
    1
    Hibernate: select info0_.sno as sno0_0_, info0_.SNAME as SNAME0_0_ from info info0_ where info0_.sno=?
    张三
    

          注意:通过对比get与load方法,load方法是延迟执行sql代码,节省系统资源,除了主键,当查询其他属性字段时,才调用sql语句

      3.删除方法 delete

     

    Info info = new Info();
    info.setSno("24");
    
    session.delete(info);
    
    //输出结果
    Hibernate: select info_.sno, info_.SNAME as SNAME0_ from info info_ where info_.sno=?
    Hibernate: delete from info where sno=?
    

          注意:通过执行结果,可以看出,删除操作是先通过主键查询,然后执行删除操作

      4.修改方法 update

    Info info = new Info();
    info.setSno("24");
    
    session.update(info);
    
    //输出结果
    Hibernate: update info set SNAME=? where sno=?
    

        注意:通过输出sql语句可以看出,如果持久化对象不设定字段值时,它也需要set,所以会传递null,所以更改时需要,主要各个字段的赋值

       

      

  • 相关阅读:
    c#反射动态创建窗体
    ImageSwitcher 图片切换器
    viewSwitcher 切换视图
    ratingBar 星级评分条
    seekBar拖动滑块
    pythonUDP发送结构体,对齐到C++结构体
    pyqt5界面
    progressbar
    SVN服务器搭建和使用(一)
    关于MBR、GPT以及BIOS引导模式区分
  • 原文地址:https://www.cnblogs.com/whytohow/p/5118731.html
Copyright © 2011-2022 走看看