最近一直被mybatis 注解 selectkey 所迷惑,insert后的回的key并不是在原对象中返回 而是新new 了一个对象返回,经过多次尝试 成功了 和大家分享一下
/**
* @file_name PRODUCTLISTMapper.java
* @date 2012-5-20 下午10:59:29
*/
package com.work.company.dao;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.StatementType;
import org.springframework.stereotype.Repository;
import com.work.company.entity.ProductEntry;
/**
* @author chedejun
* @Email <a href="mailto:chedejun.cn@gmail.com">chedejun.cn@gmail.com</a>
* @date 2012-5-20 下午10:59:29
*/
@Repository
interface IProductListMapper {
/**
*
*
* 添加
*
* @param PRODUCTLIST
* @return KEY
*/
@Insert("INSERT INTO PRODUCTLIST(PRODUCTNAME,IMAGEURL,DESCRIBES,CATALOGID) "
+ "VALUES(#{PRODUCT.productName},#{PRODUCT.imageUrl},"
+ "#{PRODUCT.describes},#{PRODUCT.catalogId})")
@SelectKey(before=false,keyProperty="PRODUCT.id",resultType=Integer.class,statementType=StatementType.STATEMENT,statement="SELECT LAST_INSERT_ID() AS id")
int insertProduct(final @Param("PRODUCT")ProductEntry product);
/**
*
* 删除
*
* @param id
* @return effect rows
*/
@Delete("DELETE FROM PRODUCTLIST WHERE ID=#{ID}")
int delProduct(@Param("ID") final int id);
/**
*
*
* @param productID
* @param seriesId
* @return List<PRODUCTLIST>
*/
@SelectProvider(type = ProductProvider.class, method = "getProductSql")
List<ProductEntry> selProductListById(
@Param("ID") final Integer id,
@Param("CATALOGID") final Integer catalogId);
/**
*
*
*@param PRODUCTLIST
*@return effect row
*/
@Update("UPDATE PRODUCTLIST SET PRODUCTNAME=#{PRODUCT.productName},IMAGEURL=#{PRODUCT.imageUrl}," +
"DESCRIBES=#{PRODUCT.describes},CATALOGID=#{PRODUCT.catalogId} " +
"WHERE ID=#{PRODUCT.id}")
int updateProduct(@Param("PRODUCT") final ProductEntry product);
}
测试
/**
*
*
* 添加
*
* @param productDetail
* @return KEY
*/
@Test
public void insertProductDetail(){
final CatalogEntry catalog=new CatalogEntry();
catalog.setCatalogImage("adfadsf");
catalog.setCatalogName("aaaaa");
final ProductEntry productDetail=new ProductEntry();
productListMapper.insertCatalog(catalog);
productDetail.setCatalogId(catalog.getId());
productDetailMapper.insertProduct(productDetail);
System.out.println(productDetail.getId());
}
另一种方式 官方帮助文档上基于xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.work.company.dao.ICatalogListMapper">
<insert id="insertCatalog" parameterType="com.work.company.entity.CatalogEntry">
<selectKey keyProperty="id" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID() AS id
</selectKey>
INSERT INTO CATALOGLIST(CATALOGNAME,CATALOGIMAGE)
VALUES
(#{catalogName},#{catalogImage})
</insert>
</mapper>
/**
* @file_name IProductListMapper.java
* @date 2012-5-20 下午8:27:53
*/
package com.work.company.dao;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import com.work.company.entity.CatalogEntry;
/**
* @author chedejun
* @Email <a href="mailto:chedejun.cn@gmail.com">chedejun.cn@gmail.com</a>
* @date 2012-5-20 下午8:27:53
*/
@Repository
interface ICatalogListMapper {
/**
* 获取产品系列
*
* @param id
* 系列编号
*
* @return List<ProductList>
*/
@SelectProvider(type = ProductProvider.class,method = "getCatalogSql")
List<CatalogEntry> selCatalogList(@Param("ID") final Integer id);
/**
* 添加系列
*
* @param productList
* @return key
*
*/
int insertCatalog(final CatalogEntry catalog);
//@Insert("INSERT INTO CATALOGLIST(CATALOGNAME,CATALOGIMAGE) VALUES"
// + " (#{CATALOG.catalogName},#{CATALOG.catalogImage})")
//@SelectKey(before=false,keyProperty="id",statementType=StatementType.STATEMENT, resultType = Integer.class, statement = "SELECT LAST_INSERT_ID() AS id" )
/**
* 删除系列
*
* @param id
* key
* @return 影响行数
*/
@Delete("DELETE FROM CATALOGLIST WHERE ID=#{ID}")
int delCatalog(@Param("ID") final Integer id);
/**
* 更新
*
* @param productList
* @return 影响行数
*/
@Update("UPDATE CATALOGLIST SET CATALOGNAME=#{CATALOG.catalogName},CATALOGIMAGE=#{CATALOG.catalogImage} "
+ "WHERE ID=#{CATALOG.id}")
int updateCatalog(@Param("CATALOG") final CatalogEntry catalog);
}
我错误的原因 在于 @Parm 造成的
分享到:
相关推荐
@SelectKey注解指定了生成主键的方式,并将结果放到入参数nameId中。 总结 SelectKey是Mybatis提供的一种机制,用于解决Insert数据时不支持主键自动生成的问题。通过使用SelectKey,我们可以灵活地控制主键的生成...
Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。
在Mybatis框架中,@MapKey注解是一个非常实用的功能,它允许我们将查询结果转换成一个Map对象,其中键(key)由我们指定的字段值决定,值(value)则是查询返回的完整行数据。这在处理多条记录时特别有用,尤其是在结果...
在本示例中,我们将探讨如何结合注解和配置文件使用MyBatis,包括数据库的SQL文件、方法的注解等关键部分。 首先,我们需要在项目中引入MyBatis的依赖库。通常,这可以通过在`pom.xml`或`build.gradle`文件中添加...
MyBatis 注解基本使用 MyBatis 注解是一种用于配置 MyBatis 映射关系和 SQL 操作的方式,通过在 Java 接口或方法上使用注解来代替 XML 配置,使得配置更加简洁明了。在 MyBatis 中,可以使用以下几个主要的注解来...
MyBatis使用简单的XML或注解进行配置和原始映射,可以将接口和Java的POJOs(Plain Old Java Objects,即普通的Java对象)映射为数据库中的记录。这种方式大大简化了Java应用与数据库交互的过程,提高了开发效率。 *...
完成配置后,我们就可以在实体类上使用TkMybatis提供的注解,比如@TableId和@TableName,来声明主键和映射的表名。同时,通过继承BaseMapper接口,我们可以直接使用其提供的CRUD方法,无需再手动编写对应的Service和...
- `@SelectKey`: 在插入操作后获取自增主键值,常用于MySQL的自动增长ID。 - `@ResultMap`: 引用已定义的结果映射,适用于复杂的查询结果。 5. **事务管理** - 虽然注解开发简化了SQL,但事务管理仍然需要在...
此外,MyBatis 还支持使用 `@SelectKey` 注解来执行插入语句后的自增主键获取。 5. **事务管理**:MyBatis 提供了基于编程和声明式的事务管理。在 Spring 环境下,可以使用 Spring 的事务管理器来配合 MyBatis 进行...
这里我们使用Mybatis的注解来定义SQL语句,`@Insert`用于创建临时表,`@Select`用于查询临时表中的数据。注意,临时表在会话结束时会被自动删除,所以它们只对当前连接可见。 接着,我们需要创建一个对应的实体类`...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
9. **@SelectKey**: 用于在插入操作之前或之后执行一个选择操作来获取生成的主键。这对于那些没有自动主键生成机制的数据库特别有用。 在实际开发中,MyBatis的注解使用能够极大地提高开发效率,使得代码更加简洁、...
3. 创建Mapper接口:在MyBatis中定义SQL查询,并使用@Select、@Insert等注解。 4. 缓存配置:在SpringBoot中定义Redis缓存配置,如使用RedisCacheManager,并指定缓存的key策略。 5. 使用缓存:在需要缓存的方法上...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 2. **MyBatis核心概念** - **SqlSessionFactory**: 是MyBatis的核心,...
3. **参数映射**:MyBatis提供了多种参数映射方式,包括Map参数、@Param注解的命名参数以及使用注解@SelectKey进行主键生成。 4. **结果映射**:通过`<resultMap>`标签,MyBatis可以实现复杂的数据结构映射,包括一...
- **集成案例**:演示如何在Spring MVC应用中使用MyBatis进行数据访问。 - **步骤**: 1. **设置Spring MVC配置**:配置DispatcherServlet、视图解析器等。 2. **定义Controller**:实现业务逻辑处理,并调用...
在本文中,我们将深入探讨如何在SpringBoot项目中集成并使用MyBatis框架。SpringBoot以其简化微服务开发的特性而备受青睐,而MyBatis则是一个轻量级的持久层框架,它允许开发者直接编写SQL语句,提高了数据访问的...
- **参数处理**:可以使用`@Param`注解为每个参数指定名称,也可以直接使用位置参数或Map类型。 #### 十二、列名与属性名不同时的解决方案 - **解决方案**:当数据库表的列名与Java实体类的属性名不一致时,可以...
MyBatis二级缓存是MyBatis框架中的一个重要特性,它允许我们在多个SqlSession之间共享数据,从而提高应用性能。本文将深入探讨MyBatis二级缓存的工作原理、配置方式以及如何在实际开发中有效利用。 一、MyBatis二级...
对于需要返回主键的插入操作,可以使用@SelectKey注解。其他注解如@Param用于处理传递给映射器方法的参数,@Result、@Results用于定义结果集与对象属性的映射。 处理存储过程和函数是MyBatis的另一个重要方面。...