`

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

 
阅读更多

一、直接执行SQL查询:

1、mappers文件节选

复制代码
<resultMapid="AcModelResultMap"type="com.izumi.InstanceModel">
<resultcolumn="instanceid"property="instanceID"jdbcType="VARCHAR"/>
<resultcolumn="instancename"property="instanceName"jdbcType="VARCHAR"/>
</resultMap>

<selectid="getInstanceModel"resultType="com.izumi.InstanceModel">
${paramSQL}
复制代码

</select>

2、DAO类节选

publicinterfaceSomeDAO{
List<InstanceModel>getInstanceModel(@Param("paramSQL")Stringsql);

}

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>部分可以删除不用了,因为在接下来的<select>中没用使用定义的resultMap,而是使用了resultType。

所以我们可以看出,关于<select>返回值的定义有两种写法,一种是定义一个resultMap然后引用这个resultMap,还有一种就是直接使用resultType指定一个类的路径。

二、批量插入数据

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 id="insertBatch" >
insert into student (
<include refid="Base_Column_List" /> )
values
<foreach collection="list" item="item" index="index" separator=",">
(null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#{item.tId})
</foreach>

</insert>

2.2、DAO类节选

publicinterfaceSomeDAO{

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

}

参考:

1、《MyBatis用户指南中文版》 译者:曾令祝

2、http://winhack.iteye.com/blog/1522181

分享到:
评论

相关推荐

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

    在本文中,我们将深入探讨如何使用MyBatis直接执行SQL查询以及如何进行数据的批量插入。 **一、直接执行SQL查询** 在MyBatis中,你可以通过Mapper接口和XML配置文件来直接执行自定义的SQL查询。下面是一个简单的...

    mybatis直接执行sql语句后续之一

    这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。下面我们将深入探讨MyBatis的SQL执行机制及相关知识点。 首先,MyBatis的核心组件是SqlSessionFactory,它是创建...

    mybatis基础源码及jar包

    例如,使用`&lt;batch&gt;`标签可以批量插入数据。 7. **JDBC的封装**:MyBatis在JDBC的基础上进行了抽象和封装,降低了直接操作JDBC的复杂性,如自动管理连接、事务等。同时,MyBatis允许开发者直接写SQL,保留了SQL的...

    Mybatis的课程管理系统数据持久化外文文献及翻译.zip

    8. **性能优化**:提供了一些最佳实践和技巧,如批量插入、预编译SQL、使用PreparedStatement等,以提升Mybatis在大数据量操作时的效率。 通过阅读这些外文文献和翻译,学习者不仅可以深入理解Mybatis框架的工作...

    MyBatis3_开发手册

    - 合理使用Executor执行策略,如批量插入时使用BatchExecutor。 - 充分利用动态SQL,避免硬编码SQL语句。 - 注意缓存管理,防止数据不一致。 总的来说,"MyBatis3_开发手册"是一个全面的指南,涵盖了MyBatis3的...

    Mybatis-Plus-Generator

    在实际应用中,可以通过创建一个导入服务,利用Mybatis-Plus的批量插入API来实现高效的数据导入。需要注意的是,在处理大批量数据时,应合理设置批处理的大小,避免因内存压力过大导致性能问题。 使用Mybatis-Plus-...

    Mybatis入门到实践.pdf

    MyBatis 提供了一种声明式的方式,允许开发者通过 XML 或注解的方式来配置 SQL 语句,同时它还提供了对象与 SQL 查询之间的映射机制,使得 SQL 查询结果可以直接转换为 Java 对象,极大地提高了开发效率。...

    ibatis-2-mybatis-2.3.5.zip

    4. 批量操作:BatchExecutor适用于批量插入、更新和删除操作,提高性能。 六、进阶话题 1. 映射器工厂:理解SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession之间的关系,以及如何通过它们创建和管理映射...

    MyBatis技术文档.pdf

    - 支持定制化的 SQL 语句、存储过程及高级映射功能。 - 大幅度减少了 JDBC 代码和手动参数设置以及结果集获取的工作。 - 可以使用简单的 XML 或注解进行配置与原始映射,实现接口与 Java POJOs 的数据库记录映射...

    Java面试题2023最新版大合集(485页)

    9、Mybatis 如何执行批量插入? 可以通过 `&lt;insert&gt;` 标签的 `useGeneratedKeys` 和 `keyProperty` 属性配合 `&lt;selectKey&gt;` 标签来实现自增主键的获取,然后进行批量插入操作。 10、获取自动生成的键值: 使用 `...

    MyBatis Generator生成代码及使用方式详解

    5. **扩展功能**:虽然MyBatis Generator的官方版本功能相对基础,但社区已开发了多种扩展插件,如支持分页查询、批量插入等功能。这些插件可以直接集成到你的项目中,以满足更复杂的业务需求。 6. **持续集成**:...

    MybatisPlus-1.3.6.zip

    4. **批量操作**:支持批量插入、批量更新、批量删除,使得数据操作更加高效。 5. **分页查询**:内置了Page对象,支持物理分页和逻辑分页,可以方便地进行复杂的分页查询。 6. **自定义全局配置**:MybatisPlus...

    1000道 互联网大厂Java工程师面试题(1)(1)(1).pdf

    11. **批量插入的执行**:可以通过编写特殊的 SQL 语句来实现批量插入。 12. **获取自动生成的主键值**:可以通过配置 keyProperty 属性和 useGeneratedKeys 属性为 true 来获取自动生成的主键值。 13. **传递多个...

    互联网 大厂Java 工程师面试题.pdf

    9. **批量插入**:使用`&lt;insert&gt;`标签的`useGeneratedKeys="true"`和`keyProperty`属性,配合`&lt;foreach&gt;`标签实现。 10. **获取自动生成的键值**:通过`useGeneratedKeys="true"`和`keyProperty`属性,可以在插入后...

    ibatis2讲义

    批处理是提高性能的一种有效手段,尤其在批量插入、更新大量数据时。IBATIS支持通过一次调用执行多个SQL语句,从而减少网络开销。 #### 11. 动态SQL 动态SQL是IBATIS的一个强大特性,允许在运行时动态生成SQL语句...

    simple-mapper.zip

    SqlSession是执行数据库操作的对象,而Executor是执行SQL的引擎,分为简单执行器、复用执行器和批量执行器,分别对应不同的数据库操作场景。在"simple-mapper.zip"中,虽然这些概念可能没有直接体现,但理解它们有助...

    ibatis-2 源代码

    - **SqlMapClient**: 是iBatis的主要接口,负责执行SQL语句并处理结果集。 - **Statement**: 包括SQL映射文件(SqlMap)和SQL语句(MappedStatement),定义了SQL的执行方式及参数绑定。 - **Executor**: 执行器...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    12. **批量插入方法**: - 可以使用foreach标签。 13. **获取自动生成的主键值**: - 可以通过useGeneratedKeys属性。 14. **传递多个参数**: - 可以使用@Param注解或Map。 15. **Mybatis动态SQL**: - 根据不同...

    asante-bundler:用于对象关系映射的小型 API

    ORM 技术允许开发者使用面向对象的编程语言来操作数据库,而无需直接编写 SQL 查询,从而提高了代码的可读性和可维护性。在这个深度解析中,我们将探讨 `asante-bundler` 的核心概念、功能以及如何在实际项目中应用...

Global site tag (gtag.js) - Google Analytics