数据库的表的字段名称与实体类(pojo)不对应解决方案
数据库表
不对应的时候我们查表
-
创建一个接口,定义一个方法查询所有用户
-
-
在对应的Mapper配置文件中配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lin.Dao.UserMapper"> <!-- <resultMap id="user" type="com.lin.pojo.User">--> <!-- <result column="pswd" property="psw"></result>--> <!-- </resultMap>--> <!-- <select id="getuser" parameterType="_int" resultMap="user">--> <!-- select * from mybatis.user where id= #{id}--> <!-- </select>--> <select id="getAllUser" resultType="com.lin.pojo.User" > select *from user </select> </mapper>
-
测试
@Test public void test1(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> user = mapper.getAllUser(); for (User i : user) { System.out.println(i); }
-
输出结果
User{id=1, name='hsay', psw='null'}
User{id=2, name='哈哈哈', psw='null'}
User{id=3, name='林正明3', psw='null'}
User{id=4, name='哈哈哈', psw='null'}发现未查到psw,原因就是数据库的字段名称与实体类属性不对应获取不到值
解决方案
1.resultmap
在xml配置中配置resultmap
<resultMap id="user" type="com.lin.pojo.User"> <result column="pswd" property="psw"></result> </resultMap>
column是表的字段名也就是列名称 property是实体的属性 他俩形成映射关系
<select id="getAllUser" resultMap="user" > select *from user </select>
查查询结果
User{id=1, name='hsay', psw='1222'}
User{id=2, name='哈哈哈', psw='123abc'}
User{id=3, name='林正明3', psw='12345'}
User{id=4, name='哈哈哈', psw='123abc'}2.起别名
在编写sql命令中使用起别名的方法将表中的字段名称起一个名字与实体类的属性相同,这样就能把表中的数据映射到实体类中
<select id="getAllUser" resultType="com.lin.pojo.User" > select id,name,pswd as psw from user </select>
查询结果
User{id=1, name='hsay', psw='1222'}
User{id=2, name='哈哈哈', psw='123abc'}
User{id=3, name='林正明3', psw='12345'}
User{id=4, name='哈哈哈', psw='123abc'}