揭开MyBatis中SQL Mapping XML的奥秘——第05章
2024-02-13 08:28:31
一、联合查询resultMap自定义封装规则
当实体类属性和数据库字段通过驼峰转换或者SQL语句中起别名的方式,如果属性和字段不一致,驼峰命名法就无法使用了,而起别名的方式较为繁琐,这时候就可以使用resultMap自定义封装规则。
resultMap的自定义封装规则主要包括以下几种:
-
驼峰命名法(camelCase) :将数据库字段名转换为驼峰命名法,即将每个单词的首字母大写,其余字母小写。例如,数据库字段“user_name”将转换为“userName”。
-
下划线命名法(underscore) :将数据库字段名转换为下划线命名法,即将每个单词用下划线分隔,并将所有字母小写。例如,数据库字段“user_name”将转换为“user_name”。
-
大写命名法(uppercase) :将数据库字段名转换为大写字母。例如,数据库字段“user_name”将转换为“USER_NAME”。
-
小写命名法(lowercase) :将数据库字段名转换为小写字母。例如,数据库字段“user_name”将转换为“user_name”。
-
自定义命名法(custom) :可以使用自定义的命名规则来转换数据库字段名。例如,可以将数据库字段“user_name”转换为“username”。
二、嵌套查询
嵌套查询是指在一个查询语句中包含另一个查询语句。在MyBatis中,可以使用嵌套查询来实现复杂的数据查询。
嵌套查询主要包括以下几种类型:
-
子查询(subquery) :子查询是嵌套在另一个查询语句中的查询语句,它通常用于从另一个表中获取数据并将其作为当前查询语句的条件。
-
相关子查询(correlated subquery) :相关子查询是指子查询中引用了父查询中的列或参数。相关子查询通常用于获取与父查询中的数据相关的数据。
-
公共表表达式(CTE) :CTE是临时表的一种,它可以在查询语句中定义,并在查询语句的后续部分中使用。CTE通常用于简化复杂查询语句的结构并提高查询性能。
三、多对一映射
多对一映射是指一个实体类对应多个实体类的情况。在MyBatis中,可以使用多对一映射来实现一对多的数据查询。
多对一映射主要包括以下几种实现方式:
-
使用resultMap :可以使用resultMap来定义多对一映射关系。resultMap中可以定义一个父实体类和一个子实体类,并使用association元素来指定多对一映射关系。
-
使用@ManytoOne注解 :可以使用@ManytoOne注解来定义多对一映射关系。@ManytoOne注解可以放在父实体类的属性上,用于指定该属性对应多个子实体类。
-
使用select语句 :可以使用select语句来查询多对一映射关系。select语句中可以使用join语句来连接父实体类和子实体类。
四、一对多映射
一对多映射是指一个实体类对应多个实体类的情况。在MyBatis中,可以使用一对多映射来实现一对多的数据查询。
一对多映射主要包括以下几种实现方式:
-
使用resultMap :可以使用resultMap来定义一对多映射关系。resultMap中可以定义一个父实体类和一个子实体类,并使用collection元素来指定一对多映射关系。
-
使用@OneToMany注解 :可以使用@OneToMany注解来定义一对多映射关系。@OneToMany注解可以放在父实体类的属性上,用于指定该属性对应多个子实体类。
-
使用select语句 :可以使用select语句来查询一对多映射关系。select语句中可以使用join语句来连接父实体类和子实体类。
五、多对多映射
多对多映射是指两个实体类相互对应多个实体类的情况。在MyBatis中,可以使用多对多映射来实现多对多的数据查询。
多对多映射主要包括以下几种实现方式:
-
使用resultMap :可以使用resultMap来定义多对多映射关系。resultMap中可以定义两个实体类,并使用collection元素来指定多对多映射关系。
-
使用@ManyToMany注解 :可以使用@ManyToMany注解来定义多对多映射关系。@ManyToMany注解可以放在两个实体类的属性上,用于指定这两个实体类之间存在多对多映射关系。
-
使用select语句 :可以使用select语句来查询多对多映射关系。select语句中可以使用join语句来连接两个实体类。
六、一对一映射
一对一映射是指一个实体类对应一个实体类的情况。在MyBatis中,可以使用一对一映射来实现一对一的数据查询。
一对一映射主要包括以下几种实现方式:
-
使用resultMap :可以使用resultMap来定义一对一映射关系。resultMap中可以定义两个实体类,并使用association元素来指定一对一映射关系。
-
使用@OneToOne注解 :可以使用@OneToOne注解来定义一对一映射关系。@OneToOne注解可以放在两个实体类的属性上,用于指定这两个实体类之间存在一对一映射关系。
-
使用select语句 :可以使用select语句来查询一对一映射关系。select语句中可以使用join语句来连接两个实体类。
七、延迟加载
延迟加载是指在需要的时候才加载数据。在MyBatis中,可以使用延迟加载来提高查询性能。
延迟加载主要包括以下几种实现方式:
-
使用@Lazy注解 :可以使用@Lazy注解来定义延迟加载属性。@Lazy注解可以放在实体类的属性上,用于指定该属性延迟加载。
-
使用fetchType属性 :可以使用fetchType属性来定义延迟加载类型。fetchType属性可以放在resultMap或@OnetoOne/@ManyToOne/@OneToMany/@ManyToMany注解上,用于指定延迟加载的类型。