mybatis---表和实体类不匹配问题

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());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值