详解MyBatis直接执行SQL查询及数据批量插入

网友投稿 288 2023-07-22


详解MyBatis直接执行SQL查询及数据批量插入

一、直接执行SQL查询:

1、mappers文件节选

${paramSQL}

2、DAO类节选

public interface SomeDAO{

List getInstanceModel(@Param("paramSQL")String sql);

}

3、注意事项

3.1:传入方法的参数sql必须遵循以下规范"select XXX as instanceid, XXX as instancename ....." ,否则MyBatis无法自动将查询结果变成java对象。

3.2: mappers文件中的#{}语法与${}语法的区别:

默认情况下, #{}语法会促使MyBatis生成PreparedStatement属性并且使用PreparedStatement的参数(=?)来设置值。如果你想直接将未更改的字符串代入到sql中,可以使用${}。

也就是说,MyBatis看到 #{}会认为你在给sql中的变量赋值,就像JDBC编程中给问号赋值一样(比如MyBatis会判断它的类型,并自动在前后加单引号)。而当MyBatis看到${}的时候会直接将之替换成变量的值而不做任何处理。

所以在使用${}的时候,不需要像#{}一样写"jdbcType=VARCHAR"之类的属性。

3.3:resultType和resultMap

按照1中的写法, < resultMap > 部分可以删除不用了,因为在接下来的

所以我们可以看出,关于

二、批量插入数据

1、经验告诉我们,使用insert into XXX values(XX)(XXX)(XXX),比使用insert into XXX values(XX),insert into XXX values(XXX),insert into XXX values(XXX)效率要高。

2、在MyBatis中的用法

2.1、mappers文件节选

insert into student ( ) values (null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#{item.tId})

2.2、DAO类节选

public interface SomeDAO{

public void insertBatch(@Param("list")List students);

}

详解mybatis批量插入数据

首先看看批处理的mapper.xml文件

resultType="java.lang.String">

SELECT CURRENT_TIMESTAMP()

resultType="java.lang.String">

SELECT CURRENT_TIMESTAMP()

insert into kangaiduoyaodian ( depart1, depart2, product_nhttp://ame,

generic_name, img, product_specification, unit,

approval_certificate, manufacturer, marketPrice, vipPrice,

website, fetch_time, productdesc ) values

separator=",">

( #{item.depart1}, #{item.depart2}, #{item.productName},

#{item.genericName}, #{item.img},

#{sKeUKoVNEmitem.productSpecification}, #{item.unit},

#{item.approvalCertificate}, #{item.manufacturer},

#{item.marketprice}, #{item.vipprice}, #{item.website},

#{fetchTime}, #{item.productdesc} )

separator=",">

( #{item.depart1}, #{item.depart2}, #{item.productName},

#{item.genericName}, #{item.img},

#{sKeUKoVNEmitem.productSpecification}, #{item.unit},

#{item.approvalCertificate}, #{item.manufacturer},

#{item.marketprice}, #{item.vipprice}, #{item.website},

#{fetchTime}, #{item.productdesc} )

在批处理中,我发现有几个需要注意的问题

1、主键的自动获取,在insert中添加useGeneratedKeys=”true” keyProperty=”id”这两个属性无效,并且或中断数据插入,如果id是数据库自增的话,可以什么都不写,在插入的语句中去除主键属性,还有就是利用

resultType="java.lang.Integer">

SELECT LAST_INSERT_ID()

resultType="java.lang.Integer">

SELECT LAST_INSERT_ID()

注意 : 标签在insert下只能存在一个;批处理的时候不适合使用,主键自增最好,或者指定

2,插入时间的获取如上面所示,我用的是mysql,只要是mysql函数都可以拿来使用,插入时间和主键都是mysql函数中的一个。。。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis实战教程之入门到精通(经典)
下一篇:Java将GeoHash转化为对应的经纬度坐标实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~