一、直接执行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查询和批量插入数据。在使用时,需要注意SQL字符串的编写规范,理解#{}和${}的区别,以及合理利用`<foreach>`标签进行批量操作。这使得MyBatis不仅...
这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。下面我们将深入探讨MyBatis的SQL执行机制及相关知识点。 首先,MyBatis的核心组件是SqlSessionFactory,它是创建...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
本文将深入探讨如何在 Mybatis Plus 中自定义批量插入和批量更新,并根据唯一索引来确保数据的唯一性。 首先,了解 Mybatis Plus 的批量操作基础。Mybatis Plus 提供了 `batchInsert()` 和 `batchUpdate()` 方法来...
在Mybatis中,批量插入可以通过SqlSession的batch()方法开启批处理模式,然后执行Mapper中的insert方法,最后调用flushStatements()来提交批处理队列。这种方式同样能减少网络通信和数据库的开销。 接下来,我们将...
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
MyBatis 是一款深受 Java 开发者喜爱的持久层框架,它允许开发者将 SQL 查询与 Java 代码直接关联,提供了一种灵活的方式来处理数据库交互。动态 SQL 是 MyBatis 的一大特色,它允许我们在运行时根据条件构建 SQL ...
mybatis-plus.executor-type=BATCH # 设置为 BATCH 执行器以启用批量插入 ``` 3. 创建实体类: 为要批量插入的数据创建对应的实体类,确保每个字段都有对应的getter和setter方法。例如,有一个`User`类: ```java ...
在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每个线程处理完自己的数据后调用`countDown()`方法,主线程通过调用`await()`方法等待所有线程完成后再执行后续操作,如提交事务。...
3. 批量操作:支持批量插入、更新等操作,通过一次调用处理多个数据。 4. 性能优化:通过缓存预编译的SQL和参数设置,可以提高执行效率,降低数据库压力。 在实际应用中,`mybatis-helper`的使用流程大致如下: 1. ...
在MyBatis中,拦截器用于在特定的执行点插入自定义行为,比如在SQL语句执行前或后。`AutoMapperInterceptor`实现了`org.apache.ibatis.plugin.Interceptor`接口,具备拦截执行方法的能力。它会检测到对Mapper接口的...
MyBatis的插件系统允许开发者创建自定义插件,这些插件可以在执行SQL之前或之后进行干预。 在"mybatis-crypto-master"这个项目中,可能包含了实现数据加解密功能的MyBatis插件以及相关的配置示例。通过注解的方式,...
这个问题的描述是关于如何在MyBatis中正确地执行一个批量插入操作,其中一个字段的值依赖于对同一张表的SELECT查询结果。 原始的XML映射文件中的SQL插入语句尝试在FROM子句中直接更新目标表'chat_messages',这是不...
在单元测试中,通常会使用 JUnit 或 TestNG 等框架,对上述每种批量操作进行性能测试,例如计算每种操作的执行时间、检查插入数据的正确性等。这有助于评估不同批量操作在不同数据规模下的表现,为实际项目提供优化...
在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...
在"mybatis数据操作(增删改查+批量操作)"这个主题中,我们将深入探讨如何利用MyBatis进行基本的数据操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select),以及如何执行批量操作。...
本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成工具,以提高开发效率。 首先,让我们深入理解Oracle数据库中的批量插入。批量插入可以显著提升性能,尤其是在...
总的来说,"mybatis-generator代码生成插件(中文注释,生成批量插入及修改)"是一款强大的开发辅助工具,它通过自动化代码生成,降低了开发难度,提高了代码质量,尤其是在处理复杂数据关系和大量数据操作时,其...
在 Service 层或 Dao 层,你可以调用 `insertList` 方法来批量插入数据。例如: ```java @Autowired private UserMapper userMapper; public void batchInsertUsers(List<User> users) { userMapper.insertList...
首先,我们看到一个关键的MyBatis XML映射文件中的`<insert>`标签,用于批量插入数据。这个`<insert>`标签内包含了一个`<![CDATA[...]]>`结构,这是为了防止SQL语句中的特殊字符(如 `>` 和 `)被XML解析器误解析。...