Hibernate框架第一课

Hibernate的配置
1.导入框架(12个包)

链接: https://pan.baidu.com/s/1615Kgnk54CySKAL9ZSu1ig 密码: pbud  可以下载需要的jar包

hibernate-release-5.2.10.Final/lib/下的文件夹

required文件夹下的所有包(10个)

jpa-metamodel-generator文件夹下的包(1个)

mysql的驱动包(1个)

2.创建Hibernate的主配置文件

默认放在src下

文件名字默认 hibernate.cfg.xml

3.创建实体类

建议: 对象的属性名和需要链接的数据库表中字段名相同

4.创建与实体类对应的配置文件

文件名规范: 实体类名.hb.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.lanou3g">
	<!-- 配置表与实体类的关系
		package: 填包名 填上后 底下再写全类名
				 可以省略包名
		name: 实体类的全类名
		table: 表名
	 -->
	<class name="User" table="user">
		<!-- 
			id: 表示主键
			注意: 没有主键不能使用hibernate
			name: 表示类中的成员变量(属性)名
			column: 表示这个成员变量所代表的
					表中的字段名
		 -->
		<id name="id" column="id">
			<!-- 主键的生成策略 主键自增策略 -->
			<generator class="native"></generator>
		</id>
		<!-- 
			property: 表示主键以外的属性
		 -->
		<property name="username" column="username"></property>
		<property name="password" column="password"></property>
	</class>
</hibernate-mapping>
5.从主配置文件中配置映射文件的路径
<!-- 映射数据库表对应的 映射文件的路径
    注意: 路径从包名开始 并且 中间使用的是反斜杠相隔 
    例如:     -->
<mapping resource="com/lna/User.hbm.xml"/>	
Hibernate的增删改查
hibernate书写的步骤:
ensample: 插入(增)

1.读取主配置文件

Configuration configuration = new Configuration().configure();

默认读取src下的 hibernate.cfg.xml文件

2.创建session工厂

相当于数据库连接池 管理session,通过session对象来操作数据库

SessionFactory sessionFactory = configuration.buildSessionFactory();

3.获取session对象

openSession() 从session工厂中获取一个全新的session对象

Session session = sessionFactory.openSession();

4.开启事务

Transaction transaction = session.beginTransaction();

5.操作数据库

直接向数据库中插入一条数据---表示一个对象

User user = new User();
user.setUsername("lna");
user.setPassword("123");

将对象保存到数据库中

session.save(user);

6.提交事务

transaction.commit();

7.关闭资源

session.close();
sessionFactory.close();
删除方法
@Test
public void fun5() {
	// 1.读取配置主文件
	Configuration configuration = new Configuration().configure();
	// 2.创建session工厂
	SessionFactory sessionFactory = configuration.buildSessionFactory();
	// 3.获取session对象
	Session session = sessionFactory.openSession();
	// 通过session操作数据库
	// 4.开启事务
	Transaction transaction = session.beginTransaction();
	// 5.操作数据库
	// --------------------------------------
	// 根据id删除
	User user = new User();
	user.setId(1);
	session.delete(user);
		
	// --------------------------------------
	// 6.提交事务
	transaction.commit();
	// 7.关闭资源
	session.close();
	sessionFactory.close();
}
修改(更新)方法
@Test
public void fun4() {
	// 1.读取配置主文件
	Configuration configuration = new Configuration().configure();
	// 2.创建session工厂
	SessionFactory sessionFactory = configuration.buildSessionFactory();
	// 3.获取session对象
	Session session = sessionFactory.openSession();
	// 通过session操作数据库
	// 4.开启事务
	Transaction transaction = session.beginTransaction();
	// 5.操作数据库
	// --------------------------------------
	// 修改对象 根据id
	// 先把这个对象查出来
	User user = session.load(User.class, 1);
	// 修改对象的值
	user.setUsername("kuner");
	// 同步到数据库
	session.update(user);
	// --------------------------------------
	// 6.提交事务
	transaction.commit();
	// 关闭资源
	session.close();
	sessionFactory.close();
	// 找不到session对象 报错
	System.out.println(user);		
}
查询方法
// 根据id查询
@Test
public void fun2() {
	// Session.get(查询对象的.class ,id); 方法
	// 1.读取配置主文件
	Configuration configuration = new Configuration().configure();
	// 2.创建session工厂
	SessionFactory sessionFactory = configuration.buildSessionFactory();
	// 3.获取session对象
	Session openSession = sessionFactory.openSession();
	// 通过session操作数据库
	// 4.开启事务
	Transaction transaction = openSession.beginTransaction();
	// 5.操作数据库
	User user = openSession.get(User.class,1);
		
	// 6.提交事务
	transaction.commit();
	// 关闭资源
	openSession.close();
	sessionFactory.close();
	System.out.println(user);
}

注意:  步骤5 可以用load方法替换

// 5.操作数据库
// --------------------------------------
// 使用load方法查询 按id查询
User user = openSession.load(User.class, 1);
// --------------------------------------

load方法和get方法的区别:

get方法 只要该方法执行 就会产生sql语句

并查询数据库返回对象

load方法 懒加载方法进行查询

load方法执行了 不会立即去查询数据库

而是 当你使用该查询结果时 才会去查询数据库

(如果这时候session释放了 会报错)

HQL语句查询

HQL语句查询 面向对象的查询方式

语句中写的东西 都是表示的实体类 或者实体类的属性

@Test
public void fun6() {
	// 1.读取配置主文件
	Configuration configuration = new Configuration().configure();
	// 2.创建session工厂
	SessionFactory sessionFactory = configuration.buildSessionFactory();
	// 3.获取session对象
	Session session = sessionFactory.openSession();
	// 通过session操作数据库
	// 4.开启事务
	Transaction transaction = session.beginTransaction();
	// 5.操作数据库
	// --------------------------------------
	// 查询数据库中的所有User对象
	//Query<User> query = session.createQuery("from com.lanou3g.User");
	// "from User" 表示查询的User对象
	Query<User> query = session.createQuery("from User", User.class);
	// 从查询的结果集中取出数据 并且取出的是个集合
	List<User> list = query.list();
	for (User user : list) {
		System.out.println(user);
	}
	// --------------------------------------
	// 6.提交事务
	transaction.commit();
	// 关闭资源
	session.close();
	sessionFactory.close();
}

也可以使用sql原生语句查询

// 5.操作数据库
// --------------------------------------
// 使用原生sql语句查询
NativeQuery<Object[]> query = session.createNativeQuery("select * from user where username=?");
// 替换占位符
// 参数1 占位符的索引 从1开始
// 参数2 要替换的值
query.setParameter(1, "wanglong");
//获取结果
List<Object[]> list = query.list();
for (Object[] objects : list) {
	for (Object object : objects) {
		System.out.print(object + "  ");
	}
	System.out.println();
}
// --------------------------------------


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值