一.使用步骤
1.导入框架(共12个包)
required文件夹下的所有jar包
jpa-metamodel-generator文件夹下的包
2.创建Hibernate的主配置文件
默认放在src下
文件名字默认 hibernate.cfg.xml
3.创建实体类(User)
建议:字段名和对象的属性名相同
4.创建与实体类对应的配置文件
命名规范:实体类名.hbm.xml
作用:配置实体类与数据库表的映射关系
5.从主配置文件中 配置 映射文件的路径
需要的jar包以及主配置文件:
链接: https://pan.baidu.com/s/1mbeggzhaGn1AiN2k7GS_QQ
二.用JUnit测试包测试方法
JUnit测试可以单独运行一个方法
注意:
方法不能使用private来修饰
只能用public修饰 并且要求无参 不能带有返回值
使用方法: 在方法前加一个 @Test
具体步骤(模板):
@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.操作数据库
// 6.提交事务
transaction.commit();
// 关闭资源
session.close();
sessionFactory.close();
}
方法一:
向数据库中插入一条数据(一条记录) 需要创建一个对象
方法只需写在上面第五步的位置
User user = new User();
user.setUsername("Taylor");
user.setPassword("123");
//将对象保存到数据库中
session.save(user);
方法二. 根据ID(主键)查询
有load和get两个方法
区别:
get方法 : 只要该方法执行就会产生sql语句 并查询数据库 返回对象
load方法 : 懒加载方式进行查询
load方法 : 执行了不会立即去查询数据库 而是当你使用该查询结果时 才会去查询数据库(如果这时候session释放了 就会报错)
get方法:
参数二是数据库中存的id号(主键)
User user = session.get(User.class, 1);
System.out.println(user);
load方法:
User user = session.load(User.class, 1);
System.out.println(user);
方法三. 修改对象(根据id 主键)
User user = session.get(User.class, 1);
//修改对象的值 user.setUsername("anger");
//同步到数据库
session.update(user);
方法四. 删除 (根据id 主键)
User user = new User();
user.setId(1);
session.delete(user);
方法五.
HQL语句查询 是面向对象的查询方式
语句中写东西都是表示实体类 或者 实体类中的属性的
查询数据库中的所有User对象(查询全表)
(一个参数的)
Query<User> query = session.createQuery("from com.commander.User");
List<User> list = query.list();
for (User u : list) {
System.out.println(u);
}
(两个参数的)
Query<User> query = session.createQuery("from User", User.class);
//从查询的结果集中取出数据 并且取出的是个集合
List<User> list = query.list();
for (User u : list) {
System.out.println(u);
}
方法六. 使用原生sql语句查询
NativeQuery<Object[]> query = session.createNativeQuery("select * from user where username=?");
//替换占位符
//参数1 占位符的索引 从1开始
//参数2 要替换的值
query.setParameter(1, "naier");
//获取结果
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.println(object);
}
}