美文网首页
Hibernate逆向工程-Idea

Hibernate逆向工程-Idea

作者: 神豪VS勇士赢 | 来源:发表于2018-08-18 17:10 被阅读25次

    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();
    }
    

    相关文章

      网友评论

          本文标题:Hibernate逆向工程-Idea

          本文链接:https://www.haomeiwen.com/subject/ibmfiftx.html