myBatis真正强大之处就在于sql樱色语句,也是它的魅力所在。相对于它强大的功能,sql映射文件的配置却非常简单。在上一章节中,我们简单地对比了sql映射配置和JDBC代码,发现使用sql映射文件配置可减少50%以上的代码量,并且mybatis专注于sql,对于开发人员来说,也可极大限度地进行sql调优,以保证性能。
Mapepr:映射文件的根元素节点,只有一个属性namespace(命名空间),其作用如下
(1)用于区分不同的mapper,全局唯一
(2)绑定DAO接口,即面向接口编程,当namespace绑定某一接口之后,可以不用写该接口的实现类,myBatis会通过接口的完整限定名查找对应的mapper配置来执行sql语句。因此namespace的命名必须要跟接口同名。
(3)Cache:配置给定命名空间的缓存
(4)Cache—ref:从其他命名空间引用缓存配置
(5)ResultMap:用来描述数据库结果集和对象的对应关系
(6)Sql:可以重用的sql快,也可以被其他语句引用
(7)Insert:映射插入语句
(8)Update:映射更加语句
(9)Delete:映射删除语句
(10)Select:映射查询语句
2.1.2 使用select完成单条件查询
与查询对应的select元素是使用MyBatis时最常用的元素,在上一章,我们实现了对用户表的简单查询,现在升级需求,增加查询条件,那如何实现参数和返回复杂类型的查询?这就需要先详细了解select元素的属性,以实现根据用户名模糊查询来获取用户列表信息为例。
由此看出,Myatis可以节省大量的代码,如果想完成复杂一些的查询或者让配置文件更简洁些,还需进一步了解select元素的属性和Mybatis配置文件的属性。
Id:命名空间中唯一的标识符,可以被用来引用这条语句
paramentrType:表示查询语句传入参数的类型完全限定名或别名。
2.1.3 使用resultMap
resultMap元素用来描述如何将结果集映射到java对象,此处使用resultMap对列表展示所需的必要字段来进行自由映射,特别是当数据库的字段和POJO中的属性名不一致的情况下,比如角色名称,字段名column是roleName,而User对象的属性名则为userRoleName,此时就需要映射。
resultMap元素的属性值和子节点
Id:唯一标识,此id用来select元素result属性的引用。
Type属性:表示该resultMap的映射结果类型
Result子节点:用来标识一些简单属性,其中column属性表示从数据库中查询的字段名
Property则表示查询出来的字段对应的值赋给实体对象的那个属性
最后在测试类中进行相关字段的输出,展示列表(用户编码,用户名称,性别,年龄,电话,用户角色)注意:用户角色不在是角色id,输出的是角色名称。
2.2.1 使用@param注解实现多参入参
在上述示例中实现的是根据用户id修改用户信息操作,超市订单管理系统还有一个需求:修改个人密码,对此需求,也是修改操作,但是可以明确方法的传入参数只有两个:用户id和新密码,若按照之前封装成user对象的方法进行传参,并不是很适合,可以用更灵活的方式处理:直接进行多参数入参即可,代码可读性高,可清晰地看出这个接口方法所需的参数是什么。