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();
}
// --------------------------------------