hibernate学习之简单入门程序
2018-01-24 18:58
369 查看
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)配置映射关系
(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内容
第一步:加载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();完整的代码:
(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输出为:
各数据库对应的方言(Dialect):
(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(2 c01e 55), 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 |
相关文章推荐
- Hibernate学习---第一节:hibernate配置和入门程序
- ROR 学习笔记系列二 基于ROR的简单Hello World程序入门
- 【JavaEE学习笔记】Servlet_01_入门,简单的Servlet程序
- 网易云课堂程序设计入门--C语言第一周 简单的计算程序学习笔记
- Mahout学习之Mahout简单介绍、安装、配置、入门程序測试
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Hibernate_配置详解>(三十六)
- django学习入门一:搭建一个简单的Django程序
- 学习史上最简单的Hibernate入门简介有感
- [Mule学习]入门:写一个最简单的小程序ZT
- 入门篇-学习点滴之最简单的Linux关机命令程序
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Hibernate_实战演练>(三十七)
- Struts学习之简单入门程序
- C#入门学习-----简单画图程序
- Hibernate4学习(1) 建立简单的Hibernate程序
- 史上最简单的Hibernate入门简介
- SiteMesh 2学习(1):入门简介和简单实例
- Hibernate的学习之路二(入门)
- hibernate简单入门
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- Hibernate的学习之路四(入门代码)