Mybatis3插入语句映射

本文详细介绍了在MyBatis中进行插入操作的方法,包括基本的插入语句配置、使用自增主键以及如何实现自定义主键生成策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用:http://thoughtfly.iteye.com/blog/1487641

模版示例
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5. <mapper namespace="XXX">  
  6.   
  7.     <insert id="insert" parameterType="XXX  
  8.         flushCache="true" statementType="PREPARED" timeout="20000">  
  9.         insert into user (id,name,mark)  
  10.         values (#{id},#{name},#{mark})  
  11.     </insert>  
  12.   
  13. </mapper>  

 如果使用的是像Mysql一样的可自动递增主键的数据库,还可以更改成ID自动插入
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="XXX">  
  5.   
  6.     <insert id="insert" parameterType="XXX"  
  7.         useGeneratedKeys="true" keyProperty="id" flushCache="true" statementType="PREPARED"  timeout="20000">  
  8.         insert into user (name,mark)  
  9.         values (#{name},#{mark})  
  10.     </insert>  
  11.   
  12.       
  13. </mapper>  
 
如果没有自递增,也可以使用selectKey自定义一个自递增方法
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="XXX">  
  5.       
  6.     <insert id="insertAuthor" parameterType="domain.blog.Author">  
  7.         <selectKey keyProperty="id" resultType="int" order="BEFORE">  
  8.             select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1  
  9.         </selectKey>  
  10.         insert into Author  
  11.         (id, username, password, email,bio, favourite_section)  
  12.         values  
  13.         (#{id}, #{username}, #{password}, #{email}, #{bio},  
  14.         #{favouriteSection,jdbcType=VARCHAR}  
  15.         )  
  16.     </insert>  
  17.   
  18. </mapper>  
 
属性解释

  • id  在命名空间中唯一的标识符,可以被用来引用这条语句。 
  • parameterType  将会传入这条语句的参数类的完全限定名或别名。 
  • parameterMap  这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数映射和 parameterType 属性。 ()
  • flushCache  将其设置为 true,不论语句什么时候被用,都会导致缓存被清空。默认值:false。 
  • timeout   这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)。 
  • statementType  STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement,PreparedStatement 或 CallableStatement。默认值:PREPARED。 
  • useGeneratedKeys  (仅对 insert 有 用) 这 会告 诉 MyBatis 使用 JDBC 的getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。 
  • keyProperty  (仅对insert有用) 标记一个属性, MyBatis会通过getGeneratedKeys或者通过 insert 语句的selectKey 子元素设置它的值。默认:不设置。

Mybatis 的批量插入通常涉及到将数组或集合中的数据映射到数据库表的字段上。当你有一个 Map 数组,并且这个 Map 对象代表了一条记录的各个字段及其对应的值,你可以通过以下步骤获取字段值并插入到数据库: 1. 首先,你需要创建一个 Java 类(实体类),它包含所有需要插入的数据字段。 ```java public class Record { private String field1; private String field2; // 其他字段... } ``` 2. 然后,在 Map 中,键通常是字段名,值是对应的字段值。例如: ```java Map<String, Object>[] recordMaps = new Map[]{ { "field1", "value1", "field2", "value2" }, // 第一条记录 { "field1", "value3", "field2", "value4" } // 第二条记录 }; ``` 3. 使用 Mybatis 的 `insertList` 或 `batchInsert` 方法,结合动态 SQL 来处理这些 Maps。假设你已经配置了相应的 Mapper 接口和 XML 映射文件: ```java // Mapper接口 @Mapper public interface RecordMapper { void batchInsert(@Param("records") List<Map<String, Object>> records); } // XML 映射文件(insert.xml) <insert id="batchInsert"> INSERT INTO your_table (field1, field2) VALUES <foreach item="record" collection="records" separator=","> (?, ?) </foreach> </insert> ``` 4. 调用方法时,传递整个数组给 `batchInsert` 方法: ```java List<Map<String, Object>> records = Arrays.asList(recordMaps); recordMapper.batchInsert(records); ``` 在这个过程中,每个 Map 对应一行数据,`?` 标记会自动用 Map 中的值替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值