您的位置:首页 > 数据库

hibernate 连接数据库操作步骤以及对数据的增删查改

2018-04-08 20:29 746 查看
一 ,配置文件

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- hibernate配置的根标签 -->
<hibernate-configuration>
<!-- session-factory(会话工厂) 相当于数据库连接池 -->
<session-factory >
<!-- 加载数据库的驱动类 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/a_hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- hibernate方言(数据库特有的语言) mysql方言 limit-->
<!-- 配置使用哪个类 全限定类名 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- show_sql  format_sql  在控制台打印SQL语句以及格式化打印-->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- hbm2ddl.auto 是否自动生成表结构 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 注意映射实体类 全文件名 从包名开始-->
<!--让配置文件知道这个实体类  -->
<mapping resource="com/lanou3g/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

二,
<?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">

<!-- 让实体类与数据库中的表建立起关系 (字段与属性建立起关系) -->
<!-- package 可以添加包名添加后底下可以省略-->
<hibernate-mapping package="com.lanou3g">
<!-- 全类名 -->
<class name="User" table="user">
<!-- 设置主键关联 ,注意表中必须要有主键 -->
<id name="id" column="id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 配置非主键属性 -->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<!-- 注意 :写完映射文件后,要和配置文件关联 -->
</class>
</hibernate-mapping>

//简单的封装获取session的方法

package com.lanou3g;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/*
* 简单封装
*/
public class demo03 {

private static SessionFactory buildSessionFactory;

static {
Configuration configuration = new Configuration();
buildSessionFactory = configuration.buildSessionFactory();
}
public Session getSession() {
return buildSessionFactory.openSession();
}
}

//使用hibernate 连接数据库 对数据进行增删查改

/*
* hibernate 的配置文件的默认的名字
* hibernate.cfg.xml
* 基本配置:数据库的链连接驱动 用户 密码 连接地址
*/
public class demo01 {
@Test
public void fun1() {
/*
* 添加对象到数据库
*/
// 1 加载配置文件
// 直接调用configure() 系统会默认读取 hibernate.cfg.xml 这个文件
Configuration configuration = new Configuration().configure();
// 2.获取SessionFactory对象 相当于获取连接池对象
// SessionFactory 是线程安全的
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 从工厂中获取一个session对象
//openSession 获取的是一个全新的session
Session session = sessionFactory.openSession();
//3 向数据库中插入对象
User user = new User();
user.setUsername("wang");
user.setPassword("123");
//4 使用session对象开启一个事务(返回一个事务对象)
Transaction transaction = session.beginTransaction();

// 包裹的要执行的任务
session.save(user);

//提交事务
transaction.commit();
//5 关闭资源
session.close();
sessionFactory.close();

}

//修改对象
@Test
public void fun2() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session
4000
session = sessionFactory.openSession();
Transaction beginTransaction = session.beginTransaction();
//修改 对象
// 1 获取对象(根据id获取)
User user = session.get(User.class, 11);
//2 修改对象
user.setUsername("zb");
//3 把对象更新一遍
//注意:修改的时候就使用update方法就行了
session.update(user);

beginTransaction.commit();
session.close();
sessionFactory.close();
}

//查
@Test
public void fun3() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction beginTransaction = session.beginTransaction();
//查
User user = session.get(User.class, 11);

beginTransaction.commit();
session.close();
sessionFactory.close();
System.out.println(user);
}

/*get和load方法的区别
* 相同点 : 都能进行对象的查询
* 不同
* load方法的查询方式叫懒加载(延迟加载)
* load方法被执行时,不会和get方法一样立即生成SQL语句和执行
* 而是生成一个代理对象 直接返回
* 只有当你访问代理对象属性时,
* 这个时候才会生成SQL语句,查询数据
* 利用延时加载 提高了hibernate的执行效率
*
*/

//查第二种方法
@Test
public void fun4() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction beginTransaction = session.beginTransaction();
//查看
User user = session.load(User.class, 11);

beginTransaction.commit();
session.close();
sessionFactory.close();
// 这是代理对象才会使用session去查询数据库,这是session已经销毁了,所以报错
System.out.println(user);
}
//删除
@Test
public void fun5() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction beginTransaction = session.beginTransaction();
//删除
//1 先查,再把该对象删除
//          User user = session.get(User.class, 11);
//          session.delete(user);
//2 创建一个对象 只赋值id 然后删除
User user = new User();
user.setId(12);
session.delete(user);

beginTransaction.commit();
session.close();
sessionFactory.close();
}
//思考 使用HQL查询
@Test
public void fun6() {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//查询方法
//返回的是保存查询结果的对象
//Query<User> query = session.createQuery("from com.lanou3g.User");
Query<User> query = session.createQuery("from User", User.class);
//获取到查询结果的集合
List<User> list = query.list();
System.out.println(list);
transaction.commit();
session.close();
}

@Test
public void fun7() {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//直接使用SQL语句查询
NativeQuery query = session.createNativeQuery("select * from user");
List<Object[]> list = query.list();
//list 中保存了三个对象 每一个对象是一个object[]
//三条数据对象了三个object[]
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
transaction.commit();
session.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: