支持的 JDBC 类型,这是Mybatis描述的JDBC类型
为了以后可能的使用场景,MyBatis 通过内置的 jdbcType 枚举类型支持下面的 JDBC 类型。
BIT | FLOAT | CHAR | TIMESTAMP | OTHER | UNDEFINED |
TINYINT | REAL | VARCHAR | BINARY | BLOB | NVARCHAR |
SMALLINT | DOUBLE | LONGVARCHAR | VARBINARY | CLOB | NCHAR |
INTEGER | NUMERIC | DATE | LONGVARBINARY | BOOLEAN | NCLOB |
BIGINT | DECIMAL | TIME | NULL | CURSOR | ARRAY |
- 一对一 关系 :表与表 共用一个主键,或者两张表各有一个字段对应
- 一对多 关系 :
- 多对多 关系 :有中间表 维护 其他表之间的主键关系
一对一查询
表关系:用户表 与 订单表 模型
一个订单 只属于一个用户:即 我想查询一个订单,顺便获取用户数据
引入 一个 新标签 resultMap、id、result 、association标签
2个Pojo
@Data
public class Order {
private Long id;
private String orderName;
private Double double;
private User userAAA;
}
@Data
public class User {
private Long id;
private String username;
private String password;
private String birthday;
}
<!--
<resultMap/> 标签
> id 自己随便定义,目的是为了其他sql引用
> type Java对象,建议写全限定类名。如果配置别名,则可以使用小驼峰的类名,不需要包名,不推荐
-->
<!--
<resultMap /> 下的标签
> <id>:主键字段映射的标签
> <result> :非主键的字段映射的标签
-->
<!--
results下标签的属性
> column:sql查询出来的字段名
> property:Java对象的属性名
-->
<!-- 第一步 通过订单查询用户ID -->
<select id = "byOrderFindUser" resultMap = "orderMap1">
select * ,u.id from order o,user u where o.id = u.id
</select>
<!--
第二步 创建一个resultMap,映射数据库结果到Java对象,这里就体验了一对一
因为User对象无法直接封装其username,所以直接指定全限定类名.属性
-->
<resultMap id = "orderMap1" type = "com.package.projectName.pojo.Order">
<id column="`" property="id"></id>
<result column = "total" property = "total"></result>
<result column = "username" property = "user.username"></result>
<result column = "password" property = "user.password"></result>
</resultMap>
<!--
第三步 association 标签体验一对一
-->
<resultMap id = "orderMap2" type = "order">
<id column="oid" property="id"></id>
<result column = "total" property = "total"></result>
<!--
property :当前实体中的属性名,这里实体是order,Order对象的属性名是userAAA
javaType :当前实体中的属性类型 建议使用全限定类名
-->
<association property= "userAAA" javaType = "com.package.projectName.pojo.User">
<id column = "uid" property = "id"></id>
<result column = "username" property = "user.username"></result>
<result column = "password" property = "password"></result>
</association>
</resultMap>
一对多查询
表关系:用户表 与 订单表 模型
需求场景:我想通过一个 用户 查询他的所有订单
引入 新标签 collection 用于集合
@Data
public class Order {
private Long id;
private String orderName;
private Double double;
private User userAAA;
}
@Data
public class User {
private Long id;
private String username;
private String password;
private String birthday;
// 添加用户的所有订单
private List<Order> orderSSS;
}
<!--
第一步,编写常规SQL(通过用户查询所有订单)指定结果集
-->
<select id = "byUserFindOrders" resultMap = "userDiyMap1">
select * ,o.id , u.id from user o,user u where o.id = u.id
</select>
<!--
第二步,封装结果集
-->
<resultMap id = "userDiyMap1" type = "com.package.projectName.pojo.User">
<id column="uid" property="id"></id>
<result column = "username" property = "user.username"></result>
<result column = "password" property = "user.password"></result>
<!--
<collection> 标签属性 property:集合对象名称 ofType:集合中的数据类型
-->
<collection property="orderSSS" ofType="Order">
<id column="oid" property="id"></id>
<result column = "total" property = "total"></result>
</collection>
</resultMap>
多对多查询
表关系:用户表 与 角色表 与 用户和角色表的内容 模型
@Data
public class Role {
private Integer id;
private String roleName;
private String roleDesc;
}
@Data
public class User {
private Long id;
private String username;
private String password;
private String birthday;
// 添加用户的所有订单
private List<Order> orderSSS;
private List<Role> roleSSS;
}
<!--
第一步,通过用户查询所有订单、查询所有的角色
-->
<select id = "byUserFindOrdersAndRoles" resultMap = "userRole">
select * from
user as u,
sys_user_role as ur,
sys_role as r,
where u.id = ur.userId and ur.userId = r.id
</select>
其结果有:用户ID,用户名称,用户密码,用户生日,角色Id,角色名称,角色描述
<!--
第二步,学会一对一、一对多,多对多就是多表查询,而已,然后多处理封装数据而已
-->
<resultMap id = "userDiyMap1" type = "com.package.projectName.pojo.User">
<id column="uid" property="id"></id>
<result column = "username" property = "user.username"></result>
<result column = "password" property = "user.password"></result>
<!--
<collection> 标签属性 property:集合对象名称 ofType:集合中的数据类型
-->
<collection property="orderSSS" ofType="Order">
<id column="oid" property="id"></id>
<result column = "total" property = "total"></result>
</collection>
</resultMap>
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)