zoukankan      html  css  js  c++  java
  • Hibernate——(1)Hibernate入门

    一、Hibernate简介

    1、Hibernate是一款ORM框架,Object Relation Mapping 对象关系映射。

    2、可以将DB映射成Object,这样程序只要对Object对象进行操作就能完成对数据库的操作。

    3、主流的ORM框架有Hibernate,iBatis,JPA......


    二、Hibernate框架体系结构

    1、主配置文件:用于描述数据库连接信息。

         hibernate.cfg.xml或者hibernate.properties

    2、映射描述文件:用于描述映射类及属性与DB表和字段之间的对应关系。

         User.hbm.xml

    3、映射类文件:User.java

    4、主要API

    (1)Cofigration:主要用于加载主配置文件,获取数据库连接。

    (2)SessionFactory:用于创建Session对象,封装了映射信息以及预定义的SQL

    (3)Session:用于对象操作,完成增删改查,删除,修改,查询操作。

    (4)Transaction:用于事务的处理。进行增加、删除、修改时需要注意,因为Hibernate中自动提交功能是关闭的。

    (5)Query:用于执行HQL查询语句。HQL属于面向对象的查询语句,语句中没有表名和字段名。

        

    三、案例:

    案例一:Hibernate HelloWord(1)

    1、项目结构:

    2、新建项目

    3、导入jar包

    4、新建配置文件hibernate.cfg.xml

       放在src目录下,默认为hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<!-- 1. 数据库连接信息 -->
    		<property name="connection.url">
    			jdbc:mysql://localhost:3306/test
    		</property>
    		<property name="connection.username">root</property>
    		<property name="connection.password">root</property>
    		<property name="connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<!-- 2. Hibernate配置信息 -->
    		<!-- dialect是方言,用亍配置生成针对哪个数据库的SQL语句 -->
    		<property name="dialect">
    			<!--Hibernate提供的方言类,用亍封装某种特定数据库的方言 -->
    			org.hibernate.dialect.MySQLDialect
    		</property>
    		<!--将执行sql打印到控制台,一般用亍sql调优 -->
    		<property name="hibernate.show_sql">true</property>
    	</session-factory>
    </hibernate-configuration>

    5、新建映射文件:用于指明POJO类和表之间的映射关系,每个类对应一个映射文件

    (1)执行db.sql脚本

    SQL> DROP TABLE IF EXISTS t_user;
    SQL> CREATE TABLE t_user (
    t_id int(11) NOT NULL AUTO_INCREMENT,
    t_login_name varchar(50) DEFAULT NULL,
    t_password varchar(50) DEFAULT NULL,
    t_name varchar(100) DEFAULT NULL,
    PRIMARY KEY (t_id)

    (2)新建POJO类User.java

    public class User {
    	private Integer id;
    	private String loginName;
    	private String password;
    	private String name;
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getLoginName() {
    		return loginName;
    	}
    
    	public void setLoginName(String loginName) {
    		this.loginName = loginName;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }

    (3)新建映射文件 User.hbm.xml

    映射文件默认与POJO类放在一起;命名规则为类名.hbm.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    	<class name="com.xsyu.tts.po.User" table="t_user">
    		<id name="id" type="java.lang.Integer" column="t_id">
    			<!-- generator用来指明主键的生成方式 -->
    			<generator class="identity"></generator>
    		</id>
    		<property name="loginName" type="java.lang.String" column="t_login_name"></property>
    		<property name="password" type="string" column="t_password"></property>
    		<property name="name" type="java.lang.String" column="t_name"></property>
    	</class>
    </hibernate-mapping>

    主键一般是自动生成的。我们一般不使用业务数据作为主键,因为业务逻辑的改变有可能会改变主键。

    如下图所示,生成主键方式有很多种。


    其中,sequence是使用序列生成主键(Oracle数据库经常使用)Mysql数据库一般使用identity,自动生成主键(注意:需要在建表时指定主键生成为auto_increment)

    (4)在配置文件里关联映射文件

    <!-- 在配置文件中关联映射文件 -->
    <mapping resource="com/xsyu/tts/po/User.hbm.xml" />
    6、测试

    (1)新建TestHibernate向数据库插入一条数据

    public class TestHibernate {
    	/**
    	 * 把一个 User 对象存入数据库
    	 */
    	@Test
    	public void tst1() {
    		// 1. 创建一个 User 对象
    		User user = new User();
    		user.setLoginName("whatisjava");
    		user.setName("goodman");
    		user.setPassword("12345");
    		// 2. 调用 Hibernate 的 API,用亍装载 Hibernate 配置文件
    		Configuration conf = new Configuration();
    		/*
    		 * 3. 在类路径中装载 默认的 配置文件 hibernate.cfg.xml 如果配置文件关联了映射文件,同时也装载了映射信息
    		 */
    		conf.configure();
    		// 3.1 如果装载指定的配置文件
    		// conf.configure(new File("abc.xml"));
    		// 4.创建 SessionFactory
    		SessionFactory factory = conf.buildSessionFactory();
    		// 5.创建 Session
    		// Hibernate 提供的访问接口
    		Session session = factory.openSession();
    		// 6. 获得事务
    		Transaction tx = session.getTransaction();
    		// 6.1 开启事务
    		tx.begin();
    		// 6.2 插入数据
    		session.save(user);
    		// 6.3 提交事务
    		tx.commit();
    		// 7. 关闭 session
    		session.close();
    	}
    }

    (2)运行JUnit单元测试







  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469548.html
Copyright © 2011-2022 走看看