Mybatis模糊查询及自动映射实现详解
这篇文章主要介绍了Mybatis模糊查询及自动映射实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Mybatis的模糊查询
1.参数中直接加入%%
1
2
3
4
5
6
7
8
9
param.setUsername("%CD%");
param.setPassword("%11%");
selectid,sex,age,username,passwordfrompersonwheretrue
2.bind标签
1
2
3
4
5
6
selectid,sex,age,username,password
fromperson
whereusernameLIKE#{pattern}
3.CONCAT
1
whereusernameLIKEconcat(concat('%',#{username}),'%')
Mybatis的自动映射
0x00:引子
在MyBatis的映射配置文件中,select标签查询配置结果集时使用过resultType属性,当在resultType中定义一个Java包装类时,如果sql语句查询的结果中有列名与该Java包装类中的属性名一致,则该字段就会被映射到该属性上。这里用到的就是MyBatis的自动映射功能,
当sql语句查询出结果时,如果对应输出配置的Java包装类中有相同名称的属性,且拥有set方法,则该结果就会被自动映射。
0x01:原理
MyBatis的自动映射功能是建立在resultMap基础之上的。resultType属性自动映射的原理是,当sql映射输出配置为resultType时,MyBatis会生成一个空的resultMap,然后指定这个resultMap的type为指定的resultType的类型,接着MyBatis检测查询结果集中字段与指定type类型中属性的映射关系,对结果进行自动映射。
在MyBatis全局配置文件中,在setting标签内设置自动映射模式:
0x02:配置
在MyBatis中,自动映射有三种模式,分别是NONE、PARTIAL、FULL。其中NONE表示不启用自动映射,PARTIAL表示只对非嵌套的resultMap进行自动映射,FULL表示对所有的resultMap都进行自动映射。默认的自动映射模式为PARTIAL。
0x03:拓展
在sql查询结果中,如果只有部分字段与输入配置类型中的属性名称不一样,则可以仅在resultMap中指定不一样的字段对应的输出类型的属性,其他的则会直接进行自动映射。
例如以下示例,Java包装类中用户名属性为username,而在t_user表中用户名的字段名为name,这里需要手动映射name字段,其他的属性可以通过默认的自动映射机制来映射:
selectid,name,emailfromt_userwhereid=#{id}
在User类中,包含了手动映射的username属性和自动映射的id、email属性。
如果在某些resultMap中不想使用自动映射,则可以单独在该resultMap中设置autoMapping的属性为false,此时该resultMap仅映射指定的映射字段:
selectid,name,emailfromt_userwhereid=#{id}
当配置了autoMapping属性后,就会忽略全局配置文件中的autoMappingBehavior映射模式。
0x04:关于FULL
关于FULL模式,应该谨慎使用,该模式不管resultMap是嵌套的还是非嵌套的,都会进行自动映射,这可能会造成某些嵌套属性与查询结果的字段名一致而误被自动映射,例如以下示例:
selectR.id,R.title,R.info,U.nameform replyRleftjoint_userUonR.user_id=U.idwhereR.id=#{id}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。