mybatis 字段名自动转小写的实现

这篇文章主要介绍了mybatis 字段名自动转小写的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、什么是Mybatis?

MyBatis是一个优秀的持久层框架,是一个半ORM(对象关系映射)框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注sql本身,而不需要花费精力去处理例如加载驱动、创建连接、创建statement等繁杂的过程。Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2、Mybatis的优点与缺点?

优点:

基于sql语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,sql写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签支持编写动态sql语句,并可重用。

与JDBC相比,减少了JDBC大量冗余的代码,不需要手动开关连接

很好的与各种数据库兼容

能够与Spring很好的集成

提供映射标签支持对象与数据库的ORM字段关系映射;提供对象关系映射标签支持对象关系组件维护。

缺点:

sql语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写sql语句的功底有一定要求。

sql语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

3、#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?(占位符)号,调用PreparedStatement的set方法来赋值;

Mybatis在处理${}时,就是把${}替换成变量的值。

使用#{}可以有效的防止sql注入,提高系统安全性。

4、Mybatis和Hibernate有什么区别?

Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写sql语句。

Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。

Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。

5、 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

第1种: 是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。

第2种: 使用标签,逐一定义数据库列名和对象属性名之间的映射关系。

6、如何获取自动生成的(主)键值?

insert 方法总是返回一个int值 ,这个值代表的是插入的行数。

如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。

insert into names (name) values (#{name}) name name = new name(); name.setname(“fred”); ​ int rows = mapper.insertname(name); // 完成后,id已经被设置到对象中 system.out.println(“rows inserted = ” + rows); system.out.println(“generated key value = ” + name.getid());

7、Mybatis动态sql有什么用?执行原理?有哪些动态sql

Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql功能。 Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 其执行原理为,从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql功能

例如:

select * from user id=#{id}

8、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;

原因就是namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。

但是,在以前的Mybatis版本的namespace是可选的,不过新版本的namespace已经是必须的了。

9、一对一、一对多的关联查询

select * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#{id} select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}

9、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。

它的原理是,使用cglib创建目标对象的代理对象,当调用目标方法时,进入拦截方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法调用。这就是延迟加载的基本原理。

当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

10、Mybatis的一级、二级缓存?

1)一级缓存: Mybatis的一级缓存是指sqlSession,一级缓存的作用域是sqlSession, Mabits认开启一级缓存。在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库查询的数据写到缓存(内存),第二次会从缓存中获取数据将上一篇:通过实例解析spring bean之间的关系下一篇:Java实现获取某年某月第一天/最后一天的方法

热门搜索

字段名 

excel小写字母转大写 

字段别名 

字段名称 

改字段名 

相关文章

mybatis 字段名自动转小写的实现

2021-09-10阅读(8716)评论(0)推荐()

这篇文章主要介绍了mybatis 字段名自动转小写的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...

Mybatis动态调用表名和字段名的解决方法

2021-10-11阅读(6872)评论(0)推荐()

今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,这种情况下,就需要构建sql来动态传入表名、字段名了,下面给大家介绍myba...

Mybatis plus通用字段自动填充的示例

2021-10-06阅读(10123)评论(0)推荐()

这篇文章主要介绍了Mybatis plus通用字段自动填充的示例,帮助大家更好的理解和使用Mybatis,感兴趣的朋友可以了解下

js实现用户输入的小写字母自动转大写字母的方法

2021-11-16阅读(3107)评论(0)推荐()

下面小编就为大家带来一篇js实现用户输入的小写字母自动转大写字母的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

解决mybatis用Map返回的字段全变大写的问题

2021-10-06阅读(8926)评论(0)推荐()

这篇文章主要介绍了解决mybatis用Map返回的字段全变大写的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

ASP字符串大写转换成小写 ASP小写转换成大写 ucase lcase

2021-09-14阅读(10551)评论(0)推荐()

字符串大写字面转换成小写字面或者小写字面转换成大写字面,ASP(特指VBS)里自带了两个函数

MyBatis获取插入记录的自增长字段值(ID)

2021-10-08阅读(3268)评论(0)推荐()

本文分步骤给大家介绍了MyBatis获取插入记录的自增长字段值的方法,在文中给大家提到了mybatis返回插入数据的自增长id,需要的朋友可以参考下

取消

有人回复邮件通知

提交评论

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...