9.mybatis使用一些注意事项和技巧

一、解决实体类和数据库字段命名冲突问题

问题抛出:通常我们设计数据表字段的时候会使用下划线来拼接,而在javaBean中通常使用驼峰形式表示属性。例如tb_user表(user_email)->User类(userEmail),如何解决这种冲突呢?
案例说明:

  • 数据表
CREATE TABLE orders(
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(20), 
    order_price FLOAT
);
  • JavaBean类
public class Order {
    private int id;                //id===>order_id
    private String orderNo;        //orderNo===>order_no
    private float price;        //price===>order_price
...省略其他
1.错误的方法
   <!-- 
        根据id查询得到一个,使用这个查询是查询不到我们想要的结果的,
        这主要是因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录
     -->
    <select id="getOrderById" parameterType="int" 
        resultType="com.qiu.entity.Order">
        select * from orders where order_id=#{id}
    </select>

2.正确解法

(1)方法一
  • 使用别名的形式
    <!-- 
        根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,
        这是因为我们将查询的字段名都起一个和实体类属性名相同的别名,
这样实体类的属性名和查询结果中的字段名就可以一一对应上
     -->
    <select id="selectOrder" parameterType="int" 
        resultType="com.qiu.entity.Order">
        select order_id id, order_no orderNo,order_price price from orders 
where order_id=#{id}
    </select>
(2)方法二
  • 使用resultMap映射实体类属性名和表的字段名一一对应关系
  <!-- 
    根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,
    这是因为我们通过<resultMap>映射实体类属性名和表的字段名一一对应关系 -->
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
        select * from orders where order_id=#{id}
    </select>
    <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
    <resultMap type="com.qiu.entity.Order" id="orderResultMap">
        <!-- 用id属性来映射主键字段 -->
        <id property="id" column="order_id"/>
        <!-- 用result属性来映射非主键字段 -->
        <result property="orderNo" column="order_no"/>
        <result property="price" column="order_price"/>
    </resultMap>
(3)方法三
  • 在核心配置文件中启用下划线与驼峰式命名规则的映射
<configuration>  
     <settings>  
          <setting name="mapUnderscoreToCamelCase" value="true" />  
     </settings>  
</configuration>  

二、有关mybatis接口方法中传入参数问题

mybatis参数传递主要分为以下的五种情况

1.单个参数

  • 可以接受基本类型,对象类型,集合类型的值。这种情况MyBatis可直接使用这个参数,不需要经过任何处理。

2.多个参数

  • 任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,0,1…,值就是参数的值。

3.命名参数(推荐使用)

  • 为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字

4.POJO

  • 当这些参数属于我们业务POJO时,我们直接传递POJO

5.Map

  • 我们也可以封装多个参数为map,直接传递

总结:
(1)当参数小于5时候通常使用@Param形式
(2)参数大于5时候使用JavaBean形式


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。