mybatis resultType resultMap 的区别------------彻底解决

在MyBatis中,resultTyperesultMap都是用于设置SQL查询结果的返回类型¹²³。以下是它们的详细介绍:

  1. resultType¹²³:它是期望从这条语句中返回结果的类全限定名或别名。注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。以下是一些映射规则:

    • 基本类型:resultType = 基本类型
    • List类型:resultType = List中元素的类型
    • Map类型:单条记录:resultType = map;多条记录:resultType = Map中value的类型
  2. resultMap¹²³:它是对外部resultMap的命名引用。结果映射是MyBatis最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。resultMapresultType之间只能同时使用一个。

在MyBatis中,resultMap是一个非常强大的元素,主要用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象

resultMap元素的构成:

<resultMap id="" type="">
  <constructor>
    <idArg/>
    <arg/>
  </constructor>
  <id/>
  <result/>
  <association property=""/>
  <collection property=""/>
  <discriminator javaType="">
    <case value=""/>
  </discriminator>
</resultMap>

其中:

  • id属性代表这个resultMap的标识。
  • type属性标识需要映射的POJO。我们可以使用MyBatis定义好的类的别名或自定义类的全限定名。
  • constructor元素用于配置构造方法。当一个POJO没有无参数构造方法时使用。
  • idresult元素都有以下属性¹²³⁴:
    • property:映射到列结果的字段或属性。如果POJO的属性和SQL列名(column元素)是相同的,那么MyBatis就会映射到POJO上。
    • column:对应SQL列。
    • javaType:配置Java类型。
    • jdbcType:配置数据库类型。这是JDBC类型,MyBatis已经为我们做了限定,基本支持所有常用数据库类型。
    • typeHandler:类型处理器。允许你用特定的处理器来覆盖MyBatis默认的处理器。需要指定jdbcType和javaType相互转化的规则。
  • associationcollectiondiscriminator元素用在级联的情况下¹²³⁴。

需要注意的是,resultMapresultType不能同时使用。
在实际使用中,如果你搜索只是返回一个值,比如说String ,或者是int,那你直接用resultType就行了。但是你如果是返回一个复杂的对象,就可以使用resultMap

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,MyBatis-Plus的实现流程如下: 1. 引入MyBatis-Plus依赖,可以通过Maven方式引入,例如: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> ``` 2. 配置MyBatis-Plus,可以在application.yml或application.properties文件中添加如下配置: ```yaml mybatis-plus: # mapper文件位置 mapper-locations: classpath:/mapper/*.xml # 实体类包名 typeAliasesPackage: com.example.entity ``` 3. 创建实体类,可以使用Lombok注解简化代码,例如: ```java @Data @NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; } ``` 4. 创建Mapper接口,可以继承MyBatis-Plus提供的BaseMapper接口,例如: ```java public interface UserMapper extends BaseMapper<User> { } ``` 5. 创建Mapper.xml文件,可以使用MyBatis-Plus提供的自动填充功能,例如: ```xml <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> <result column="email" property="email" /> </resultMap> <sql id="Base_Column_List"> id, name, age, email </sql> <insert id="insert" parameterType="com.example.entity.User"> <selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE"> SELECT IFNULL(MAX(id), 0) + 1 FROM user </selectKey> INSERT INTO user (id, name, age, email) VALUES (#{id}, #{name}, #{age}, #{email}) </insert> <update id="updateById" parameterType="com.example.entity.User"> UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id} </update> <select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Long"> SELECT <include refid="Base_Column_List" /> FROM user WHERE id = #{id} </select> <delete id="deleteById" parameterType="java.lang.Long"> DELETE FROM user WHERE id = #{id} </delete> <select id="selectList" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> FROM user </select> </mapper> ``` 6. 在Service中调用Mapper接口,例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getById(Long id) { return userMapper.selectById(id); } @Override public List<User> list() { return userMapper.selectList(null); } @Override public boolean save(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateById(User user) { return userMapper.updateById(user) > 0; } @Override public boolean removeById(Long id) { return userMapper.deleteById(id) > 0; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发技术控

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值