Hibernate+Mysql+Idea 半diy半自动生成

本文介绍了使用Hibernate、Mysql和Idea半diy半自动生成实体类和配置文件的过程,包括环境配置、取消注释代码输入账号密码等步骤。运行自动生成的main函数时遇到乱码问题,添加tostring()方法后解决。还提及了数据库的增删改查操作,简单操作后引入了高阶的HQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate+Mysql+Idea 半diy半自动生成

前言

不得不说IDEA+hibernate十分智能也很脑残,它可以自动连接数据库后生成实体类和配置文件,甚至可以生成tostring的测试类。但是他有的要改的地方没有标注,最后还是得看网上的demo进行调试。

环境配置

HIbernate在idea里面有:新建project,然后新建moduel或者直接新建java都可以,然后在右边勾一下要用的,(勾多不要紧,勾少了又得加)

在这里插入图片描述
在这里插入图片描述
Hibernate勾的时候记得顺便勾下面的这两个。

点下这两个…配置下连接自己的数据库和包路径。注意driver是可以选的,我的mysql驱动用的不是默认的,而是mysql for 5.1。包路径默认没有,左上角点一下自己建。然后选一下你要用的shema就可以完成创建了。
***这之后我自己添加了JDBC的jar包,不知道为什么网上其他博客都没加也没报错。(下个驱动解压后把jar包拖到lib目录)

正式开始

把这块被注释的Ctrl + /取消注释然后按格式输入自己数据库的账号密码。这个hibernate.hbm2ddl.auto其实有4个模式,但是最常用的只有update,所以想了解更多可以谷歌一下。
在这里插入图片描述
贴一下我的代码

<?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>
        <property name="connection.url">jdbc:mysql://localhost:3306/clouddb01?useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=UTF-8</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<!--        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>-->
         <property name="connection.username">root</property>
         <property name="connection.password">root</property>

        <!-- DB schema will be updated if needed -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="com.example.Dept"/>
        <mapping resource="com/example/Dept.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

然后就大功告成了(才怪)
运行一下自动生成的main函数
在这里插入图片描述
很奇怪,都是乱码。看了下实体类发现,他写了getter setter没写tostring()
很像吐槽一下,为什么不给他来个lombok呢。
不过不得不说这自动生成的挺厉害的。
于是乎跑到这个类这里alt + insert 选择testring()
再运行一下main函数

成功。

增删改查

增:

import com.example.Dept;
import org.hibernate.*;
import org.hibernate.query.Query;
import org.hibernate.cfg.Configuration;

import javax.persistence.metamodel.EntityType;


public class main_add {
    private static final SessionFactory ourSessionFactory;
    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {
            Transaction transaction = session.beginTransaction();
            Dept dept=new Dept();
            dept.setDbSource("clodudb02");
            dept.setDeptno(200);
            dept.setDname("zzz");
            session.save(dept);

            transaction.commit();

        } finally {
            session.close();
            ourSessionFactory.close();
        }
    }
}

在这里插入图片描述

改:

import com.example.Dept;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;



public class main_update {
    private static final SessionFactory ourSessionFactory;
    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {

            Transaction transaction = session.beginTransaction();
            Dept dept=new Dept();
            dept.setDbSource("clouddb03");
            dept.setDeptno(200);
            dept.setDname("aaa");
            session.update(dept);

            transaction.commit();

        } finally {
            session.close();
            ourSessionFactory.close();
        }
    }
}

在这里插入图片描述

import com.example.Dept;
import org.hibernate.*;
import org.hibernate.query.Query;
import org.hibernate.cfg.Configuration;

import javax.persistence.metamodel.EntityType;


public class main_delete {
    private static final SessionFactory ourSessionFactory;
    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {

            Transaction transaction = session.beginTransaction();
            Dept dept=new Dept();
            dept.setDbSource("clodudb02");
            dept.setDeptno(200);
            session.delete(dept);
            transaction.commit();

        } finally {
            session.close();
            ourSessionFactory.close();
        }
    }
}

在这里插入图片描述

先放一个普通的(巨坑:session.get()函数第二个变量必须用long类型)

import com.example.Dept;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;


public class main_get {
    private static final SessionFactory ourSessionFactory;

    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();

            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {

            Transaction transaction = session.beginTransaction();
            Dept dept=new Dept();
            dept=(Dept)session.get(Dept.class,(long)1);
            System.out.println(dept);
            transaction.commit();

        } finally {
            session.close();
            ourSessionFactory.close();
        }
    }
}

在这里插入图片描述
在做完以上查找的时候,我突然意识到,这些简单增删改查根本满足不了平常的mysql操作啊,简直就是helloworld功能,于是到查的时候我谷歌了一下找到了更高阶的语句:HQL。这里放一个查找的简单示例。

import com.example.Dept;
import org.hibernate.*;
import org.hibernate.query.Query;
import org.hibernate.cfg.Configuration;
import java.util.List;

public class main_search {
    private static final SessionFactory ourSessionFactory;

    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();

            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {
            Transaction transaction = session.beginTransaction();
            //没有条件的hql,也就是查询全部记录。
            String hql = "from Dept where deptno = 2";
            Query hqlQuery = session.createQuery(hql);
            List<Dept> list = hqlQuery.list();
            for(Dept dept : list){
                System.out.println(dept.toString());
            }
        } finally {
            session.close();
            ourSessionFactory.close();
        }
    }
}

在这里插入图片描述
这是第一次做博客希望不是最后一次。
Github:https://github.com/MingZ3234/HiberanteDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值