Hibernate逆向工程-Idea

2018-08-18  本文已影响25人  神豪VS勇士赢

Hibernate自动模式

使用插件帮助我们生成映射文件和实体类

第一步:配置DB视图
使用Idea链接数据库,类似小海豚或者navicat客户端。


image.png

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

image.png

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


image.png

完成:


image.png

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


image.png

Idea可以和Mysql数据库建立了链接。

第二步:创建项目,导入依赖
Hibernate,MySQL,
导入的依赖和上面入门案例添加的依赖一模一样,按照入门案例添加即可。

第三步:给项目添加Hibernate插件支持
添加hibernate的支持:首先选中项目,鼠标右键项目(需要Maven项目首先已添加Hibernate和DB依赖),选择Add Frameworks Support


image.png

选中Hibernate:


image.png
image.png

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


image.png

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


image.png

点击yes后:


image.png

点击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"

image.png

注意 :
导致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支持后,以后可能还需要多次生成时,
项目显示持久层视图。再次调出生成视图:


image.png image.png

或者左下角:


image.png

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


image.png

这样就可以再生成了。

第五步:创建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();
}
上一篇下一篇

猜你喜欢

热点阅读