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

    xiaoxiao2022-07-12  144

    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&serverTimezone=UTC&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

    最新回复(0)