Mybatis动态标签

大家好,我是IT修真院,一枚正直纯洁善良的如刚入门的Java程序员,今天试着给大家分享一下关于mybaits动态标签的内容


背景介绍

mybatis是什么?说起用JDBC访问数据库,除了需要自己写SQL之外,还要操作Connection, Statment, ResultSet 这些手辅助性质的代码;

访问不同的表,还会写很多雷同的代码,繁琐和枯燥。而用Mybatis,只需要提供关键性的SQL语句,其他的工作,像加载驱动,建立连接,Statement,

JDBC相关的一些动作交给Mybatis,减少重复性的工作,更多的关注在增删改查等操作层面上,把技术细节封装在底层


知识剖析

传统的使用JDBC的方法,有时候需要组合复杂的的SQL语句,还需要去拼接,稍不注意什么空格,引号;都会导致错误。Mybatis的动态SQL功能正是为了解决这种问题,

其通过 if, choose, when, otherwise, trim, where, set, foreach标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率。


编码实战

最大的问题就是不会用,直接看代码吧,小demo


常用


更多讨论

1;mybatis中sql语句的#{}占位符和${}占位符有什么区别?

${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,


2;MyBatis中的标签和where子句的区别?

一个是标签,一个是sql语句,二者可以达到同样的效果,但是前者更灵活


3;set和if 两个都可以判断两个条件是不是空,这两个有啥区别 ?

一个用于update;另一个if更准确的说是where,适用于select


4;Mybatis是如何将sql执行结果封装为目标对象并返回的?

通过设置返回值类型,resulttype/resultmap


5;当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

会查询出null;这个时候可以再开头设置号map;对应字段;类似于起别名


6;数据库字段有下划线?

同上;

7;动态标签和动态sql???

不一个概念;一个是标签;一个是注解的sql语句


8;set的时候我传一个Student进去,都不为null,但是我只想改他的体重字段能不能办到,按照if !=null的话,三个字段都会update吧?

你传进去三个,但是只接受俩.......



9;type和map???

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是

直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。

所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。②当提供的返回类型是resultMap时,

因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。


参考文献

http://blog.csdn.net/jpzhu16/article/details/52810747

https://www.cnblogs.com/dongying/p/4092662.html

https://www.cnblogs.com/zkongbai/p/5336015.html

http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=13495


PPT

视频

欢迎加入java任务体系


多多指教,错误之处!!!

你可能感兴趣的:(Mybatis动态标签)