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

mybatis 使用selectkey 注解 应用

阅读更多
最近一直被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 造成的
分享到:
评论

相关推荐

    Mybatis示例之SelectKey的应用

    @SelectKey注解指定了生成主键的方式,并将结果放到入参数nameId中。 总结 SelectKey是Mybatis提供的一种机制,用于解决Insert数据时不支持主键自动生成的问题。通过使用SelectKey,我们可以灵活地控制主键的生成...

    Mybatis中注解@MapKey的使用详解

    在Mybatis框架中,@MapKey注解是一个非常实用的功能,它允许我们将查询结果转换成一个Map对象,其中键(key)由我们指定的字段值决定,值(value)则是查询返回的完整行数据。这在处理多条记录时特别有用,尤其是在结果...

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。

    mybatis 注解+配置文件方式完整例子

    在本示例中,我们将探讨如何结合注解和配置文件使用MyBatis,包括数据库的SQL文件、方法的注解等关键部分。 首先,我们需要在项目中引入MyBatis的依赖库。通常,这可以通过在`pom.xml`或`build.gradle`文件中添加...

    MyBatis注解基本使用.pdf

    MyBatis 注解基本使用 MyBatis 注解是一种用于配置 MyBatis 映射关系和 SQL 操作的方式,通过在 Java 接口或方法上使用注解来代替 XML 配置,使得配置更加简洁明了。在 MyBatis 中,可以使用以下几个主要的注解来...

    MyBatis3.2.4完全自学手册

    MyBatis使用简单的XML或注解进行配置和原始映射,可以将接口和Java的POJOs(Plain Old Java Objects,即普通的Java对象)映射为数据库中的记录。这种方式大大简化了Java应用与数据库交互的过程,提高了开发效率。 *...

    tkmybatis.rar

    完成配置后,我们就可以在实体类上使用TkMybatis提供的注解,比如@TableId和@TableName,来声明主键和映射的表名。同时,通过继承BaseMapper接口,我们可以直接使用其提供的CRUD方法,无需再手动编写对应的Service和...

    MyBatis的注解开发-资料.rar

    - `@SelectKey`: 在插入操作后获取自增主键值,常用于MySQL的自动增长ID。 - `@ResultMap`: 引用已定义的结果映射,适用于复杂的查询结果。 5. **事务管理** - 虽然注解开发简化了SQL,但事务管理仍然需要在...

    中文版mybatis3.2.3开发文档

    此外,MyBatis 还支持使用 `@SelectKey` 注解来执行插入语句后的自增主键获取。 5. **事务管理**:MyBatis 提供了基于编程和声明式的事务管理。在 Spring 环境下,可以使用 Spring 的事务管理器来配合 MyBatis 进行...

    SpringBoot 整合Mybatis 创建临时表

    这里我们使用Mybatis的注解来定义SQL语句,`@Insert`用于创建临时表,`@Select`用于查询临时表中的数据。注意,临时表在会话结束时会被自动删除,所以它们只对当前连接可见。 接着,我们需要创建一个对应的实体类`...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    MyBatis动态条件通用查询

    在实际应用中,`testIbatis`这个文件可能包含了示例代码或者测试用例,用于演示如何使用MyBatis的动态条件通用查询功能。通过分析这个文件,我们可以更深入地理解上述概念,并学习如何在自己的项目中实现类似的功能...

    mybatis-annotations.zip

    9. **@SelectKey**: 用于在插入操作之前或之后执行一个选择操作来获取生成的主键。这对于那些没有自动主键生成机制的数据库特别有用。 在实际开发中,MyBatis的注解使用能够极大地提高开发效率,使得代码更加简洁、...

    MyBatis+SpringBoot+Redis

    3. 创建Mapper接口:在MyBatis中定义SQL查询,并使用@Select、@Insert等注解。 4. 缓存配置:在SpringBoot中定义Redis缓存配置,如使用RedisCacheManager,并指定缓存的key策略。 5. 使用缓存:在需要缓存的方法上...

    MyBatis3 教程 中文完整版

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 2. **MyBatis核心概念** - **SqlSessionFactory**: 是MyBatis的核心,...

    MyBatis中文文档

    3. **参数映射**:MyBatis提供了多种参数映射方式,包括Map参数、@Param注解的命名参数以及使用注解@SelectKey进行主键生成。 4. **结果映射**:通过`&lt;resultMap&gt;`标签,MyBatis可以实现复杂的数据结构映射,包括一...

    mybatis 使用教程

    - **集成案例**:演示如何在Spring MVC应用中使用MyBatis进行数据访问。 - **步骤**: 1. **设置Spring MVC配置**:配置DispatcherServlet、视图解析器等。 2. **定义Controller**:实现业务逻辑处理,并调用...

    SpringBoot使用MybatisDemo.zip

    在本文中,我们将深入探讨如何在SpringBoot项目中集成并使用MyBatis框架。SpringBoot以其简化微服务开发的特性而备受青睐,而MyBatis则是一个轻量级的持久层框架,它允许开发者直接编写SQL语句,提高了数据访问的...

    mybatis笔记

    - **参数处理**:可以使用`@Param`注解为每个参数指定名称,也可以直接使用位置参数或Map类型。 #### 十二、列名与属性名不同时的解决方案 - **解决方案**:当数据库表的列名与Java实体类的属性名不一致时,可以...

    mybatis二级缓存学习

    MyBatis二级缓存是MyBatis框架中的一个重要特性,它允许我们在多个SqlSession之间共享数据,从而提高应用性能。本文将深入探讨MyBatis二级缓存的工作原理、配置方式以及如何在实际开发中有效利用。 一、MyBatis二级...

Global site tag (gtag.js) - Google Analytics