mybatis设置命名格式转换 与 批量插入更新&select查询返回自定义实体类 的sql写法
在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中驼峰命名的属性。