zoukankan      html  css  js  c++  java
  • mybatis学习2

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

    1. 准备表和数据:
    CREATE TABLE orders(
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(20),
    order_price FLOAT
    );
    INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
    INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
    INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);
    2. 定义实体类:
    public class Order {
    private int id;
    private String orderNo;

    private float price;
    }

    3.查询数据

    <select id="selectOrder" parameterType="int" resultType="Order">
    select * from orders where order_id=#{id}
    </select>

    错误:查询结果为null

    4.解决方法

    方式一: 通过在sql 语句中定义别名
    <select id="selectOrder" parameterType="int" resultType="_Order">
    select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
    </select>
    方式二: 通过<resultMap>
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
    select * from orders where order_id=#{id}
    </select>
    <resultMap type="_Order" id="orderResultMap">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
    <result property="price" column="order_price"/>

    </resultMap>

    实现关联表查询  一对一关联

    <!--
    方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
    封装联表查询的数据(去除重复的数据)
    select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=1
    -->
    <select id="getClass" parameterType="int" resultMap="ClassResultMap">
    select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
    </select>
    <resultMap type="_Classes" id="ClassResultMap">
    <id property="id" column="c_id"/>
    <result property="name" column="c_name"/>
    <association property="teacher" column="teacher_id" javaType="_Teacher">
    <id property="id" column="t_id"/>
    <result property="name" column="t_name"/>
    </association>
    </resultMap>

    <!--
    方式二:嵌套查询:通过执行另外一个SQL 映射语句来返回预期的复杂类型
    SELECT * FROM class WHERE c_id=1;
    SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id 的值
    -->
    <select id="getClass2" parameterType="int" resultMap="ClassResultMap2">
    select * from class where c_id=#{id}
    </select>
    <resultMap type="_Classes" id="ClassResultMap2">
    <id property="id" column="c_id"/>
    <result property="name" column="c_name"/>
    <association property="teacher" column="teacher_id" javaType="_Teacher"
    select="getTeacher">
    </association>

    </resultMap>
    <select id="getTeacher" parameterType="int" resultType="_Teacher">
    SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
    </select>

    <!--
    association:用于一对一关联的查询
    property:对象属性的名称
    javaType:对象属性的类型
    column:所对应的外键字段名
    select:使用另一个查询封装的结果
    -->

  • 相关阅读:
    密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等
    |DataDirectory|的使用
    SqlParameter的作用与用法
    C# 通过http post 请求上传图片和参数
    webuploader批量导入文件
    MVC使用Controller完成登录验证
    网页特效 模板素材
    C#中的Cookie 添加 读取 删除
    JS jquery jquery.wordexport.js 实现导出word
    初始配置JDK
  • 原文地址:https://www.cnblogs.com/yydeyi/p/4734266.html
Copyright © 2011-2022 走看看