建站国外百元服务器,dw网站建设的基本流程,阿里云网站建设部署与发布,省财政厅门户网站三基建设目录1. hibernate框架2. 配置文件实体mapper和hibernate.cfg.xml3. 操作单表增删改查1. hibernate框架
数据持久层的框架
功能定位:专门用来访问数据库,对数据库进行增删改查操作
Hibernate是一个ORM框架 MyBatis MyBatisPlus、JPA#xff08;springdata jpa#xff09;
O…
目录1. hibernate框架2. 配置文件实体mapper和hibernate.cfg.xml3. 操作单表增删改查1. hibernate框架
数据持久层的框架
功能定位:专门用来访问数据库,对数据库进行增删改查操作
Hibernate是一个ORM框架 MyBatis MyBatisPlus、JPAspringdata jpa
ORM:Object Relational Mapping(对象关系映射)特点
1. 上手较难
2. 灵活度低
3. 全自动不写sql语句操作数据库
2. 配置文件实体mapper和hibernate.cfg.xml
?xml version1.0 encodingUTF-8?
!DOCTYPE hibernate-mapping PUBLIC-//Hibernate/Hibernate Mapping DTD 3.0//ENhttp://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
!-- Generated by MyEclipse Hibernate Tools. --
hibernate-mapping!-- 配置stu info 实体类与表的映射关系 --!-- 类的全路径 和 表名 --class namecn.bitqian.entity.StuInfo tablestu_info!-- 主键 --!-- name 为属性 --!-- id 为列 --id namesid columnid!-- 配置主键生成策略 --generator classnative/generator/id!-- 可以配置列的长度 --property namename columnname/propertyproperty namebirthday columnbirth_day/property/class!-- class namecn.bitqian.entity.User tableusers2id nameuserId columnuser_id主键生成策略generator classnative/generator/id实体属性与列的映射关系property nameuserName columnuser_name/propertyproperty nameuserPasswrod columnuser_password/propertyproperty nameuserGender columnuser_gender/propertyproperty nameuserAddress columnuser_address/propertyproperty nameregisterDate columnregister_date/property/class --/hibernate-mapping?xml version1.0 encodingUTF-8?
!DOCTYPE hibernate-configuration PUBLIC-//Hibernate/Hibernate Configuration DTD 3.0//ENhttp://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
!-- Generated by MyEclipse Hibernate Tools. --
hibernate-configurationsession-factory!-- mysql 5.x 版本sql 连接配置 --property nameconnection.urljdbc:mysql://localhost:3306/ssh_study/propertyproperty nameconnection.driver_classcom.mysql.jdbc.Driver/propertyproperty nameconnection.usernameroot/propertyproperty nameconnection.password123456/property!-- 数据库方言 mysql --property namedialectorg.hibernate.dialect.MySQL5InnoDBDialect/property!-- 在命令执行时是否显示sql语句 --property nameshow_sqltrue/propertyproperty nameformat_sqltrue/property!-- 用于更新表的变化 --property namehbm2ddl.autoupdate/property!-- 引用实体类 与 数据库表的 映射文件 --mapping resourcecn/bitqian/entity/stuInfo.hbm.xml/!-- 引用user映射文件 --mapping resourcecn/bitqian/entity/user.hbm.xml//session-factory/hibernate-configuration驱动包注意
Mysql 5drivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mydatabaseMysql 8.0.15drivercom.mysql.cj.jdbc.Driverurljdbc:mysql://localhost:3306/mydatabase?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai需转译成amp;3. 操作单表增删改查
实体类
package cn.bitqian.entity;import java.io.Serializable;
import java.util.Date;public class StuInfo implements Serializable {/*** 唯一 serial id* 用于序列化和返序列化的校验*/private static final long serialVersionUID -3784274218883718429L;private Integer sid;private String name;private Date birthday;// 省略set/get
}SessionFactory
package cn.bitqian.dao;import java.io.Serializable;
import java.util.Date;import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
//import org.hibernate.dialect.MySQL5InnoDBDialect;import cn.bitqian.entity.StuInfo;/*** get / load distinct* single table curd * author echo lovely**/
public class Test1 {public static void main(String[] args) {test1();}/*** stuInfo 表测试*/static void test1() {// 1. 读取配置文件Configuration config new Configuration().configure();// 2. 通过配置文件 获取 sessionFactorySessionFactory sessionFactory config.buildSessionFactory();// 3. 通过session工厂获取sessionSession session sessionFactory.openSession();// 4. 开启事务session.beginTransaction();Object stuObj null;// 数据库操作try {// 新增/*StuInfo stu new StuInfo();stu.setName(jack);stu.setBirthday(new Date());// 返回新增主键值Serializable primaryValue session.save(stu);System.out.println(primaryValue);*/// 修改/*StuInfo stu new StuInfo();stu.setSid(1);stu.setName(rose);stu.setBirthday(new Date());session.update(stu);System.out.println(修改成功...);*/// 删除/*StuInfo stu new StuInfo();stu.setSid(1);session.delete(stu);*/// 单个查询// load 懒加载 和 get的区别// load 查询 延时加载System.out.println(load 查询前);stuObj session.load(StuInfo.class, 1);System.out.println(load 查询后);if (stuObj ! null) {System.out.println(使用对象);StuInfo stu (StuInfo) stuObj;System.out.println(stuObj \n转型后的对象: \n stu);}System.out.println(null stu by load);// load查询不存在的// org.hibernate.ObjectNotFoundException: No row with the given identifier existsSystem.out.println(session.load(StuInfo.class, 2));// get 查询 即时加载/*System.out.println(get 查询前);stuObj session.get(StuInfo.class, 1);System.out.println(get 查询后);*//*** 延时加载和即时加载的区别* 相同点* 1. 都能查询单条数据在Session关闭后不能再查询* 2. 都存在缓存* 不同点* 1. 即时加载不管数据是否存在都会返回结果返回null或者数据。* 而延时load加载查不到数据时报错。* 2. 延时load加载只能在 你使用数据时发送查询请求* */// 提交事务session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();e.printStackTrace();} finally {// 关闭sessionsession.close();// 关闭session工厂sessionFactory.close();}// hibernate中的缓存System.out.println(stuObj);}}