下面我将为您介绍“MyBatis中resultType和parameterType和resultMap使用总结”的完整攻略:
1. resultType
在MyBatis中,resultType是指SQL语句执行后返回的结果集类型,该类型可以是任何Java类,包括:Java基本数据类型、JavaBean、Map等。
1.1 使用Java基本数据类型作为resultType
当使用Java基本数据类型作为resultType时,MyBatis会将结果集中第一列的值映射到该基本数据类型中。示例代码如下:
<select id="getCount" resultType="int">
select count(*) from user;
</select>
以上代码中,将返回user表中的记录总数,MyBatis会将结果集中第一列的值映射到int类型中。
1.2 使用JavaBean作为resultType
当使用JavaBean作为resultType时,MyBatis会自动根据结果集中的列名与JavaBean属性名进行映射。如下是一个简单的JavaBean示例:
public class User {
private int id;
private String name;
private String email;
// 省略Getter/Setter方法
}
而对应的MyBatis映射文件如下:
<select id="getUser" resultType="User">
select `id`, `name`, `email` from user where `id` = #{id};
</select>
以上代码中,MyBatis会将结果集中id
列的值映射到User对象的id
属性中,name
列的值映射到name
属性中,email
列的值映射到email
属性中。
2. parameterType
在MyBatis中,parameterType是指传递给SQL语句执行的参数类型,该类型也可以是任何Java类,包括:Java基本数据类型、JavaBean、Map等。
2.1 使用Java基本数据类型作为parameterType
若参数类型为Java基本数据类型(int、long、float、double等)时,MyBatis会自动将参数值传递给SQL语句中的#{}占位符。如下是一个简单的示例:
<select id="getUserById" parameterType="int" resultType="User">
select * from user where id = #{id};
</select>
以上代码中,getUserById
方法需传入一个int类型的参数id
,MyBatis会自动将该参数传递给SQL语句中的#{id}占位符。
2.2 使用JavaBean作为parameterType
当参数类型为JavaBean时,MyBatis会自动将JavaBean属性值对应到SQL语句中的#{属性名}占位符中。如下是一个简单的示例:
public class User {
private int id;
private String name;
private String email;
// 省略Getter/Setter方法
}
而对应的MyBatis映射文件如下:
<select id="insertUser" parameterType="User">
insert into user (`name`, `email`) values (#{name}, #{email});
</select>
以上代码中,insertUser
方法需传入一个User对象作为参数,MyBatis会自动将User对象的name
、email
属性值分别传递给SQL语句中的#{name}、#{email}占位符中。
3. resultMap
在MyBatis中,resultMap是用来定义JavaBean属性名和SQL列名之间的映射关系,以便于MyBatis可以将查询结果映射到Java对象中。
3.1 简单的resultMap
以下是一个简单的resultMap示例:
<resultMap id="userMap" type="User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="email" property="email"/>
</resultMap>
<select id="getUser" resultMap="userMap">
select `id`, `name`, `email` from user where `id` = #{id};
</select>
以上代码中,定义了一个名为userMap
的resultMap,指定了JavaBean属性名与SQL列名之间的映射关系。而getUser
方法使用了该resultMap,以便将查询结果映射到User对象中。
3.2 复杂的resultMap
在实际开发中,可能会遇到多表关联查询的情况,这时可以使用resultMap来定义复杂的映射关系。以下是一个复杂的resultMap示例:
<resultMap id="orderMap" type="Order">
<id column="id" property="id"/>
<result column="order_no" property="orderNo"/>
<result column="order_date" property="orderDate"/>
<association property="user" javaType="User">
<id column="user_id" property="id"/>
<result column="user_name" property="name"/>
<result column="user_email" property="email"/>
</association>
</resultMap>
<select id="getOrder" resultMap="orderMap">
select `order`.`id`, `order`.`order_no`, `order`.`order_date`,
`user`.`id` as `user_id`, `user`.`name` as `user_name`, `user`.`email` as `user_email`
from `order`
left join `user` on `order`.`user_id` = `user`.`id`
where `order`.`id` = #{id};
</select>
以上代码中,定义了一个名为orderMap
的resultMap,其中嵌套使用了association标签,以便将order
表和user
表进行关联查询,并将查询结果映射到Order对象中。
希望以上内容可以帮到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis中resultType和parameterType和resultMap使用总结 - Python技术站