设为首页 收藏本站
查看: 1385|回复: 0

[经验分享] 基于Mybatis封装的增删改查实现通用自动化sql

[复制链接]

尚未签到

发表于 2016-11-28 07:51:08 | 显示全部楼层 |阅读模式
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;
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306344-1-1.html 上篇帖子: MyBatis学习 之 三、SQL语句映射文件-增删改查、参数、缓存 下篇帖子: SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表