1 环境准备
- 参照MyBatisMapper代理开发
- 将实体类的属性修改成与数据库表字段不同
- 实体类属性:uname upassword
- 数据库表字段:name password
2 bug
- 测试类代码如下
package cn.qiguai;
import cn.qiguai.domain.User;
import cn.qiguai.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
for (User u : users) {
System.out.println(u);
}
sqlSession.close();
}
}
- 运行测试类后,控制台结果如下。我们可以发现自动封装失败
3 解决方案
3.1 取别名
- 修改sql映射文件中对应sql语句,将与实体类属性不一致的表字段取别名,别名与实体类属性一致
- 修改后再次运行测试类,控制台结果如下
3.2 resultMap(结果映射)
- 修改sql映射文件
- 添加对应属性与字段映射,如下图①
- 属性id:映射关系唯一标识
- type:建立映射关系实体类的全类名
- 标签id:完成主键字段的映射
- column:表字段
- property:实体类属性
- 标签result:完成一般字段的映射
- column:表字段
- property:实体类属性
- 修改sql语句的resultType属性为resultMap,值为映射关系的id,如下图②
- 修改完sql映射文件后,运行测试类,运行结果如下