上接: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