1.导入框架(共12个包)
required文件夹下 所有的包
+ jpa-metamodel-generator文件夹下的包
+ mysql的驱动包
2.创建Hibernate的主配置文件
默认放到src下
文件名字 默认 hibernate.cfg.xml
3.创建实体类(User)
建议:数据库字段名和对象的属性名 相同
4.创建与实体类 对应的 配置文件
命名规范:实体类名.bm.xml
作用:配置实体类 与 数据库 表的 映射关系
5.从主配置文件中 配置 映射文件的路径
使用junit测试
可以单独运行一个方法
只能public 无参 无反 修饰
@Test
public void fun1() {
// 1.读取主配置文件
// 默认读取src下的 hibernate.cfg.xml文件
Configuration configuration = new Configuration().configure();
// 2.创建session工厂(管理一堆session)
// 相当于数据库连接池
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.获取session工厂中 获取session对象
// 获取一个全新的session对象
Session session = sessionFactory.openSession();
// 通过session操作数据库
// 4.开启事务
Transaction transaction = session.beginTransaction();
// 5.向数据库插入一条数据(一条记录)
User user = new User();
user.setUsername("xiaofeng");
user.setPassword("111");
// 将对象写到数据库中
session.save(user);
// 6.提交事务
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
}
load方法与get方法的区别
get方法 只要改方法执行 就会产生sql语句
并查询数据库返回对象
load方法 懒加载方式进行查询
load方法 执行了 不会立即去查询数据库
而是 当你使用该查询结果时
才会去查询数据库
(如果这时候session释放了 会报错)
根据id查询
@Test
public void fun2() {
// Session.get(查询对象的.class,id);
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 1);
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
System.out.println(user);
}
@Test
public void fun3() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// ---------------------
// 使用load方法查询 按id查询
User user = session.load(User.class, 1);
// ---------------------
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
// 找不到session对象了 报错
System.out.println(user);
}
修改对象 根据id
@Test
public void fun4() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// ---------------------
// 修改对象 根据id
// 根据这个对象 查询出来
User user = session.get(User.class, 1);
// 修改对象的值
user.setUsername("xiao");
// 同步到数据库
session.update(user);
// ---------------------
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
// 找不到session对象了 报错
System.out.println(user);
}
根据id 删除
@Test
public void fun5() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// ---------------------
// 根据id 删除
User user = new User();
user.setId(1);
session.delete(user);
// ---------------------
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
// 找不到session对象了 报错
System.out.println(user);
}
HQL语句查询 面向对象的查询方式
语句中写对象 都不是是实体类
或实体类中的属性
@Test
public void fun6() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// ---------------------
// 查询数据中的所有User对象
// Query<User> query = session.createQuery("from com.lanou3g.User");
Query<User> query = session. createQuery("from User", User.class);
// 从查询的结果集去除数据 并且取出的是个集合
List<User> list = query.list();
for (User u : list) {
System.out.println(u);
}
// ---------------------
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
}
使用原生sql语句查询
@Test
public void fun7() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// ---------------------
// 使用原生sql语句查询
NativeQuery<Object[]> query = session.createNativeQuery("select * from user where username = ?");
// 替换占位符
// 参数1 占位符的索引 从1开始
// 参数2 要替换的值
query.setParameter(1, "xiaoyu");
// 获取结果
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.print(object + " ");
}
System.out.println();
}
// ---------------------
transaction.commit();
// 7.关闭资源
session.close();
sessionFactory.close();
}