文章对应的项目github地址
https://github.com/mini-xiao/hibernate
首先新建一个空白的java项目
File --> New --> Project
依赖的什么都不选,选中左边的java,然后点击Next就可以了
下一步之后会有一个提示
在这里需要选第一个,创建一个Main的类出来,这样可以直接创建出项目的结构出来
要是不选,也可以,就自己新建几个目录就可以了
下一步就是项目的名称跟路径了,这个看个人填写
填完选择Finish
这就是建好的项目结构
根目录下新建一个架包lib
然后导入这些包,一个都不能少,少了都是会报错的
最后记得导入jar包,右键–>Add as Library…
具体这些jar包都有哪些功能,有兴趣的移步搜索学习
这里的实体类注释跟hbm.xml映射文件都是处理映射的
所以只需选择一个
建好就可以了
两个都建没影响,但意义不大
实体类就是对应着数据库表的一个对象类
一个表都会对应着一个实体类
新建一个UserEntity实体类
这里我放在com.xiao.Entity目录下
package com.xiao.Entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;
@Entity //实体类注释 --必填
@Table(name = "user") //对应的数据库表 name填写对应的表名 --必填
public class UserEntity {
@Id //主键id注释 --字段名与列名一致可不填
@JoinColumn(name = "id") //列名
private int id;
@JoinColumn(name = "name") //列名 --字段名与列名一致可不填
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UserEntity{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
新建一个UserEntity.hbm.xml映射文件
处理UserEntity(无注释)
跟数据库表的映射
这里我放在com.xiao.mapper目录下
<?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">
<hibernate-mapping>
<class name="com.xiao.Entity.UserEntity" table="user">
<id name="id" type="int">
<column name="id"/>
</id>
<property name="name" type="java.lang.String">
<column name="name"/>
</property>
</class>
</hibernate-mapping>
配置文件放在src根目录下
如果想换其他目录下,运行时需要指定路径
新建hibernate.cfg.xml配置文件
hibernate.cfg.xml是默认配置名称,有改动运行时需要指定文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库路径url-->
<property name="connection.url">jdbc:mysql://192.168.31.120:3306/test</property>
<!--驱动名称-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库账号-->
<property name="connection.username">root</property>
<!--数据库密码-->
<property name="connection.password">123456</property>
<!-- 数据库方言 -->
<!-- hibernate是要把Java对象转换成关系数据库来描述的,为了更好适配各种关系数据库 -->
<!-- 针对每种数据库都指定了一个方言dialect。-->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 控制台是否打印sql语句 -->
<property name="show_sql">true</property>
<!-- 打印的sql语句是否格式化 -->
<property name="format_sql">true</property>
<!-- 指定自动生成数据表的策略 update为加载hibernate时自动更新数据库结构-->
<property name="hbm2ddl.auto">update</property>
<!-- 二选一 -->
<!-- 3.1选择这个 -->
<mapping class="com.xiao.Entity.UserEntity"/>
<!-- 3.2选择这个 -->
<mapping resource="com/xiao/mapper/UserEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>
需要注意的地方
如果选择3.1注释方法,则mapper目录及hbm.xml文件就不会存在
如果选择3.2方法,则UserEntity实体类还是需要建,但注释不需要写
在我们新建项目时自动创建的Main类下进行连接测试
package com.xiao;
import com.xiao.Entity.UserEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.List;
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration();
//这里指定了配置文件,如果是默认路径跟名称,则不需要指定文件,configure方法不需要传参
//hibernate会自动在src目录下寻找hibernate.cfg.xml配置文件
File file= new File("src/hibernate.cfg.xml");
configuration.configure(file);
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
//查询数据库表数据
//这里的`from UserEntity` 是指向UserEntity类,而不是数据库表名,SQL与HQL的区别
Query query = session.createQuery("from UserEntity");
List<UserEntity> list = query.list();
System.out.println(list);
//开启事务
Transaction transaction = session.beginTransaction();
UserEntity userEntity =new UserEntity();
userEntity.setId(1);
userEntity.setName("111");
session.save(userEntity);
//提交事务
transaction.commit();
//再次查询提交后的数据
Query query1 = session.createQuery("from UserEntity");
List<UserEntity> list1 = query1.list();
System.out.println(list1);
//关闭连接
session.close();
}
}
可以看到运行之后,控制台打印的sql语句及数据
hbm2ddl.auto
生成策略我们选择了update
hibernate连接后,就会看是否有对应的表,没有就会创建数据库表,有则判断是否需要更新字段
所以第一次运行会有建表的sql语句,后面不会再有
Hibernate:
create table user (
id integer not null,
name varchar(255),
primary key (id)
) engine=InnoDB
Hibernate:
select
userentity0_.id as id1_0_,
userentity0_.name as name2_0_
from
user userentity0_
[]
Hibernate:
insert
into
user
(name, id)
values
(?, ?)
Hibernate:
select
userentity0_.id as id1_0_,
userentity0_.name as name2_0_
from
user userentity0_
[UserEntity{
id=1, name='111'}]
利用工具Navicat连接数据库验证
可以看到数据库有了这个表,并且也添加了数据
hibernate项目就完成了
对您有帮助请帮忙点个赞
有疑问可留言评论,相互学习