hibernate mybatis_细数从mybatis跳槽hibernate的坑

本文讲述了作者在工作中遇到的Hibernate框架的两大难题:对象懒加载和中文乱码问题。在使用Hibernate时,由于对象懒加载特性,未正确处理会导致NullPointerException。此外,@Column注解可能导致String类型的中文字段在数据库中存储为乱码,解决方案是明确指定列定义并重建表。通过分享这些问题,作者希望对其他开发者有所帮助。
摘要由CSDN通过智能技术生成

561055efd80178c5aa1bc6e57b276092.gif

7a5c812d97d29905f7a46b2c55db79e1.png

    什么,还在用hibernate?mybatis它不香吗?很多跳槽的java程序员遇到新的公司在使用hibernate,都会强烈吐槽这一个点,包括我以及我身边的同事,这里有其实有必要解释一下,很多公司的代码都是好几年前的代码框架,如果改动,成本实在太大,还有很多不必要的麻烦,甚至于当前公司的大佬早已习惯hibernate的映射关系,所以还是默默的熟悉hibernate吧,打工人。

4922e2fe43bfb2c23d35b9344a61438e.gif

    而对于不熟悉hibernate的人在日常开发中,就会异常崩溃,今天就来细数一下我在工作中遇到的坑吧~因为早些年也大致了解过hibernate,但是没有深入,之后一直用的mybatis,直到最近跳槽,新公司用的hibernate框架,但是我发出了文章开头提到的感慨。我遇到的第一个坑,那就是对象懒加载的坑~

a5cc462711582855369816d64fd6a6e7.png

懒加载

    由于我用的电脑是公司上一个同学留下的,我看到他的idae上有一个beautiful插件(代码开发过程中自动生成对象的set方法),当时我就纳闷了,这个插件不常用啊,于是我就卸载了。之后我看到一个方法叫做buildXxxx(),大致内容就是把对象的重新赋值一遍,对象属性再去数据库查询一边再赋值,用惯mybatis的人会觉得多此一举,但是hibernate不一样,由此引发对懒加载的思考。

    当我们查询一个对象的时候,在默认情况下,返回的只是该对象的代理对象,当用户去使用该对象的属性时,才会向数据库再一次发出查询语句。

    例如,有一个对象是Employee,还有一个对象是Department。显然,对于Employee相对Department来说,是多对一的关系;而对于Department相对Employee来说,是一对多的关系。当我们查询Employee对象的时候,如果希望通过employee对象的属性department查询到所对应的Department,那么是会抛出异常的。这是因为懒加载的存在,在session关闭之后,hibernate又向数据库发出一次请求,结果就抛出异常了。

    一次次的NullException简直让我崩溃,明明断点查看部位null啊,显示一个handle,之后才发现,原来buildXxx就是为了避免以上提出的问题,到这时我才知道为什么要装beautiful插件,于是我尴尬的装回了它,嗯,真香~

a5cc462711582855369816d64fd6a6e7.png

@Column导致中文乱码

        上周开发新接口时,前端反应乱码,于是我就想,代码还是那些代码,为啥就乱码了呢,我一度怀疑是前端的问题,于是我就用postman试了一下,oh,结果不出意外,我的问题,于是我仔细想了想,问题肯定出在hibernate自动建表这里,于是我看到了我的entity,大致一看,没有什么问题啊,于是我检查了一下,这才发现了问题。

        @Column注解下的String类型对应数据库类型默认是varchar(255), 大家知道问题出在哪儿了吧,解决办法便是指定一下字段对应,然后删除表(这里一定要删除表,hibernate不会更新已有字段属性!)

 @Column(columnDefinition = "nvarchar(255)")

3b42f6bc6aec16d4dcd0c0161a16b05b.png

    今天就说到这了,希望对大家有帮助~

end

人生嘛,随便聊聊

影视嘛,直接回复片名,获取免费观看地址

如地址失效或搜索不到,请添加“留仙一码农”

推荐使用小程序(公众号主页点击哈克精选打开)观看~

6a0b5e28c4c3b09e6a5cfd47858d9d0e.png

推荐阅读

• 一个女人,两个男人,同房间,我都不舍得快进

• 2020-11-13,星期五,勇气

• 穿着比基尼,为何满身泥泞?

• 2020-11-12,星期四,生活

如有收获,点个在看,诚挚感谢 44ed04785383f078eb842971f9eb6dda.png明天见(。・ω・。)ノ♡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值