mybatis注解开发-@Results和@Result注解

上接:mybatis注解开发-表字段名与类属性名不完全相同,无法将查询结果全部封装进类对象

介绍

@Results 注解,可以将 查询结果的列名 映射到 实体类的属性

@Results

源码如下:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Results {
    String id() default "";

    Result[] value() default {};
}
  • String id():命名。然后可以通过 @ResultMap("")主键使用

  • Result[] value():配置其他字段

@Result

源码如下:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Result {
    boolean id() default false;

    String column() default "";

    String property() default "";

    Class<?> javaType() default void.class;

    JdbcType jdbcType() default JdbcType.UNDEFINED;

    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

    One one() default @One;

    Many many() default @Many;
}
属性 说明
column 数据库表的列名
property 需要映射到 JavaBean 的属性名称
id 是否主键,默认为false,设置为true时表示该字段为主键

例子

修改IUserMapper

增加 @Results 注解,指定 表 与 实体类 的映射关系

package top.malaoshi.mapper;


import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.JdbcType;
import top.malaoshi.entity.User;

import java.util.Date;
import java.util.List;

public interface IUserMapper {

    @Select("select id,username,password,age,sex,status,create_time from user")
    @Results(id="UserMap",value={
            @Result(property = "id",column = "id",id=true),
            @Result(property = "username",column = "username"),
            @Result(property = "password",column = "password"),
            @Result(property = "age",column = "age"),
            @Result(property = "sex",column = "sex"),
            @Result(property = "status",column = "status"),
            @Result(property = "createTime",column = "create_time")
    })
    public List<User> query();

}

执行查询

@org.junit.Test
public void test2() throws IOException {

    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);

    List<User> list=mapper.query();
    for(User u:list) {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm");
        String createTime=sdf.format(u.getCreateTime());

        String info = String.format("id:%s,用户名:%s,创建时间:%s", u.getId(), u.getUsername(),createTime);
        System.out.println(info);
    }

    sqlSession.close();
    inputStream.close();
}

user.getCreateTime()可以返回结果

感谢:
https://www.cnblogs.com/canger/p/9979606.html


原文出处:/show_1IXg9LM7Hu.html