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(); } }
相关文章推荐
- 关于数据库的连接,以及对数据增删该查的操作的封装
- Hibernate操作数据库的3个准备和七个步骤,以及在SSH框架中Hibernate的配置。
- hibernate连接数据库,进行操作的步骤
- 数据库连接:操作数据增删改查
- Thinkphp 连接数据库操作以及如何创建数据
- 数据库连接以及增删操作
- Python教程:连接数据库,对数据进行增删改查操作
- python数据存储系列教程——python中redis数据库操作:连接、增删查改、多级路径
- asp.netWeb开发中ztree实现无极限增删改查连接数据同步数据库操作
- java数据库编程--JDBC操作步骤以及数据库连接
- 【SQL】JDBC之与数据库MySQL的连接以及增删改查等操作
- IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库
- 数据库连接:操作数据增删改查
- php 连接数据库 增删改查数据操作
- 数据库的连接以及实现控制台对对数据的增删查改
- Jmeter测试mysql数据库以及连接数据库操作步骤详解
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
- Spring与SpringMVC整合,以及实现数据库数据的增删查改和分页操作
- .NET连接数据库以及基本的增删改查操作教程
- 【SQL】JDBC之与数据库MySQL的连接以及增删改查等操作