大家好,我是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任务体系
多多指教,错误之处!!!