1.表和实体类不匹配
数据库建表(标准格式为下划线连接,与实体类有差异时)
create table teacher (
id int primary key auto_increment,
first_name varchar(20),
last_name varchar(20)
);
<!-- 方法1: 可以使用列别名来解决不一致问题 -->
<select id="selectOne" parameterType="int" resultType="com.westos.entity.Teacher">
select id,first_name firstName,last_name lastName from teacher where id = #{id}
</select>
<!-- 方法2: 使用 resultMap 代替 resultType完成映射 -->
<select id="selectOne" parameterType="int" resultMap="aaa">
select id, first_name, last_name from teacher where id = #{id}
</select>
<!-- type="实体对象的类型"
id 标签用来映射主键
result 标签用来映射其它列
-->
<resultMap id="aaa" type="com.westos.entity.Teacher">
<!-- column="列名" property="属性名" -->
<id column="id" property="id"></id>
<result column="first_name" property="firstName"></result>
<result column="last_name" property="lastName"></result>
</resultMap>
2.建议使用 resultMap 代替 resultType完成映射 (功能更强大,是别名满足不了的)
例如:
连接查询的映射
商品和类别
select * from product p inner join category c on p.category_id = c.id where p.id=1;
<!-- 把连接查询映射到两个有关系的实体类上 -->
<select id="selectById" parameterType="int" resultMap="bbb">
select p.id, p.name, p.price, c.id cid, c.name cname
from product p inner join category c on p.category_id = c.id where p.id=#{id}
</select>
<!-- association 关联 -->
<resultMap id="bbb" type="com.westos.entity.Product">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<result column="price" property="price"></result>
<!-- property="关系属性名" -->
<association property="category" javaType="com.westos.entity.Category">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
</association>
</resultMap>
Java代码如下
@Test
public void testproduct() {
SqlSession sqlSession = factory.openSession();
Product p = sqlSession.selectOne("com.westos.mapper.ProductMapper.selectById", 1);
System.out.println(p);
System.out.println(p.getCategory());
}