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单元测试







  • 相关阅读:
    【面试】代码默写-DCL单例
    【状态机】SCXML2
    【面试】JVM
    【面试】HashMap
    读取resource下sql脚本并执行
    Maven 二进制资源文件(excel pdf...)部署出错,乱码的解决方案
    【JVM】java内存模型
    【Spring】源码二、IOC
    mapstruct 高级用法
    warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 8.0 to 13.2.99.
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469548.html
Copyright © 2011-2022 走看看