hibernate学习之简单入门程序

6 篇文章 0 订阅
6 篇文章 0 订阅

1. 创建项目,导入jar包,创建Java项目即可。

(1)在hibernate-release-5.2.12.Final\lib\required中的所有jar包,和lib\jpa-metamodel-generator在的jar包

(2)mysql的驱动包:mysql-connector-java-5.1.38-bin.jar

(3)日志包:log4j-1.2.17.jar,slf4j-api-1.7.5.jar,slf4j-log4j12-1.7.5.jar

(4)在项目下面新建lib包(Folder),将上面的jar复制进去,然后选中jar包,右键选择Bulid path->Add to bulid path

2. 创建实体类

public class User {
	
	//hibernate要求实体类有一个属性是唯一的
	private int uId;
	private String uName;
	private String uPassword;
	private String uAddress;
	public int getuId() {
		return uId;
	}
	public void setuId(int uId) {
		this.uId = uId;
	}
	public String getuName() {
		return uName;
	}
	public void setuName(String uName) {
		this.uName = uName;
	}
	public String getuPassword() {
		return uPassword;
	}
	public void setuPassword(String uPassword) {
		this.uPassword = uPassword;
	}
	public String getuAddress() {
		return uAddress;
	}
	public void setuAddress(String uAddress) {
		this.uAddress = uAddress;
	}
}

注:使用hibernate时,不需要手动创建表,hibernate可以帮我们创建表

3. 配置实体类和数据库表一一对应关系(映射关系,使用配置文件实现映射关系

(1)创建xml格式的配置文件,文件的名称和位置没有固定的要求(一般建议在实体类所在的包里面创建,实体类名称.hbm.xml)。如在这个项目中要建立User.hbm.xml。

(2)在xml文件(User.hbm.xml)中引入xml约束(如dtd、schema),在hibernate里面需要引进dtd约束。

寻找方法:在hibernate-release-5.2.12.Final中搜索hbm.xml,打开其中某个文件复制下来即可。

<?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">
(3)配置映射关系
<hibernate-mapping>
	<!-- 1. 配置类和表 -->
	<class name="com.zzc.entity.User" table="user">
		<!-- 2.配置实体类id和表id对应 -->
		<id name="uId" column="uId">
			<!-- 3. 设置数据库表id增长策略(自动增长:native)-->
			<generator class="native"></generator>
		</id>
		<!-- 设置其他属性和表字段类型 -->
		<property name="userName" column="userName"></property>
		<property name="password" column="password"></property>
		<property name="address" column="address"></property>
	</class>
</hibernate-mapping>
4. 创建hibernate核心配置文件

(1)hibernate核心配置文件为xml格式,但它的名称和位置是固定的。

- 名称:必须为hibernate.cfg.xml

- 位置:必须在src下面

(2)引入dtd约束

<!DOCTYPE hibernate-configuration PUBLIC 
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载,所以要在核心配置文件中配置。

第一部分:配置数据库信息(必须的)

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">数据库的用户名</property>
<property name="hibernate.connection.password">数据库的密码</property>

第二部分:配置hibernate信息 (可选的)

<!-- 输出底层SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 输出底层SQL语句 格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate创建表(需要配置)
	update:如果有表->更新,如果没有->创建
 -->
 <property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库方言:让hibernate框架识别不同数据库特有的语句
	在MySQL中实现分页:使用limit关键字(只能在mysql中使用),
	在oracle中实现分页:使用rownum
 -->
 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

第三部分:把映射文件放到核心配置文件中(必须的)

<mapping resource="com/***/***/entity/User.hbm.xml"/>
hibernate.cfg.xml内容
<?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/hibernate?characterEncoding=utf-8</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
		<!-- 第二部分:配置hibernate信息 -->
		<!-- 输出底层SQL语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 输出底层SQL语句 格式 -->
		<property name="hibernate.format_sql">true</property>
		<!-- hibernate创建表(需要配置)
			update:如果有表->更新,如果没有->创建
		 -->
		 <property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 配置数据库方言:让hibernate框架识别不同数据库特有的语句
			在MySQL中实现分页:使用limit关键字(只能在mysql中使用),
			在oracle中实现分页:使用rownum
		 -->
		 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 第三部分:把映射文件放到核心配置文件中 必须的 -->
		<mapping resource="com/zzc/hibernate/entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>
5. 实现增删查改功能

第一步:加载hibernate的核心配置文件

Configuration cfg = new Configuration();
cfg.configure();

第二步:创建SessionFactory对象

SessionFactory sessionFactory = cfg.buildSessionFactory();

第三步:使用SessionFactory创建session对象

Session session = sessionFactory.openSession();

第四步:开启事务

Transaction ts = session.beginTransaction();

第五步:写具体逻辑crud操作(添加功能)

User user = new User();
user.setUserName("王小明");
user.setPassword("1234");
user.setAddress("北京市");
//调用session方法实现添加功能
session.save(user);

第六步:提交事务

ts.commit();

第七步:关闭资源

session.close();
sessionFactory.close();
完整的代码:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.zzc.hibernate.entity.User;

public class HibernateTestDemo {

	
	public static void testAdd() {
		Configuration cfg = new Configuration();
		cfg.configure();
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction ts = session.beginTransaction();
		
		User user = new User();
		user.setUserName("王小明");
		user.setPassword("1234");
		user.setAddress("北京市");
		
		session.save(user);
		ts.commit();
		session.close();
		sessionFactory.close();
	}
	public static void main(String[] args) {
		testAdd();
	}
}
6. 测试结果

(1)起初出现了问题,报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate.user’...

解决办法:将hibernate.cfg.xml中配置方言的部分代码改为:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
(2)之后报错Incorrect string value: '\xE7\x8E\x8B\xE5\xB0\x8F...' for column 'userName' at row 1。产生 这个错误的原因是,在创建 数据库 的的时候编码格式为latin1,只要将编码改为UTF-8即可。

改完数据库后,在进行测试,成功创建user表,并将数据导入。

console输出:

Hibernate: 
    
    create table user (
       uId integer not null auto_increment,
        userName varchar(255),
        password varchar(255),
        address varchar(255),
        primary key (uId)
    ) engine=InnoDB
Hibernate: 
    insert 
    into
        user
        (userName, password, address) 
    values
        (?, ?, ?)
注:如果数据库方言配置为:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
也可正常执行,console输出为:
Hibernate: 
    
    create table user (
       uId integer not null auto_increment,
        userName varchar(255),
        password varchar(255),
        address varchar(255),
        primary key (uId)
    ) engine=MyISAM
Hibernate: 
    insert 
    into
        user
        (userName, password, address) 
    values
        (?, ?, ?)
由此可见: MySQL5Dialect效果和MySQLMyISAMDialect效果是一致的,如果想要使用InnoDB,请一定配置org.hibernate.dialect.MySQL5InnoDBDialect

各数据库对应的方言(Dialect):

数据库

方言(Dialect)

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

PostgreSQL

org.hibernate.dialect.PostgreSQLDialect

MySQL5

org.hibernate.dialect.MySQL5Dialect

MySQL5 with InnoDB

org.hibernate.dialect.MySQL5InnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracle(any version)

org.hibernate.dialect.OracleDialect

Oracle 9i

org.hibernate.dialect.Oracle9iDialect

Oracle 10g

org.hibernate.dialect.Oracle10gDialect

Oracle 11g

org.hibernate.dialect.Oracle10gDialect

Sybase

org.hibernate.dialect.SybaseASE15Dialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server 2000

org.hibernate.dialect.SQLServerDialect

Microsoft SQL Server 2005

org.hibernate.dialect.SQLServer2005Dialect

Microsoft SQL Server 2008

org.hibernate.dialect.SQLServer2008Dialect

SAP DB

org.hibernate.dialect.SAPDBDialect

Informix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

H2 Database

org.hibernate.dialect.H2Dialect

Ingres

org.hibernate.dialect.IngresDialect

Progress

org.hibernate.dialect.ProgressDialect

Mckoi SQL

org.hibernate.dialect.MckoiDialect

Interbase

org.hibernate.dialect.InterbaseDialect

Pointbase

org.hibernate.dialect.PointbaseDialect

FrontBase

org.hibernate.dialect.FrontbaseDialect

Firebird

org.hibernate.dialect.FirebirdDialect

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值