一般我们使用resulttype指定对应xml方法中的返回值时直接指定实体类的全类名即可,但是如果数据库中的字段与实体类的属性不同时我们就可以使用resultmap来指定字段名和属性的对应关系,如下
property代表实体类的属性值,column代表数据库的字段.这样即使数据库的字段名与属性名不一致,也可以建立起映射关系,只是,这样在执行时会多一些解析的过程,效率会略低.
动态sql的拼接
注意: MySQL的sql语句内的字段在Windows系统下是不区分大小写的,但是有关Java的属性要严格区分大小写.
mybatis的多表查询
表与表之间分为一对一,一对多,多对一和多对多
mybatis可以将多对一分成多个一对一,可以将多对多分为多个一对多.
一对一:
以user和account为例,一个用户可以有多个账号,多个账号可以对应一个用户,所以账号和用户之间是多对一的关系,但是单看一个账号只属于一个用户,因此可以看成是多个一对一,账号是从表内容,用户是主表内容,所以账号实体类里面可以封装一个用户类,关于配置文件如下
association关键字的作用就是将用户封装到账号内,这样在查询账号时即可带着用户的信息一起.
一对多:
反过来,查询用户是若想要带着账号则需要配置一对多的设置,如下图
主表实体内带有从表实体的集合.
多对多:
以角色和用户举例,一个用户可以有多个角色,一个角色也可以赋予给多个用户,所以,用户和角色之间是多对多的关系因此在mybatis配置中相当于配置两个一对多,角色和用户互为一对多,配置就像配置一对多一样,不过写sql语句时注意中间表,靠它进行两个表之间的连接.