`
mengqingyu
  • 浏览: 333087 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

基于Mybatis封装的增删改查实现通用自动化sql

dao 
阅读更多
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除

<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.DynamicSqlSessionTemplate">
	<property name="dataSource" ref="dataSource" />
	<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
	<property name="convertNameProcessor"><bean class="com.mqy.mybatis.convert.DefaultConvertName"/></property><!-- 驼峰转下划线 -->
	<!--<property name="splitSign" value="," /> --> <!--批量操作的分隔符 选配--> 
	<!--<property name="annotationProcessor" ref="annotationProcessorTest"/>-->  <!--自定义注解实现策略 选配--> 
</bean>
<!-- 定义MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="plugins">
		<array>
			<bean class="cn.com.framework.orm.mybatis.interceptor.PagingInterceptor">
				<property name="dialect">
					<bean class="cn.com.framework.orm.mybatis.dialect.PostgreSQL81Dialect" />
				</property>
			</bean>
		</array>
	</property>
	<property name="mapperLocations">
		<list>
			<value>classpath*:com/mqy/mybatis/EasyMapper.xml</value>
		</list>
	</property>
</bean>

package com.fw.mybatis;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.fw.mybatis.constant.JdbcConstants;
import com.fw.mybatis.support.DynamicSqlSessionTemplate;
import com.fw.web.core.acl.model.User;
import com.fw.web.core.base.util.WebContextUtils;


/**
 * 功能:</b>通用增删改测试类<br>
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-core.xml", "classpath:applicationContext-datasource.xml"})
@Transactional
@TransactionConfiguration(transactionManager = "transactionAdvice", defaultRollback = false)
public class JdbcManageUtilTest{
	
	private final static Logger logger = LoggerFactory.getLogger(JdbcManageUtilTest.class);
	
	@Autowired
	private ApplicationContext ctx;
	
	DynamicSqlSessionTemplate dynamicSqlSessionTemplate;
	
	@Before
	public void init(){
		logger.debug("模块初始化开始...");
//		String[] xmlCfg = new String[] { "classpath:applicationContext-core.xml", "classpath:applicationContext-datasource.xml"};
//		WebContextUtils.setAc(new ClassPathXmlApplicationContext(xmlCfg));
		WebContextUtils.setAc(ctx);
		dynamicSqlSessionTemplate = (DynamicSqlSessionTemplate)WebContextUtils.getAc().getBean("dynamicSqlSessionTemplate");
	}
	
	/**
	 * <b>功能描述:</b>map插入单条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testInsertMap(){
		Map<String, Object> pojoMap = new HashMap<>();
		pojoMap.put(JdbcConstants.TABLE_NAME, "acl_user");
		pojoMap.put("id", Math.round(Math.random() * 1000)+"");
		pojoMap.put(JdbcConstants.KEY, "id");//如果列名称是id可以不加入此行代码
		pojoMap.put("username", "abc");
		dynamicSqlSessionTemplate.insert(pojoMap);
	}
	
	/**
	 * <b>功能描述:</b>bean插入单条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testInsertBean(){
		User User = new User();
		User.setId(Math.round(Math.random() * 1000)+"");
		User.setUsername("222");
		dynamicSqlSessionTemplate.insert(User);
	}
	
	/**
	 * <b>功能描述:</b>批量map或bean插入多条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testInsertBatch(){
		List<Object> pojoList = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			Map<String, Object> pojoMap = new HashMap<>();
			pojoMap.put(JdbcConstants.TABLE_NAME, "acl_user");
			pojoMap.put("id", Math.round(Math.random() * 1000));
			pojoMap.put(JdbcConstants.KEY, "id");
			pojoMap.put("abc", 333);
			pojoList.add(pojoMap);
		}
		dynamicSqlSessionTemplate.insertBatch(pojoList);
		pojoList = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			User user = new User();
			user.setId(Math.round(Math.random() * 1000)+"");
			user.setUsername("abc");
			pojoList.add(user);
		}
		dynamicSqlSessionTemplate.insertBatch(pojoList);
	}
	
	/**
	 * <b>功能描述:</b>map修改单条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testUpdateMap(){
		Map<String, Object> params = new HashMap<>();
		params.put("username", "111");
		List<Map<String, Object>> paramList = dynamicSqlSessionTemplate.select("framework.selectMap", params);
		for(Map<String, Object> pojoMap:paramList){
			params.put(JdbcConstants.TABLE_NAME, "acl_user");
			params.put(JdbcConstants.ID, pojoMap.get(JdbcConstants.ID));
			dynamicSqlSessionTemplate.update(params);
		}
	}
	
	/**
	 * <b>功能描述:</b>bean修改单条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testUpdateBean(){
		User User = new User();
		User.setUsername("111");
		List<User> UserList = dynamicSqlSessionTemplate.select("framework.selectBean", User);
		for(User test:UserList){
			test.setUsername("abc");
			dynamicSqlSessionTemplate.update(test);
		}
	}
	
	/**
	 * <b>功能描述:</b>map删除单条或多条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testDeleteMap(){
		Map<String, Object> params = new HashMap<>();
		params.put("username", "333");
		String value = "";
		List<Map<String, Object>> paramList = dynamicSqlSessionTemplate.select("framework.selectMap", params);
		for(Map<String, Object> pojoMap:paramList){
			params.put(JdbcConstants.TABLE_NAME, "acl_user");
			value = value + "," + pojoMap.get(JdbcConstants.ID);
		}
		params.remove("username");
		params.put(JdbcConstants.TABLE_NAME, "acl_user");
		params.put(JdbcConstants.ID, value.replaceFirst(",", ""));
		dynamicSqlSessionTemplate.delete(params);
	}
	
	/**
	 * <b>功能描述:</b>map查询单条或多条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testSelectMap(){
		Map<String, Object> params = new HashMap<>();
		params.put("username", "111");
		List<Map<String, Object>> paramList = dynamicSqlSessionTemplate.select("framework.selectMap", params);
		for(Map<String, Object> pojoMap:paramList){
			System.out.println("testSelectMap:"+pojoMap);
		}
	}
	
	/**
	 * <b>功能描述:</b>bean查询单条记录<br>
	 * 20140826&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;创建方法</li>
	 */
	@Test
	public void testSelectBean(){
		User user = new User();
		user.setUsername("abc");
		List<User> UserList = dynamicSqlSessionTemplate.select("framework.selectBean", user);
		for(User u:UserList){
			System.out.println("testSelectBean:"+u.getUsername());
		}
	}
	
	@Test
	public void testSelectOne(){
		User bbiTest = dynamicSqlSessionTemplate.load(User.class, "174");
		System.out.println(bbiTest);
	}
}

package com.fw.web.core.acl.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;

import com.mqy.mybatis.annotation.Generate;
import com.mqy.mybatis.annotation.NotRepeat;
import com.fw.mybatis.constant.GenerateType;

/**
 * 基于EasyMybatis的javaBean支持注解
 */
@Table(name="acl_user")
public class User implements Serializable{

	private static final long serialVersionUID = 5044173991416581564L;

	@Id 
	@Generate(type=GenerateType.AUTO,lenght=2) //主键生成策略,括号中内容可不写
	@Column(name="id")//可选
	private String id;

	@NotRepeat //验证重复
	private String username;
	
    private Date createTime;
    
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
}

package com.fw.mybatis;

import java.util.Map;

import com.mqy.mybatis.annotation.AnnotationProcessor;
import com.mqy.mybatis.annotation.bean.GenerateObject;
import com.mqy.mybatis.annotation.bean.NotRepeatObject;
import com.fw.mybatis.constant.GenerateType;


/**
 * 功能:主键列生成策略、列重复判断实现类
 */
public class AnnotationProcessorTest implements AnnotationProcessor {
	
	@Override
	public Object generate(GenerateObject generate) {
		Object obj = null;
		if(GenerateType.AUTO.equals(generate.getType())) {
			
		} else if (GenerateType.CHECK.equals(generate.getType())) {
			
		} else if (GenerateType.CHECK_PARAMS.equals(generate.getType())) { 
			
		} else if (GenerateType.PREFIX.equals(generate.getType())) {
			
		} 
		return obj;
	}

	/**
     * <b>功能描述:</b>校验名称是否重复<br>
     * @param {String} tableName 表名称
	 * @param {String} ckeckColumeName 校验列
	 * @param {String} ckeckColumeValue 校验列值
	 * @param {String} queryColumeName 筛选列
	 * @param {Object} queryColumeValue 筛选列值
     * @return 响应结果
     */
	@Override
	public RuntimeException notRepeat(NotRepeatObject notRepeat) {
		Map<String, Object> params = new HashMap<>();
		String value = notRepeat.getColumnValue().toString();
		params.put("tableName", notRepeat.getTableName());
		params.put("ckeckColumeName", notRepeat.getColumnName());
		params.put("ckeckColumeValue", value);
		if("".equals(value)) {//为空时不做重复效验
			return null;
		}
		List<Map<String, Object>> resultList = commonMapper.checkRepeatName(params);
		if(resultList!=null&&(!resultList.isEmpty())){
			Map<String, Object> resultMap = resultList.get(0);
			Object delflg = resultMap.get("delflg");
			if(notRepeat.getId()==null) {//新建
				if(delflg!=null) {
					if(Archive.DELFLG_RECYCLE==Integer.parseInt(delflg.toString())){//回收站判断重复
						return new ModelValidateException(String.format("代码与回收站中档案[%s]重复", value));
					} 
				}
				return new ModelValidateException(String.format("代码与现有档案[%s]重复", value));
			} else {//修改
				Object id = resultMap.get(notRepeat.getKey());
				if(id!=null&&(!id.toString().equals(notRepeat.getId().toString()))) {
					if(delflg!=null) {
						if(Archive.DELFLG_RECYCLE==Integer.parseInt(delflg.toString())){//回收站判断重复
							return new ModelValidateException(String.format("代码与回收站中档案[%s]重复", value));
						} 
					}
					return new ModelValidateException(String.format("代码与现有档案[%s]重复", value));
				}
			}
		}
		return null;
	}

}

分享到:
评论

相关推荐

    springboot+mybatis封装第二版

    1. **通用Mapper**:创建一个基类Mapper,包含增删改查的通用方法,子类只需继承这个基类即可,无需重复编写相似的SQL语句。 2. **注解增强**:利用MyBatis的注解进行SQL动态拼接,使得SQL的编写更灵活,同时减少...

    springMVC+Mybatis无缝对接封装好的直接对数据库表进行增删改查等等

    标题中提到的 "springMVC+Mybatis无缝对接封装好的直接对数据库表进行增删改查等等",意味着有一个已经预先封装好的解决方案,使得开发者无需在 Mybatis 的 XML 映射文件或者 Service 层编写过多的代码,就能直接在 ...

    轻量级封装jdbc 实现增删改查

    1. 数据源管理:封装类可以负责初始化和管理数据源,例如使用Apache的DBCP或C3P0等连接池,避免手动创建和关闭数据库连接。 2. SQL执行:提供方便的方法来执行SQL查询、更新、插入和删除操作,可能支持预编译的...

    mybatis通用mapper

    BaseMapper是通用Mapper提供的核心接口,包含了一套完整的增删改查方法。例如:`insert`, `selectOne`, `updateById`, `deleteById` 等。开发者只需要在自己的Mapper接口中继承BaseMapper,并指定对应的实体类,...

    Mybatis plus无介绍快使用,CRUD增删改查基本使用附源码(一)

    总结,Mybatis Plus通过提供便捷的API和自动化处理,极大地简化了基于Mybatis的数据库操作。从快速入门到CRUD操作,再到源码学习,Mybatis Plus都是提高开发效率的好帮手。在实际项目中,结合使用Mybatis Plus和...

    zxText:使用 SpringBoot + Thymeleaf + MySQL + MyBatis 实现简单的增删改查以及条件分页查询

    在本项目"zxText"中,开发者利用SpringBoot框架、Thymeleaf模板引擎、MySQL数据库和MyBatis持久层框架构建了一个基础的Web应用,实现了数据的增删改查(CRUD)功能,并加入了条件分页查询。下面将详细阐述这些技术...

    springboot整合mybatis

    本项目标题为“springboot整合mybatis”,描述中提到实现了MySQL数据库的简单增删改查操作,并对MyBatis的CRUD和分页功能进行了封装。以下是对这些知识点的详细解释: 1. **SpringBoot**:SpringBoot是由Pivotal...

    MyBatis-Plus代码

    1. **自动CRUD操作**:MyBatis-Plus提供了一套简单的API,通过实体类和表的映射关系,可以实现自动化的增删改查操作。例如,通过`insert()`、`updateById()`、`deleteById()`和`selectById()`等方法,开发者无需编写...

    mybatis-plus源码

    2. **BaseService**:基础Service接口,包含了基本的增删改查操作,这些操作由BaseMapper驱动执行。 3. **SqlSessionTemplate**:对MyBatis的SqlSession进行了封装,提供了更安全的线程安全操作。 4. **QueryWrapper...

    springmybatis

    mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之...

    自动生成MyBatis的实体类、实体映射XML文件

    在"Mapper"部分,Mapper接口是MyBatis的核心组件之一,它封装了数据库操作逻辑,比如增删改查。通过实现这些接口,开发者可以专注于业务逻辑,而不必关心SQL的具体实现。Mapper接口通常与XML映射文件配合使用,通过...

    elasticsearch+Mybatis+Aop

    3. **编写工具类**:为了方便操作,可以封装一个Elasticsearch工具类,这个类中包含执行ES查询、索引创建、文档增删改查等常用方法。 4. **AOP切面**:定义一个AOP切面,该切面会在Mapper接口的方法执行后被触发,...

    mybatis plus 模板文件

    MyBatis Plus(简称MP)是MyBatis的扩展工具,它在MyBatis的基础上简化了开发工作,提供了丰富的 CRUD 操作以及通用的增删改查接口,使得开发者无需手动编写大量的SQL语句,极大地提高了开发效率。这个压缩包文件...

    mybatis-plus-advance插件

    1. **自动化CRUD**:提供了基于注解的快速创建增删改查方法,只需在实体类上添加相应的注解,即可自动生成对应的Mapper接口和XML配置文件。 2. **条件构造器**:通过`QueryWrapper`和`UpdateWrapper`等工具类,可以...

    mybatisPlus项目代码自动生成.zip

    MyBatisPlus提供了便捷的CRUD方法,开发者无需编写过多的SQL,只需通过注解或XML配置,就可以实现数据的增删改查。例如,通过`insert()`、`deleteById()`、`updateById()`和`selectById()`等方法,可以快速实现对应...

    mybatis-generator.zip

    通用Mapper则是在MyBatis基础上进一步封装,提供了诸如增删改查、分页、排序等基本操作的通用方法。只需在自己的Mapper接口上添加通用Mapper的注解,就能使用这些方法。此外,通用Mapper还支持自定义方法,可以通过...

    代码生成器,自动生成Mapper,Controller,service文件

    代码生成器可以根据数据库表结构自动生成对应的Mapper接口和XML配置文件,包含增删查改(INSERT、DELETE、SELECT、UPDATE)等方法,使得开发者无需手动编写这些基础代码。 2. Controller文件:Controller是Spring ...

    MyBatis-Plus技术文档.pdf

    - **Mapper**:负责定义SQL映射关系,实现数据的增删改查等操作。 - **Service**:封装业务逻辑,调用Mapper层提供的方法。 - **Controller**:处理HTTP请求,返回相应的响应结果。 #### 四、入门案例 **4.1 开发...

    基于ssm+vue个人网站的设计与实现.zip

    Spring的IoC容器管理着所有的业务逻辑和服务,通过SpringMVC接收前端请求,调用相应的服务方法,再通过MyBatis执行数据库操作,实现数据的增删改查。这样的架构设计保证了代码的清晰性和可维护性。 其次,Vue.js是...

    Java封装ibatis操作数据库.rar

    这些接口定义了操作数据库的方法,例如增删改查。然后,使用MyBatis的Mapper注解或Mapper XML文件来实现这些方法,将SQL语句绑定到接口方法上。这样,业务层只需调用DAO接口,无需关心SQL的具体执行细节。 在具体的...

Global site tag (gtag.js) - Google Analytics