2021-09-22

Hibernate实现增改删查

文章目录


前言

Hibernate作为轻量级框架可自动在数据库生成表

一、什么是Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。

二、创建Hibernate步骤

1.创建空Java项目

导入hibernate包

项目结构如下:
2021-09-22

2.在src中创建hibernate.cfg.xml

右击src选择新建,选择其他,输入hibernate,点击带有cfg.xml的文件,点击完成
2021-09-22

3.修改cfg文件

hibenate.cfg.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!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.password">root</property>
        
        <!-- jdbc:mysql://localhost:端口号/数据库名 -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mycsdb</property>
        
        <property name="hibernate.connection.username">root</property>
        
        <!-- MySQL5InnoDB为数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    
    	<property name="hibernate.show_sql">true</property>
    
    
    	<property name="hibernate.hbm2ddl.auto">update</property>
    	
    	<mapping resource="pojo/Authors.hbm.xml"/>
    	<mapping class="pojo.Books"/>
    </session-factory>
</hibernate-configuration>


4.在src中创建pojo包

创建两个java类:

Authors.java类:

package pojo;

import java.util.ArrayList;
import java.util.List;

public class Authors {
	//write
	//pojo中需要写属性,getter和setter toString()都可以自己生成
	private int authorid;
	private String authorname;
	private List<Books> list = new ArrayList();
	
	public Authors() {}
	
	//auto
	public Authors(int authorid, String authorname, List<Books> list) {
		super();
		this.authorid = authorid;
		this.authorname = authorname;
		this.list = list;
	}
	
	public List<Books> getList() {
		return list;
	}
	public void setList(List<Books> list) {
		this.list = list;
	}
	public int getAuthorid() {
		return authorid;
	}
	public void setAuthorid(int authorid) {
		this.authorid = authorid;
	}
	public String getAuthorname() {
		return authorname;
	}
	public void setAuthorname(String authorname) {
		this.authorname = authorname;
	}

	@Override
	public String toString() {
		return "Authors [authorid=" + authorid + ", authorname=" + authorname + ", list=" + list + "]";
	}
	
	
	
}

Books.java类:

package pojo;

public class Books {

	private int bookid;
	private String bookname;
	
	public Books() {};
	
	public Books(int bookid,String boookame){
		super();
		this.bookid = bookid;
		this.bookname = bookname;
	}

	public int getBookid() {
		return bookid;
	}

	public void setBookid(int bookid) {
		this.bookid = bookid;
	}

	public String getBookname() {
		return bookname;
	}

	public void setBookname(String bookname) {
		this.bookname = bookname;
	}

	@Override
	public String toString() {
		return "Books [bookid=" + bookid + ", bookname=" + bookname + "]";
	}
	
	
}

5.HibernateList

在src中创建test包,在包中创建TestList类:

package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import pojo.Authors;
import pojo.Books;
import util.HibernateUtil;

public class TestList {
	@Test
	public void testOne() {
		//1.获取会话Session
		Session session = HibernateUtil.getSessionFactory().openSession();
//		Session session1 = HibernateUtil.getSession();
		//2.开启事务
		Transaction tx = session.beginTransaction();
		//3.添加数据
		Books book1 = new Books();//
		book1.setBookname("白夜行");
		book1.setBookid(1);
		Books book2 = new Books();
		book2.setBookname("解忧杂货店");
		book2.setBookid(2);
		Authors author = new Authors();//一
		author.setAuthorname("东野圭吾");
		//4.关联
		author.getList().add(book1);
		author.getList().add(book2);
		//5.保存数据
		session.save(author);
		session.save(book1);
		session.save(book2);
		//6.事务提交
		tx.commit();
		//7.关闭资源
		session.close();
	}
	
	@Test
	public void testQuery() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Query query = session.createQuery("From pojo.Authors");
		List list = query.list();
		for(Iterator itr = list.iterator();itr.hasNext();) {
			Authors a = (Authors) itr.next();
			//借助pojo中的toString()方法打印内容
			System.out.print(a.toString());
		}
	}
}

6.写工具类

在src中创建util类,创建HibernateUtil工具类:

package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	static SessionFactory sf;
	static {
		sf = new Configuration().configure()
				.buildSessionFactory();
	}
	
	public static SessionFactory getSessionFactory() {
		return sf;
	}
	
	public static Session getSession() {
		return sf.openSession();
	}
}

7.生成hbm文件并且配置

将Authors和Books合并:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2021-9-22 21:47:19 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="pojo.Authors" table="AUTHORS">
        <id name="authorid" type="int">
            <column name="AUTHORID" />
            <generator class="assigned" />
        </id>
        <property name="authorname" type="java.lang.String">
            <column name="AUTHORNAME" />
        </property>
        
        
        <list name="list" cascade="all">
            <key column="AUTHORID"/>
            
               
          
            <list-index column="BOOKID"></list-index>
            
            <one-to-many class="pojo.Books" />
        </list>
    </class>
    
    <class name ="pojo.Books" table= "BOOKS">
    	<<id name="bookid" type ="int">
    		<column name ="BOOKID"/>
    		<generator class="assigned"/>
    	</id>
    <property name="bookname" type="java.lang.String">
    	<column name="BOOKNAME"></column>
    </property>
    
    
    </class>
    
    
</hibernate-mapping>

测试

打开Navicat查看表:
2021-09-22

总结

以上是Hibernate自动向数据库插入数据,如有错误请改正。

上一篇:用hibernate+ajax做页面的添加


下一篇:Hibernate的介绍及入门小案例