hibernate创建表,实现增删改查
——Javee
hibernate为ssh框架中控制数据库的框架,hibernate可以通过配置文件自动生成相应数据库的SQL代码(跨数据库),我们来看看如何使用它呢?
和前面创建maven项目一样,唯一不同的是,因为hibernate仅仅是连接数据库,不需要前端页面,所以,选择quickstart,其他一样
删掉test文件夹,在pom.xml中引入hibernate和jdbc,代码如下:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.3.Final</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>1.0</version>
</dependency>
创建如下图所示的项目结构和文件:
Clazz.java文件代码如下:
package com.seecen.entity;
/**
* @Author bigpig
* @Date 2019/9/18 15:17
* @Description
*/
public class Clazz {
private Integer clazzId;
private String clazzName;
private String aa;
public String getAa() {
return aa;
}
public void setAa(String aa) {
this.aa = aa;
}
public Integer getClazzId() {
return clazzId;
}
public void setClazzId(Integer clazzId) {
this.clazzId = clazzId;
}
public String getClazzName() {
return clazzName;
}
public void setClazzName(String clazzName) {
this.clazzName = clazzName;
}
}
Teacher.java代码如下:
package com.seecen.entity;
import java.util.Date;
/**
* @Author bigpig
* @Date 2019/9/18 15:16
* @Description
*/
public class Teacher {
private Integer teacherId;
private String teacherName;
private Integer clazzId; // 班级id
private Date birthday;
public Teacher() {
}
public Teacher(Integer teacherId, String teacherName, Integer clazzId, Date birthday) {
this.teacherId = teacherId;
this.teacherName = teacherName;
this.clazzId = clazzId;
this.birthday = birthday;
}
public Integer getTeacherId() {
return teacherId;
}
public void setTeacherId(Integer teacherId) {
this.teacherId = teacherId;
}
public String getTeacherName() {
return teacherName;
}
public void setTeacherName(String teacherName) {
this.teacherName = teacherName;
}
public Integer getClazzId() {
return clazzId;
}
public void setClazzId(Integer clazzId) {
this.clazzId = clazzId;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Teacher{" +
"teacherId=" + teacherId +
", teacherName='" + teacherName + '\'' +
", clazzId=" + clazzId +
", birthday=" + birthday +
'}';
}
}
Clazz.hbm.xml代码如下:
<?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 package="com.seecen.entity">
<class name="Clazz" table="t_clazz">
<id name="clazzId" column="clazz_id"></id>
<property name="clazzName" column="clazz_name"></property>
</class>
</hibernate-mapping>
Teacher.hbm.xml代码如下:
<?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 package="com.seecen.entity">
<class name="Teacher" table="t_teacher">
<id name="teacherId" column="teacher_id"></id>
<property name="teacherName" column="teacher_name"></property>
<property name="clazzId" column="clazz_id"></property>
<property name="birthday" column="birthday"/>
</class>
</hibernate-mapping>
hibernate.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.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">admin</property>
<property name="hibernate.connection.password">admin</property>
<property name="connection.pool_size">1</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="Clazz.hbm.xml"></mapping>
<mapping resource="Teacher.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
App.java中的代码如下:
package com.seecen;
import com.seecen.entity.Teacher;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
import java.util.Date;
import java.util.List;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) {
// 加载hibernate.cfg.xml配置文件
SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
// 创建hibernate的session工厂
// 得到session(连接)
Session session = sessionFactory.openSession();
// 执行CRUD操作
Transaction transaction = session.beginTransaction();
Teacher teacher = new Teacher(1, "admin", 34, new Date());
// session.save(teacher); //增加
// session.delete(teacher); //删除
// teacher.setClazzId(30);
// session.update(teacher); //修改
// Teacher tea = session.get(Teacher.class, 1); //通过主键查找
// System.out.println(tea);
//HQL通过条件查询,特别注意的是查询语句必须是实体类的方法名,不能是表名称,区分大小写
// Query query = session.createQuery("from Teacher tea where tea.teacherName = 'admin'");
// List<Teacher> list = query.list();
// System.out.println(list);
//QBC查询,通过条件查询
// Criteria criteria = session.createCriteria(Teacher.class);
// criteria.add(Restrictions.eq("teacherName", "admin"));
// List<Teacher> list = criteria.list();
// System.out.println(list);
//使用SQL查询
SQLQuery sql=session.createSQLQuery("select * from t_teacher where teacher_name='admin'").addEntity(Teacher.class);
List<Teacher> list=sql.list();
System.out.println(list);
//提交事务
transaction.commit();
// 关闭session
session.close();
}
}
然后通过取消或添加App.java中的注释,然后运行App.java即可实现在数据库中的操作,包括创建表,修改表的结构和增删改查等。