mybatis设置命名格式转换 与 批量插入更新&select查询返回自定义实体类 的sql写法

发布时间 2023-08-19 22:50:31作者: 虎头虎脑小黑狗

  在mybatis的配置文件中设置了Java实体类驼峰命名与表属性下划线命名的自动转换。

  在mybatis中,从接口获取到大量数据之后,将数据集合分批量插入更新到表中。

  在mybatis中,select查询表数据,返回数据的存储类型为自定义的实体类。

1.设置Java实体类驼峰命名与表属性下划线命名自动映射

  在mybatis-config.xml文件中,设置 

<setting name="mapUnderscoreToCamelCase" value="true"/>

 

  可以实现 下划线命名的表字段与驼峰命名的表的实体类属性 自动映射。

2.批量插入更新的sql

 

<insert>
    insert into t_table_name ( , , , , , , ) 
    values
    <foreach collection="list" item="item" index="index" separator=",">
    (
      #{item.field1, jdbcType= },
      #{item.field2, jdbcType= }     
    )
    </foreach>
    ON DUPLICATE KEY UPDATE
         field3 = VALUES(field3),
         field4 = VALUES(field4)
</insert>    

 

  对于这个sql,会将sql的实体类集合插入到表中,如果插入一条数据的时候,会导致 表的 primary key或union key 冲突,则更新 on duplicate key update 后面设置的字段值。

3.在mybatis配置文件中设置驼峰命名与下划线命名自动转换映射之后的sql写法规则

  在2的批量插入更新语句中,本质是:对于实体类Entity集合中的每个数据,将类属性的值取出,并记录该属性的类型,然后通过jdbc协议传输数据,将数据存储到表中。因此,在2中的sql中,

    <foreach>标签中的内容是实体类集合,这部分属性对应实体类的 驼峰命名

    insert into tab_name 和 key update 部分的所有字段都需要对应表的 下划线命名

例如:

 

<insert id="batchInsertOrUpdate">
        insert into t_source_income (
            prd_id,
            stat_date,
            show_count,
            click_count,
            income
        )
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (
                #{item.prdId,jdbcType=VARCHAR},
                #{item.statDate,jdbcType=DATE},
                #{item.showCount,jdbcType=INTEGER},
                #{item.clickCount,jdbcType=INTEGER},
                #{item.income,jdbcType=DECIMAL}
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        show_count = VALUES(show_count),
        click_count = VALUES(click_count),
        income = VALUES(income)
</insert>

 

4. select 查询的sql写法规则

    从表中直接查询或者按条件查询返回的多条数据,存储为自定义类型的实体类集合。

  写法示例:

    假设表字段 stat_date  click_count,自定义实体类对应的命名采用驼峰命名。

<select id="queryDateByType" resultType="com.zzw.Data">
    select stat_date, click_count from t_source_income where type="income"
</select>

  如示例sql所示,select 后面的字段采用的是下划线命名,可以自动的对应实体类Data中驼峰命名的属性。