Hibernate自动模式
使用插件帮助我们生成映射文件和实体类
第一步:配置DB视图
使用Idea链接数据库,类似小海豚或者navicat客户端。

配置账户,需要关联MySql驱动类:

初始没有mysql驱动,红色字体后面有 Download.

完成:

链接成功如下图:
数据库对应的表都显示出来了:

Idea可以和Mysql数据库建立了链接。
第二步:创建项目,导入依赖
Hibernate,MySQL,
导入的依赖和上面入门案例添加的依赖一模一样,按照入门案例添加即可。
第三步:给项目添加Hibernate插件支持
添加hibernate的支持:首先选中项目,鼠标右键项目(需要Maven项目首先已添加Hibernate和DB依赖),选择Add Frameworks Support

选中Hibernate:


第四步:生成对应表的实体类和映射文件
跳出下一个视图:选择相应的数据库,及需要生成的实体
注意箭头所指的地方Entity可以去除。

选择表,观察勾选的字段。同时勾选生成字段属性和生成xml文件。
不勾选Generate JPA...

点击yes后:

点击OK:生成内容:主要看映射文件
mysql 对应表结构如下:
CREATE TABLE t_user_info
(
u_id
bigint(20) NOT NULL AUTO_INCREMENT,
u_name
varchar(255) NOT NULL,
u_pass
varchar(255) DEFAULT NULL,
PRIMARY KEY (u_id
)
) ENGINE=InnoDB AUTO_INCREMENT=151 DEFAULT CHARSET=utf8;
生成的映射文件如下:
<?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.zyh.pojo.TUserInfo" table="t_user_info" schema="testmybatis01">
<id name="uId">
<column name="u_id" sql-type="bigint(20)"/>
<!-- 手动添加主键策略 -->
<generator class="identity"></generator>
</id>
<property name="uName">
<column name="u_name" sql-type="varchar(255)"/>
</property>
<property name="uPass">
<column name="u_pass" sql-type="varchar(255)"/>
</property>
</class>
</hibernate-mapping>
生成的内容,缺少主键策略。
添加主键策略:(Eclipse插件可以自动生成)
<generator class="identity"></generator>
生成的内容,没有完全匹配数据库中的字段设置:
not-null="true"

注意 :
导致bug问题,如果数据库表中的内容有字段为空,获取记录的时候会失败。
解决方案:删除生成的not-null="true"
逆向工程自动帮我们处理了表的字段带有下划线的情况
映射类的属性和表的字段,属性和字段名不一致的映射
注意:带下划线的字段处理:
public class TUserInfo {
private long uId;
private String uName;
private String uPass;
}
<id name="uId">
<column name="u_id" sql-type="bigint(20)"/>
<!-- 手动添加主键策略 -->
<generator class="identity"></generator>
</id>
<property name="uName">
<column name="u_name" sql-type="varchar(255)"/>
</property>
<property name="uPass">
<column name="u_pass" sql-type="varchar(255)"/>
</property>
添加hibernate支持后,以后可能还需要多次生成时,
项目显示持久层视图。再次调出生成视图:


或者左下角:

在持久层视图上如选中hibernate02,右键跳出:

这样就可以再生成了。
第五步:创建Hibernate的核心配置文件
<!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/testmybatis01?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">zyh</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping resource="com/zyh/pojo/TUserInfo.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
别忘记注册实体映射文件。
需要在POM中加入资源拷贝
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>/.properties</include>
<include>/.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
第六步:开发DAO测试
在DAO测试前,需要使用到 自己封装的一个HibernateUtil工具类:
public class HibernateUtils {
private static SessionFactory sessionFactory ;
static {
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
sessionFactory=configure.buildSessionFactory();
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
@Test
public void testTUserAdd(){
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
TUserInfo tUserInfo=new TUserInfo();
tUserInfo.setuName("张英海");
tUserInfo.setuPass("魏雪");
session.save(tUserInfo);
transaction.commit();
}
@Test
public void testTuserFind(){
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
TUserInfo tUserInfo = session.get(TUserInfo.class, 151L);
System.out.println(tUserInfo);
transaction.commit();
}
@Test
public void testTuserDelete(){
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
TUserInfo tUserInfo=new TUserInfo();
tUserInfo.setuId(151L);
session.delete(tUserInfo);
transaction.commit();
}
@Test
public void testTuserUpdate(){
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
TUserInfo tUserInfo=new TUserInfo();
tUserInfo.setuName("张颖豪啊啊啊啊啊");
tUserInfo.setuPass("魏雪啊啊啊啊啊");
tUserInfo.setuId(150L);
session.update(tUserInfo);
transaction.commit();
}
网友评论