04_解决字段名与实体类属性名不相同的冲突

1 准备表和数据

  1. CREATE TABLE orders(
  2. order_id INT PRIMARY KEY AUTO_INCREMENT,
  3. order_no VARCHAR(20),
  4. order_price FLOAT
  5. );
  6. INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
  7. INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
  8. INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

2 定义实体类:表的字段和实体的属性不一致

  1. public class Order {
  2. private int id;
  3. private String orderNo;
  4. private float price;
  5. }

3 解决方法

3.1 通过查询的别名

  1. <!-- 通过查询字段的别名来对应 -->
  2. <select id="getOrder" parameterType="int" resultType="Order">
  3. SELECT order_id id, order_no orderNo, order_price price FROM orders WHERE order_id=#{id}
  4. </select>
测试
  1. @Test
  2. public void test1(){
  3. SqlSessionFactory factory = MybatisUtils.getFactory();
  4. SqlSession session = factory.openSession();
  5. String statement = "cn.imentors.mybatis.test4.orderMapper.getOrder";
  6. Order order = session.selectOne(statement , 2);
  7. System.out.println(order);
  8. }
3.2 通过resultMap
  1. <resultMap type="Order" id="getOrder2Map">
  2. <id property="id" column="order_id"/>
  3. <result property="orderNo" column="order_no"/>
  4. <result property="price" column="order_price"/>
  5. </resultMap>
  6. <select id="getOrder2" parameterType="int" resultMap="getOrder2Map">
  7. SELECT * FROM orders WHERE order_id=#{id}
  8. </select>
  • resultMap : 封装一些映射关系
  •  id : 专门针对主键
  • result : 针对一般字段
测试
  1. @Test
  2. public void test2(){
  3. SqlSessionFactory factory = MybatisUtils.getFactory();
  4. SqlSession session = factory.openSession();
  5. String statement = "cn.imentors.mybatis.test4.orderMapper.getOrder2";
  6. Order order = session.selectOne(statement , 2);
  7. System.out.println(order);
  8. }

捐赠我们
    良师益友工作室一直在致力于帮助编程爱好更加快速方便地学习编程,如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。
    
原文地址:https://www.cnblogs.com/imentors/p/4809487.html