一、直接执行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查询以及如何进行数据的批量插入。 **一、直接执行SQL查询** 在MyBatis中,你可以通过Mapper接口和XML配置文件来直接执行自定义的SQL查询。下面是一个简单的...
这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。下面我们将深入探讨MyBatis的SQL执行机制及相关知识点。 首先,MyBatis的核心组件是SqlSessionFactory,它是创建...
例如,使用`<batch>`标签可以批量插入数据。 7. **JDBC的封装**:MyBatis在JDBC的基础上进行了抽象和封装,降低了直接操作JDBC的复杂性,如自动管理连接、事务等。同时,MyBatis允许开发者直接写SQL,保留了SQL的...
8. **性能优化**:提供了一些最佳实践和技巧,如批量插入、预编译SQL、使用PreparedStatement等,以提升Mybatis在大数据量操作时的效率。 通过阅读这些外文文献和翻译,学习者不仅可以深入理解Mybatis框架的工作...
- 合理使用Executor执行策略,如批量插入时使用BatchExecutor。 - 充分利用动态SQL,避免硬编码SQL语句。 - 注意缓存管理,防止数据不一致。 总的来说,"MyBatis3_开发手册"是一个全面的指南,涵盖了MyBatis3的...
在实际应用中,可以通过创建一个导入服务,利用Mybatis-Plus的批量插入API来实现高效的数据导入。需要注意的是,在处理大批量数据时,应合理设置批处理的大小,避免因内存压力过大导致性能问题。 使用Mybatis-Plus-...
MyBatis 提供了一种声明式的方式,允许开发者通过 XML 或注解的方式来配置 SQL 语句,同时它还提供了对象与 SQL 查询之间的映射机制,使得 SQL 查询结果可以直接转换为 Java 对象,极大地提高了开发效率。...
4. 批量操作:BatchExecutor适用于批量插入、更新和删除操作,提高性能。 六、进阶话题 1. 映射器工厂:理解SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession之间的关系,以及如何通过它们创建和管理映射...
- 支持定制化的 SQL 语句、存储过程及高级映射功能。 - 大幅度减少了 JDBC 代码和手动参数设置以及结果集获取的工作。 - 可以使用简单的 XML 或注解进行配置与原始映射,实现接口与 Java POJOs 的数据库记录映射...
9、Mybatis 如何执行批量插入? 可以通过 `<insert>` 标签的 `useGeneratedKeys` 和 `keyProperty` 属性配合 `<selectKey>` 标签来实现自增主键的获取,然后进行批量插入操作。 10、获取自动生成的键值: 使用 `...
5. **扩展功能**:虽然MyBatis Generator的官方版本功能相对基础,但社区已开发了多种扩展插件,如支持分页查询、批量插入等功能。这些插件可以直接集成到你的项目中,以满足更复杂的业务需求。 6. **持续集成**:...
4. **批量操作**:支持批量插入、批量更新、批量删除,使得数据操作更加高效。 5. **分页查询**:内置了Page对象,支持物理分页和逻辑分页,可以方便地进行复杂的分页查询。 6. **自定义全局配置**:MybatisPlus...
11. **批量插入的执行**:可以通过编写特殊的 SQL 语句来实现批量插入。 12. **获取自动生成的主键值**:可以通过配置 keyProperty 属性和 useGeneratedKeys 属性为 true 来获取自动生成的主键值。 13. **传递多个...
9. **批量插入**:使用`<insert>`标签的`useGeneratedKeys="true"`和`keyProperty`属性,配合`<foreach>`标签实现。 10. **获取自动生成的键值**:通过`useGeneratedKeys="true"`和`keyProperty`属性,可以在插入后...
批处理是提高性能的一种有效手段,尤其在批量插入、更新大量数据时。IBATIS支持通过一次调用执行多个SQL语句,从而减少网络开销。 #### 11. 动态SQL 动态SQL是IBATIS的一个强大特性,允许在运行时动态生成SQL语句...
SqlSession是执行数据库操作的对象,而Executor是执行SQL的引擎,分为简单执行器、复用执行器和批量执行器,分别对应不同的数据库操作场景。在"simple-mapper.zip"中,虽然这些概念可能没有直接体现,但理解它们有助...
- **SqlMapClient**: 是iBatis的主要接口,负责执行SQL语句并处理结果集。 - **Statement**: 包括SQL映射文件(SqlMap)和SQL语句(MappedStatement),定义了SQL的执行方式及参数绑定。 - **Executor**: 执行器...
12. **批量插入方法**: - 可以使用foreach标签。 13. **获取自动生成的主键值**: - 可以通过useGeneratedKeys属性。 14. **传递多个参数**: - 可以使用@Param注解或Map。 15. **Mybatis动态SQL**: - 根据不同...
ORM 技术允许开发者使用面向对象的编程语言来操作数据库,而无需直接编写 SQL 查询,从而提高了代码的可读性和可维护性。在这个深度解析中,我们将探讨 `asante-bundler` 的核心概念、功能以及如何在实际项目中应用...