0
点赞
收藏
分享

微信扫一扫

ssh备考-01搭建hibernate框架+hibernate增删改查


01搭建hibernate框架

​​02多表关联关系映射​​

​​03hibernate各种查询方式​​

目录

​​一、准备好jar包文件​​

​​二、新建web项目,导入jar包​​

​​三、写javabean和建立数据库表​​

​​3.1写javabean​​

​​3.2建立数据库和表​​

​​四、编写配置文件​​

​​4.1编写javabean配置文件(一个javabean对应一个)​​

​​4.2编写核心配置文件(一个项目一个)​​

​​五、编写测试代码​​

​​5.1封装工具类​​

​​5.2编写测试代码​​

​​5.3 运行测试​​

​​六、增删改查api:​​

​​6.1 HibernateTest.java(day01一半的重点)​​

​​6.2 两个查询接口Query和Criteria简介(day02接口简介)​​

一、准备好jar包文件

所有文件下载地址:​​直接下载hibernate01.zip​​​       ​​网盘备份下载​​

二、新建web项目,导入jar包

ssh备考-01搭建hibernate框架+hibernate增删改查_hibernate

ssh备考-01搭建hibernate框架+hibernate增删改查_hibernate_02

ctrl+V复制

ssh备考-01搭建hibernate框架+hibernate增删改查_java_03

三、写javabean和建立数据库表

3.1写javabean

package cn.ahpu.domain; /** * 学生的javabean * @author wwwha * */ public class Student { private Long id; private String name; private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

ssh备考-01搭建hibernate框架+hibernate增删改查_hibernate_04

3.2建立数据库和表

(后期会写配置文件了,就不用建立表了,hibernate根据javabean帮你生成)

win+r->cmd进入命令行

mysql -uroot -proot Create database hibernate01; Use hibernate01; CREATE TABLE student ( `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '学生编号(主键)', `name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)', `age` int DEFAULT NULL COMMENT '客户级别', PRIMARY KEY (`id`) );

ssh备考-01搭建hibernate框架+hibernate增删改查_备考ssh_05

 

四、编写配置文件

4.1编写javabean配置文件(一个javabean对应一个)

新建xml,命名为Student.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>
<class name="cn.ahpu.domain.Student" table="student">
<!-- java主键属性与表的主键列名对应 -->
<id name="id" column="id">
<generator class="native"/>
</id>

<!-- 其他非主键属性对应的配置 name为类属性名 column为表列名-->
<property name="name" column="name"/>
<property name="age" column="age"/>
</class>

</hibernate-mapping>


4.2编写核心配置文件(一个项目一个)

src根目录下新建xml,命名为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.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- mysql数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 打印sql语句以及自动更新表 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 映射配置文件,需要引入映射的配置文件 -->
<mapping resource="cn/ahpu/domain/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

 


五、编写测试代码

ssh备考-01搭建hibernate框架+hibernate增删改查_备考ssh_06

5.1封装工具类

新建类HibernateUtils.java

package cn.ahpu.utils;

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

public class HibernateUtils {
public static final Configuration CONFIG;
public static final SessionFactory SESSION;

static {
CONFIG = new Configuration().configure();// 别忘记.configure()加载核心xml配置文件
SESSION = CONFIG.buildSessionFactory();// 构造工厂
}

/**
* 从工厂获取session对象
*/
public static Session getSession() {
return SESSION.openSession();
}
}

5.2编写测试代码

package cn.ahpu.test;

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

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

public class HibernateTest {
@Test
public void testsave(){
Session session = HibernateUtils.getSession();//获取能操控数据库表的session
Transaction tr = session.beginTransaction();//开启事务
try {
//封装数据
Student stu = new Student();
stu.setName("张三");
stu.setAge(18);//id自动递增千万不要自己设置

//一行代码实现保存
session.save(stu);

tr.commit();//提交事务
} catch (Exception e) {
tr.rollback();
System.out.println("访问数据库失败,已经回滚!");
e.printStackTrace();
}finally{
session.close();
}

}
}

 

5.3 运行测试

ssh备考-01搭建hibernate框架+hibernate增删改查_hibernate_07

运行结果

ssh备考-01搭建hibernate框架+hibernate增删改查_查询接口_08

ssh备考-01搭建hibernate框架+hibernate增删改查_java_09

若出现乱码:将my.ini里的utf8全部改为gbk,然后重启mysql服务。因为dos窗口默认gbk,

或者利用chcp 65001将dos窗口的编码改为utf8也行    改回来是chcp 936

ssh备考-01搭建hibernate框架+hibernate增删改查_查询接口_10

 

成功利用hibernate读取了数据库

下面是session的一些具体的增删改查的代码

六、增删改查api:

6.1 HibernateTest.java(day01一半的重点)

package cn.ahpu.test;

import java.util.List;

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

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

public class HibernateTest {

/**
* 添加记录
*/
@Test
public void testSave() {
Session session = HibernateUtils.getSession();// 获取能操控数据库表的session
Transaction tr = session.beginTransaction();// 开启事务
try {

Student stu = new Student();
stu.setName("张三");
stu.setAge(18);//id自增 千万别自己set

// 一行代码实现添加
session.save(stu);

tr.commit();// 提交事务
} catch (Exception e) {
tr.rollback();
System.out.println("访问数据库失败,已经回滚!");
e.printStackTrace();
} finally {
session.close();
}
}


/**
* 测试简单查询 通过主键查询一条记录用get就够了
*/
@Test
public void testGet() {
Session session = HibernateUtils.getSession();// 获取能操控数据库表的session
Transaction tr = session.beginTransaction();// 开启事务 查询不需要啥事务的。。。
Student stu = session.get(Student.class, 1L);
System.out.println(stu.getName()+"||"+stu.getAge());
tr.commit();// 提交事务
session.close();
}

/**
* 测试删除 注意hibernate删除前必然先查询
*/
@Test
public void testDel() {
Session session = HibernateUtils.getSession();// 获取能操控数据库表的session
Transaction tr = session.beginTransaction();// 开启事务
try {
//删除id为1的学生记录
Student stu = session.get(Student.class, 1L);
System.out.println("查询到:"+stu.getName());

// 一行代码实现删除
session.delete(stu);

tr.commit();// 提交事务
} catch (Exception e) {
tr.rollback();
System.out.println("访问数据库失败,已经回滚!");
e.printStackTrace();
} finally {
session.close();
}
}


/**
* 测试更新 先插询到javabean 修改javabean的值 再update更新
*/
@Test
public void testUpdate() {
Session session = HibernateUtils.getSession();// 获取能操控数据库表的session
Transaction tr = session.beginTransaction();// 开启事务
try {
//修改id为2的学生记录
Student stu = session.get(Student.class, 2L);
System.out.println("查询到:"+stu.getName());

//修改内容
stu.setAge(20);

// 一行代码实现更新
session.update(stu);

tr.commit();// 提交事务
} catch (Exception e) {
tr.rollback();
System.out.println("访问数据库失败,已经回滚!");
e.printStackTrace();
} finally {
session.close();
}
}

/**
* 保存或修改
* 有则修改 没有添加
*/
@Test
public void testSaveOrUpdate(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

//添加
/*Student stu = new Student();
stu.setName("李四");//id千万不能自己set
session.saveOrUpdate(stu);*/

//修改
Student stu2 = session.get(Student.class, 3L);//前提已经有3L id的记录 于是可以修改3号学生年龄
stu2.setAge(21);
session.saveOrUpdate(stu2);

tr.commit();
session.close();
}


/**
* 测试查询方法 (get只能简单通过id查询)
* createQuery() -- HQL语句的查询的方式
*
* 后面详细讲解查询
*/
@Test
public void testQuery(){
Session session = HibernateUtils.getSession();
Transaction tr = session.getTransaction();

//创建查询接口 (最简单的一种)
Query query = session.createQuery("from Student");
//查询所有
List<Student> list = query.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}
}

6.2 两个查询接口Query和Criteria简介(day02接口简介)

TestQuerySimple.java

package cn.ahpu.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

/**
* 第二天查询接口的简介 记录一下 最后一天会详细讲解
* query查询接口和Criteria查询接口简介
*/
public class TestQuerySimple {
//TODO query查询接口
/****************************query查询接口***************************/
//1.查询所有记录 query查询接口
@Test
public void TestQuery1(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Query query = session.createQuery("from Student");
List<Student> list = query.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}


//2.条件查询1 query查询接口
@Test
public void TestQuery2(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Query query = session.createQuery("from Student where name=?");
query.setString(0, "张三");//设置第0个?号值为"张三"
List<Student> list = query.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}


//3.条件查询2 query查询接口
@Test
public void TestQuery3(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Query query = session.createQuery("from Student where name=:aa and age=:bb");
query.setString("aa", "张三");//设置:aa值为"张三"
query.setInteger("bb", 100);//设置:bb值为100
List<Student> list = query.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}

//TODO query查询接口
/********************Criteria查询接口(做条件查询非常合适 完全屏蔽了sql语句 各种查询条件都封装了api)****************/
//1.查询所有 Criteria查询接口
@Test
public void testQuery1(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Criteria criteria = session.createCriteria(Student.class);
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}


//2.条件查询1(where name=?) Criteria查询接口
@Test
public void testQuery2(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.eq("name", "张三"));
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}


//2.条件查询2(where name=? and age=?) Criteria查询接口
@Test
public void testQuery3(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.eq("name", "张三"));
criteria.add(Restrictions.eq("age", 100));//注意属性名都加""
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}


//2.条件查询3(其他各种查询条件) Criteria查询接口
@Test
public void testQuery4(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();

Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.eq("age", 100));
criteria.add(Restrictions.like("name", "张%"));
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}

tr.commit();
session.close();
}
}

 

 

举报

相关推荐

0 条评论