浏览代码

优化INPUT主键策略InsertOrUpdate

jobob 8 年之前
父节点
当前提交
d6b2961663

+ 13 - 13
README.md

@@ -5,13 +5,13 @@
 
 > 为简化开发工作、提高生产率而生
 
-# 简介
+# 简介 | Intro
 
 Mybatis 增强工具包 - 只做增强不做改变,简化`CRUD`操作
 
 > 技术讨论 QQ 群 492238239[(有钱的捧个钱场【点击捐赠】, 没钱的捧个人场)](http://git.oschina.net/uploads/images/2015/1222/211207_0acab44e_12260.png)
 
-# 优点
+# 优点 | Advantages
 
 - **纯正血统**:完全继承原生 `Mybatis` 的所有特性
 - **最少依赖**:仅仅依赖`Mybatis`以及`Mybatis-Spring`
@@ -26,21 +26,21 @@ Mybatis 增强工具包 - 只做增强不做改变,简化`CRUD`操作
 - **全局拦截**:提供全表`delete`、`update`操作智能分析阻断
 - **避免Sql注入**:内置Sql注入内容剥离器,预防Sql注入攻击
 
-# 文档
+# 文档 | Documentation
 
 [中文](http://mp.baomidou.com/) | [English](http://mp.baomidou.com/en/)
 
-# 原理
+# 原理 | Principle
 
 [Mybatis-Plus 实践及架构原理](http://git.oschina.net/baomidou/mybatis-plus/attach_files)
 
-# 应用实例
+# 应用实例 | Demo
 
 [Spring-MVC](http://git.oschina.net/juapk/SpringWind)
 
 [Spring-Boot](https://git.oschina.net/baomidou/mybatisplus-spring-boot)
 
-# 下载地址
+# 下载地址 | Download
 
 [点此去下载](http://mvnrepository.com/artifact/com.baomidou/mybatis-plus)
 
@@ -52,29 +52,29 @@ Mybatis 增强工具包 - 只做增强不做改变,简化`CRUD`操作
 </dependency>
 ```
 
-# 结构目录
+# 结构目录 | Architecture
 
 ![项目结构说明](http://git.oschina.net/uploads/images/2016/0821/161516_58956b85_12260.png "项目结构说明")
 
-# 其他开源项目
+# 其他开源项目 | Other Project
 
 - [基于Cookie的SSO中间件 Kisso](http://git.oschina.net/baomidou/kisso)
 - [Java快速开发框架 SpringWind](http://git.oschina.net/juapk/SpringWind)
 
-# Futures
+# 期望 | Futures
 
 > 欢迎提出更好的意见,帮助完善 Mybatis-Plus
 
-# License
+# 版权 | License
 
 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-# 捐赠
+# 捐赠 | Donate
 
 > [捐赠记录,感谢你们的支持!](http://git.oschina.net/baomidou/kisso/wikis/%E6%8D%90%E8%B5%A0%E8%AE%B0%E5%BD%95)
 
 ![捐赠 mybatis-plus](http://git.oschina.net/uploads/images/2015/1222/211207_0acab44e_12260.png "支持一下mybatis-plus")
 
-# 关注我
+# 关注我 | About Me
 
-![程序员日记](http://git.oschina.net/uploads/images/2016/0121/093728_1bc1658f_12260.png "程序员日记")
+![程序员日记](http://git.oschina.net/uploads/images/2016/0121/093728_1bc1658f_12260.png "程序员日记")

+ 11 - 11
mybatis-plus/src/main/java/com/baomidou/framework/service/IService.java

@@ -232,6 +232,17 @@ public interface IService<T, PK> {
 	 */
 	T selectOne(T entity);
 
+	/**
+	 * <p>
+	 * 根据 EntityWrapper,查询一条记录
+	 * </p>
+	 *
+	 * @param entityWrapper
+	 *            实体对象
+	 * @return T
+	 */
+	T selectOne(EntityWrapper<T> entityWrapper);
+
 	/**
 	 * <p>
 	 * 根据 entity 条件,查询总记录数
@@ -265,17 +276,6 @@ public interface IService<T, PK> {
 	 */
 	List<T> selectList(EntityWrapper<T> entityWrapper);
 
-	/**
-	 * <p>
-	 * 根据 EntityWrapper,查询一条记录
-	 * </p>
-	 *
-	 * @param entityWrapper
-	 *            实体对象
-	 * @return T
-	 */
-	T selectOne(EntityWrapper<T> entityWrapper);
-
 	/**
 	 * <p>
 	 * 翻页查询

+ 18 - 6
mybatis-plus/src/main/java/com/baomidou/framework/service/impl/ServiceImpl.java

@@ -15,7 +15,15 @@
  */
 package com.baomidou.framework.service.impl;
 
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.framework.service.IService;
+import com.baomidou.mybatisplus.annotations.IdType;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -24,12 +32,6 @@ import com.baomidou.mybatisplus.toolkit.CollectionUtil;
 import com.baomidou.mybatisplus.toolkit.ReflectionKit;
 import com.baomidou.mybatisplus.toolkit.TableInfo;
 import com.baomidou.mybatisplus.toolkit.TableInfoHelper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -66,6 +68,7 @@ public class ServiceImpl<M extends BaseMapper<T, PK>, T, PK extends Serializable
 	 *            true 选择字段 false 不选择字段
 	 * @return boolean
 	 */
+	@SuppressWarnings("unchecked")
 	@Transactional(rollbackFor = Exception.class)
 	public boolean insertOrUpdate(T entity, boolean isSelective) {
 		if (null != entity) {
@@ -76,6 +79,15 @@ public class ServiceImpl<M extends BaseMapper<T, PK>, T, PK extends Serializable
 				if (null == idVal || "".equals(idVal)) {
 					return isSelective ? insertSelective(entity) : insert(entity);
 				} else {
+					/* 特殊处理 INPUT 主键策略逻辑 */
+					if (IdType.INPUT == tableInfo.getIdType()) {
+						T entityValue = selectById((PK) idVal);
+						if (null != entityValue) {
+							return isSelective ? updateSelectiveById(entity) : updateById(entity);
+						} else {
+							return isSelective ? insertSelective(entity) : insert(entity);
+						}
+					}
 					return isSelective ? updateSelectiveById(entity) : updateById(entity);
 				}
 			} else {