Hibernate初探之单表操作(3)

本文详细介绍了Hibernate框架下的单表操作技巧,包括主键生成策略、基本与对象类型的处理方式、组件属性配置方法及常见的CRUD操作实现。通过具体实例展示了如何在Hibernate中有效地管理和操作数据库。

1.[Hibernate单表操作] 单一主键

单一主键由某一列充当主键,当然也有复合主键,这里介绍单一主键常用的两种生成策略

  • assigned 由java应用程序负责生成(手工赋值)
  • native 由底层数据库自动生成标示符,如果是mysql就是increment,如果是oracle就是sequence等等
    我们用上节的代码来测试添加一个学生,先查看配置文件中的主键设置是assigned,手工赋值,如果我们生成一个学生对象,但是没有对其id赋值,我们添加试试,会发现添加还是成功了,是0,这是为什么呢?因为我们知道学生类的属性id我们定义的是整型,默认就是0。
    下面我们来测试native,还是不指定主键的值,这时执行后查看表结构,表结构主键显示是自动增长的类型,添加成功,id为1。注意第二次添加时将配置create改成update

2.[Hibernate单表操作] 基本类型

这里写图片描述
这里着重说一下Date类型
这里写图片描述
Hibernate的三种时间类型:日期date ,时间time ,时间戳(年月日时分秒)timestamp

3.[Hibernate单表操作] 对象类型

这里写图片描述
CLOB类型:大文本类型;
BLOB:大的二进制文件类型(如音频、视频、图片等)
MySQL不支持标准SQL的CLOB类型,在MySQL智能光,用TEXT,MEDIUMTEXT以及LONGTEXT类型表示长度唱过255字节的长文本数据。
这里我们来举个例子,比如给学生类插入一张张票属性,作为学生的大头贴传递进去,保存然后再复制出来。因为学生类有了变化,所以记得hibernate的配置文件也要有适应的变化或者重新生成一下Students.hbm.xml文件。

public void testSaveStudents() {
        /**
        //生成一个学生对象
        Configuration config=new Configuration().configure();//创建配置对象
        config.addClass(Students.class);
        ServiceRegistry serviceRegistry =new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
        //创建服务注册对象
        sessionFactory =config.buildSessionFactory(serviceRegistry);
        //创建会话工厂对象
        session =sessionFactory.openSession();//打开会话。
        transaction =session.beginTransaction();//打开事务 
        Students s=new Students(2,"张三丰","男",new Date(),"武当山");
        //先获得照片文件
        File f=new File("C:\\Users\\Administrator\\Desktop\\1.jpg");
        try {
            //获得文件的输入流
            FileInputStream fis=new FileInputStream(f);
            //创建一个Blob对象//最后一个参数是可用长度可以用输入流的available来写
            Blob b=Hibernate.getLobCreator(session).createBlob(fis, fis.available());
            s.setImage(b);

            session.save(s);//保存对象进数据库
            transaction.commit();//提交事务
            */
            //要获取这个存取的图片,首先我们要加载这个学生对象
        try {
            Configuration config=new Configuration().configure();//创建配置对象
            config.addClass(Students.class);
            ServiceRegistry serviceRegistry =new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
            //创建服务注册对象
            sessionFactory =config.buildSessionFactory(serviceRegistry);
            //创建会话工厂对象
            session =sessionFactory.openSession();//打开会话。
            Students s1=session.get(Students.class,1);//进行强制转换
            //获得Blob对象
            Blob b1=s1.getImage();
            //获得照片的输入流
            InputStream is=b1.getBinaryStream();
            File f2=new File("C:\\Users\\Administrator\\Desktop\\2.jpg");
            FileOutputStream fos1=new FileOutputStream(f2);
            //创建缓冲区
            byte[] buff=new byte[is.available()];
            is.read(buff);
            fos1.write(buff);
            is.close();
            fos1.close();

            //session.close();//关闭会话
            //sessionFactory.close();//关闭会话工厂
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

4.[Hibernate单表操作] 组件属性

这里写图片描述
某个类的属性是一个用户自定义的类的对象时,会这样配置,注意类要符合javabeans规范

5. [Hibernate单表操作] 单表操作CRUD实例

这里写图片描述
单个记录查询get与load的区别
1.在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。
2.load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
3.查询数据库中不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException

单表的增删改查CRUD
1.保存对象,save
2.修改对象,update
3.删除对象,delete
4.查询单个记录,get/load

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值