hibernate配置

32 篇文章 1 订阅
3 篇文章 0 订阅

hibernate

一、Hibernate概述

Hibernate是使用在三层架构中的dao层的一个框架,与JDBC和myBatis是类似的技术,它也是基于ORM设计的,其实就是对JDBC的封装,封装之后的东西使用起来更加方便快捷。
Hibernate是一个全自动的ORM框架,而myBatis是一个半自动的ORM框架,全自动代表数据表,SQL语句会自动生成,弊端在于不够灵活,效率低,而mybatis可以自己写sql语句非常灵活。国内更加青睐于myBatis。半自动表示,数据查出来之后可以自动封装到JavaBean(实体类/pojo/entity)中。
JavaBean:类中的属性全部私有,必须有一个无参的构造方法,必须有get和set方法
我们需要通过反射调用无参构造创建对象并且调用set方法给对象赋值,完成数据的自动注入。

二、Hibernate快速入门

2.1、导包

链接:https://pan.baidu.com/s/1yKMifajwGk5TgFrBP3Bi5g
提取码:he6v
复制这段内容后打开百度网盘手机App,操作更方便哦

2.2、创建实体类

创建一个User类

package com.zy.pojo;

public class User {
	
	private Integer u_id;        //用户id
	private String  u_name;      //用户名
	private String  u_password;  //用户密码
	
	//set和get方法
	public Integer getU_id() {
		return u_id;
	}
	public void setU_id(Integer u_id) {
		this.u_id = u_id;
	}
	public String getU_name() {
		return u_name;
	}
	public void setU_name(String u_name) {
		this.u_name = u_name;
	}
	public String getU_password() {
		return u_password;
	}
	public void setU_password(String u_password) {
		this.u_password = u_password;
	}
	//有参数的构造方法
	public User(Integer u_id, String u_name, String u_password) {
		super();
		this.u_id = u_id;
		this.u_name = u_name;
		this.u_password = u_password;
	}
	
	public User(Integer u_id, String u_name) {
		super();
		this.u_id = u_id;
		this.u_name = u_name;
	}
	//无参构造
	public User() {
		super();
	}
	//重写toString方法
	@Override
	public String toString() {
		return "User [u_id=" + u_id + ", u_name=" + u_name + ", u_password=" + u_password + "]";
	}
	
	

}

2.3、创建实体类的映射文件

<?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: 实体类全路径
	table:表名
	 -->
	<class name="com.zy.pojo.User" table="user">
		<!-- 配置主键映射
		使用id标签
		column:表中的字段名,可以不写默认与name一样
		name:实体类中的属性名
		type:字段的数据类型,可以不写,自动与实体类 
		 -->
		 <id name="u_id">
		 <!-- 设置主键生成策略
		 increment:主键按数值顺序递增,用在mysql上
		 sequence:采用数据提供的sequence机制生成主键,如oracle中的sequence
		 native:有hibernate根据使用的数据库自动判断
		  -->
		  <generator class="native"></generator>
		 </id>
		 <!-- 配置其它字段 -->
		 <property name="u_name"/>
		 <property name="u_password"/>
	</class>
</hibernate-mapping>

注意:建议写在实体类包下,名字为实体类名.hbm.xml
约束到资料中的dtd文件中找

2.4、创建核心配置文件

<?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:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
		<!-- 第二部分hibernate部分 -->
			<!-- 是否自动生成表
			update:无表生成表,有表修改表
			 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 设置是否打印sql -->
		<property name="hibernate.show_sql">true</property>
		<!-- 设置是否格式化 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 实体类文件映射部分 -->
		<mapping resource="com/zy/pojo/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

要求:创建在src下,名字是hibernate.cfg.xml

测试

三、CRUD(增删改查)

package com.zy.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zy.pojo.User;
public class UserTest {

private static SessionFactory sessionFactory;
private Session session;
static{
	sessionFactory = new Configuration().configure().buildSessionFactory();
}
//在Test执行前执行
@Before
public void openShiwu(){
	session = sessionFactory.openSession();
}
//在Test执行后执行
@After
public void closeShiwu(){
	if(session!=null){
		session.close();
	}
}

//添加用户
@Test
public void addUser(){
	//1.开启事务
	Transaction transaction = session.beginTransaction();
	//2.添加用户先创建一个对象
	User user = new User();
	//设置名字
	user.setU_name("grysdhh");
	//设置密码
	user.setU_password("123");
	//3.添加到数据库
	session.save(user);
	//4.提交事务
	transaction.commit();
}

//修改用户
@Test
public void updateUser(){
	//1.开启事务
	Transaction beginTransaction = session.beginTransaction();
	//2.获取要修改的对象
	User user = session.get(User.class, 1);
	//3.修改对象
	user.setU_password("456");
	session.update(user);
	//4.提交事务
	beginTransaction.commit();
}
//删除用户
@Test
public void deleteUser(){
	//1.开启事务
	Transaction beginTransaction = session.beginTransaction();
	//2.获取要删除的对象
	User user = session.get(User.class, 2);
	//3.删除对象
	session.delete(user);
	//4.提交事务
	beginTransaction.commit();
}
//查询所有
@Test
public void getAll(){
	String hql = "FROM User";
	//查询
	Query query = session.createQuery(hql);
	//获取数据
	List<User> users = query.list();
	//打印
	for (User user : users) {
		System.out.println(user);
	}
}

//条件查询
@Test
public void getUserById(){
	String sql = "FROM User WHERE u_id=?";
	//查询
	Query query = session.createQuery(sql);
	//占位符赋值
	query.setParameter(0, 1);
	List<User> user = query.list();
	for (User user2 : user) {
		System.out.println(user2);
	}
}

//模糊查询
@Test
public void getUserByTiaojian(){
	String sql = "FROM User WHERE u_name LIKE ?";
	//查询
	Query query = session.createQuery(sql);
	//赋值
	query.setParameter(0, "%jf%");
	//获取数据
	List<User> user = query.list();
	for (User user2 : user) {
		System.out.println(user2);
	}
}
//分页查询
@Test
public void getFenYe(){
	String sql = "FROM User";
	//查询
	Query query = session.createQuery(sql);
	//设置分页的起始位置
	query.setFirstResult(0);
	//设置每页的数据条数
	query.setMaxResults(3);
	//获取数据
	List<User> user = query.list();
	for (User user2 : user) {
		System.out.println(user2);
	}
}
//排序查询
@Test
public void getPaixu(){
	String sql = "FROM User ORDER BY u_id DESC";
	//查询
	Query query = session.createQuery(sql);
	//获取数据
	List<User> user = query.list();
	for (User user2 : user) {
		System.out.println(user2);
	}
}
//投影查询,就是只查询部分字段信息,在实体类中要有对应的构造方法
@Test
public void getTouYing(){
	String sql = "SELECT new User(u_id,u_name) FROM User";
	//查询
	Query query = session.createQuery(sql);
	//获取数据
	List<User> user = query.list();
	for (User user2 : user) {
		System.out.println(user2);
	}
}
//自定义sql语句
	@Test
	public void sqlQuery() {
		//定义sql语句
		String sql = "SELECT * FROM tb_user";
		//使用方法查询
		SQLQuery sqlQuery = session.createSQLQuery(sql);
		sqlQuery.addEntity(User.class);
		//转换成集合
		List<User> users = sqlQuery.list();
		//打印
		for (User user : users) {
			System.out.println(user);
		}
		
	}

}

`

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下大名

您的鼓励就是我前进的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值