`
wxb880114
  • 浏览: 683627 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

一、直接执行SQL查询:

1、mappers文件节选



<resultMap id="AcModelResultMap" type="com.izumi.InstanceModel">
  <result column="instanceid" property="instanceID" jdbcType="VARCHAR" />
  <result column="instancename" property="instanceName" jdbcType="VARCHAR" />
</resultMap>

<select id="getInstanceModel" resultType="com.izumi.InstanceModel">
  ${paramSQL}


</select>



2、DAO类节选

public interface SomeDAO{
  List<InstanceModel> 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 > 部分可以删除不用了,因为在接下来的<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类节选

public interface SomeDAO{

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

}



参考:

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

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



分享到:
评论

相关推荐

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

    总结起来,MyBatis提供了一种灵活的方式,允许开发者直接执行SQL查询和批量插入数据。在使用时,需要注意SQL字符串的编写规范,理解#{}和${}的区别,以及合理利用`&lt;foreach&gt;`标签进行批量操作。这使得MyBatis不仅...

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

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

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

    Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)

    本文将深入探讨如何在 Mybatis Plus 中自定义批量插入和批量更新,并根据唯一索引来确保数据的唯一性。 首先,了解 Mybatis Plus 的批量操作基础。Mybatis Plus 提供了 `batchInsert()` 和 `batchUpdate()` 方法来...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    在Mybatis中,批量插入可以通过SqlSession的batch()方法开启批处理模式,然后执行Mapper中的insert方法,最后调用flushStatements()来提交批处理队列。这种方式同样能减少网络通信和数据库的开销。 接下来,我们将...

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    mybatis之动态SQL

    MyBatis 是一款深受 Java 开发者喜爱的持久层框架,它允许开发者将 SQL 查询与 Java 代码直接关联,提供了一种灵活的方式来处理数据库交互。动态 SQL 是 MyBatis 的一大特色,它允许我们在运行时根据条件构建 SQL ...

    mybatispuls3.5使用批量插入

    mybatis-plus.executor-type=BATCH # 设置为 BATCH 执行器以启用批量插入 ``` 3. 创建实体类: 为要批量插入的数据创建对应的实体类,确保每个字段都有对应的getter和setter方法。例如,有一个`User`类: ```java ...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每个线程处理完自己的数据后调用`countDown()`方法,主线程通过调用`await()`方法等待所有线程完成后再执行后续操作,如提交事务。...

    mybatis执行自定义sql工具包

    3. 批量操作:支持批量插入、更新等操作,通过一次调用处理多个数据。 4. 性能优化:通过缓存预编译的SQL和参数设置,可以提高执行效率,降低数据库压力。 在实际应用中,`mybatis-helper`的使用流程大致如下: 1. ...

    mybatis自动sql生成插件源码

    在MyBatis中,拦截器用于在特定的执行点插入自定义行为,比如在SQL语句执行前或后。`AutoMapperInterceptor`实现了`org.apache.ibatis.plugin.Interceptor`接口,具备拦截执行方法的能力。它会检测到对Mapper接口的...

    基于Tk MyBatis框架,mybatis 注解方式实现数据的加解密

    MyBatis的插件系统允许开发者创建自定义插件,这些插件可以在执行SQL之前或之后进行干预。 在"mybatis-crypto-master"这个项目中,可能包含了实现数据加解密功能的MyBatis插件以及相关的配置示例。通过注解的方式,...

    mybatis 批量插入 嵌套select.pdf

    这个问题的描述是关于如何在MyBatis中正确地执行一个批量插入操作,其中一个字段的值依赖于对同一张表的SELECT查询结果。 原始的XML映射文件中的SQL插入语句尝试在FROM子句中直接更新目标表'chat_messages',这是不...

    mybatis plus 5种批量操作性能测试

    在单元测试中,通常会使用 JUnit 或 TestNG 等框架,对上述每种批量操作进行性能测试,例如计算每种操作的执行时间、检查插入数据的正确性等。这有助于评估不同批量操作在不同数据规模下的表现,为实际项目提供优化...

    MyBatis批量插入(insert)数据操作

    在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...

    mybatis数据操作(增删改查+批量操作)

    在"mybatis数据操作(增删改查+批量操作)"这个主题中,我们将深入探讨如何利用MyBatis进行基本的数据操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select),以及如何执行批量操作。...

    mybatis的oracle的批量插入优化和mybatis的generator自动生成三层文件

    本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成工具,以提高开发效率。 首先,让我们深入理解Oracle数据库中的批量插入。批量插入可以显著提升性能,尤其是在...

    mybatisr代码生成插件(中文注释,生成批量插入及修改)

    总的来说,"mybatis-generator代码生成插件(中文注释,生成批量插入及修改)"是一款强大的开发辅助工具,它通过自动化代码生成,降低了开发难度,提高了代码质量,尤其是在处理复杂数据关系和大量数据操作时,其...

    mybatis-plus_batch_insert:mybatis_plus添加批量插入

    在 Service 层或 Dao 层,你可以调用 `insertList` 方法来批量插入数据。例如: ```java @Autowired private UserMapper userMapper; public void batchInsertUsers(List&lt;User&gt; users) { userMapper.insertList...

    oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

    首先,我们看到一个关键的MyBatis XML映射文件中的`&lt;insert&gt;`标签,用于批量插入数据。这个`&lt;insert&gt;`标签内包含了一个`&lt;![CDATA[...]]&gt;`结构,这是为了防止SQL语句中的特殊字符(如 `&gt;` 和 `)被XML解析器误解析。...

Global site tag (gtag.js) - Google Analytics