- 浏览: 333087 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
xing0029:
这样配置的话 事物不成功啊 还有什么地方需要注意的么 可以加我 ...
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
mengqingyu:
liuxiaolu 写道jotm的我的没有成功,楼主能否帮助一 ...
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
liuxiaolu:
jotm的我的没有成功,楼主能否帮助一下
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) -
aptech406328627:
求解救,没弄好QQ:1053942353
Spring邮件发送(可带附件,模板,群发,异步发送等功能) -
ghpaas:
web可视化自定义表单推荐使用GForms开发平台(http: ...
在线表单设计器设计原理
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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 | | 创建方法</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; } }
- mybatis-easy-v1.0.6.jar (32.2 KB)
- 下载次数: 8
发表评论
-
S2SH读取XML扩展点
2014-07-27 01:39 725由于struts2、hibernate通过默认配置文件不支持通 ... -
导出Word、Excel、PPT通用功能设计思路
2014-03-07 16:25 1845工作中经常 ... -
HttpClient抓取解析网站支持多种验证方式
2014-03-06 10:10 1431工作中遇到了抓取多个项目数据并且有多种验证方式包括Http标准 ... -
Tomcat架构分析及性能调优
2014-02-16 17:59 3223一.Tomcat容器层级结构 分为四个等级,由四个子容器组成 ... -
基于FLEX,MINA消息推送核心代码
2013-10-21 16:15 1727import java.util.List; impor ... -
(转载)拦截器与过滤器的区别
2013-05-10 15:36 1034拦截器与过滤器的区别 : 1.拦截器是基于java的反射机制 ... -
(转载)Struts中默认的拦截器栈
2013-05-10 13:19 5078Struts中默认的拦截器栈 ... -
Java并发模式
2013-04-02 12:58 2274在公司做培训时用到,顺便在这里做个总结。 1.生产者消费者模式 ... -
海量数据、高并发优化方案
2013-03-16 18:53 8546一.应用服务器负载均衡 1.链路负载均衡 通过DNS解析域 ... -
Lucene 详解
2013-03-01 11:10 15381.什么是全文检索 对于搜索,按被搜索的资源类 ... -
Spring JDBC批量操作
2013-01-20 02:51 271、使用JdbcTemplate进行批 ... -
集成JBPM3,实现流程流转
2012-11-29 16:48 2197集成JBPM到OA系统,并实现JbpmFacade接口 - ... -
Spring MVC 文件上传
2010-03-23 16:45 1124MultipartHttpServletRequest mul ... -
导出Excel(jxl)
2009-08-05 09:15 526Action代码: import java.io.IOExce ... -
Hibernate笔记(常用技术)
2009-07-21 17:13 2153一.对象关系映射基础 1.hibernate对象属性映射 ...
相关推荐
1. **通用Mapper**:创建一个基类Mapper,包含增删改查的通用方法,子类只需继承这个基类即可,无需重复编写相似的SQL语句。 2. **注解增强**:利用MyBatis的注解进行SQL动态拼接,使得SQL的编写更灵活,同时减少...
标题中提到的 "springMVC+Mybatis无缝对接封装好的直接对数据库表进行增删改查等等",意味着有一个已经预先封装好的解决方案,使得开发者无需在 Mybatis 的 XML 映射文件或者 Service 层编写过多的代码,就能直接在 ...
1. 数据源管理:封装类可以负责初始化和管理数据源,例如使用Apache的DBCP或C3P0等连接池,避免手动创建和关闭数据库连接。 2. SQL执行:提供方便的方法来执行SQL查询、更新、插入和删除操作,可能支持预编译的...
BaseMapper是通用Mapper提供的核心接口,包含了一套完整的增删改查方法。例如:`insert`, `selectOne`, `updateById`, `deleteById` 等。开发者只需要在自己的Mapper接口中继承BaseMapper,并指定对应的实体类,...
总结,Mybatis Plus通过提供便捷的API和自动化处理,极大地简化了基于Mybatis的数据库操作。从快速入门到CRUD操作,再到源码学习,Mybatis Plus都是提高开发效率的好帮手。在实际项目中,结合使用Mybatis Plus和...
在本项目"zxText"中,开发者利用SpringBoot框架、Thymeleaf模板引擎、MySQL数据库和MyBatis持久层框架构建了一个基础的Web应用,实现了数据的增删改查(CRUD)功能,并加入了条件分页查询。下面将详细阐述这些技术...
本项目标题为“springboot整合mybatis”,描述中提到实现了MySQL数据库的简单增删改查操作,并对MyBatis的CRUD和分页功能进行了封装。以下是对这些知识点的详细解释: 1. **SpringBoot**:SpringBoot是由Pivotal...
1. **自动CRUD操作**:MyBatis-Plus提供了一套简单的API,通过实体类和表的映射关系,可以实现自动化的增删改查操作。例如,通过`insert()`、`updateById()`、`deleteById()`和`selectById()`等方法,开发者无需编写...
2. **BaseService**:基础Service接口,包含了基本的增删改查操作,这些操作由BaseMapper驱动执行。 3. **SqlSessionTemplate**:对MyBatis的SqlSession进行了封装,提供了更安全的线程安全操作。 4. **QueryWrapper...
mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之...
在"Mapper"部分,Mapper接口是MyBatis的核心组件之一,它封装了数据库操作逻辑,比如增删改查。通过实现这些接口,开发者可以专注于业务逻辑,而不必关心SQL的具体实现。Mapper接口通常与XML映射文件配合使用,通过...
3. **编写工具类**:为了方便操作,可以封装一个Elasticsearch工具类,这个类中包含执行ES查询、索引创建、文档增删改查等常用方法。 4. **AOP切面**:定义一个AOP切面,该切面会在Mapper接口的方法执行后被触发,...
MyBatis Plus(简称MP)是MyBatis的扩展工具,它在MyBatis的基础上简化了开发工作,提供了丰富的 CRUD 操作以及通用的增删改查接口,使得开发者无需手动编写大量的SQL语句,极大地提高了开发效率。这个压缩包文件...
1. **自动化CRUD**:提供了基于注解的快速创建增删改查方法,只需在实体类上添加相应的注解,即可自动生成对应的Mapper接口和XML配置文件。 2. **条件构造器**:通过`QueryWrapper`和`UpdateWrapper`等工具类,可以...
MyBatisPlus提供了便捷的CRUD方法,开发者无需编写过多的SQL,只需通过注解或XML配置,就可以实现数据的增删改查。例如,通过`insert()`、`deleteById()`、`updateById()`和`selectById()`等方法,可以快速实现对应...
通用Mapper则是在MyBatis基础上进一步封装,提供了诸如增删改查、分页、排序等基本操作的通用方法。只需在自己的Mapper接口上添加通用Mapper的注解,就能使用这些方法。此外,通用Mapper还支持自定义方法,可以通过...
代码生成器可以根据数据库表结构自动生成对应的Mapper接口和XML配置文件,包含增删查改(INSERT、DELETE、SELECT、UPDATE)等方法,使得开发者无需手动编写这些基础代码。 2. Controller文件:Controller是Spring ...
- **Mapper**:负责定义SQL映射关系,实现数据的增删改查等操作。 - **Service**:封装业务逻辑,调用Mapper层提供的方法。 - **Controller**:处理HTTP请求,返回相应的响应结果。 #### 四、入门案例 **4.1 开发...
Spring的IoC容器管理着所有的业务逻辑和服务,通过SpringMVC接收前端请求,调用相应的服务方法,再通过MyBatis执行数据库操作,实现数据的增删改查。这样的架构设计保证了代码的清晰性和可维护性。 其次,Vue.js是...
这些接口定义了操作数据库的方法,例如增删改查。然后,使用MyBatis的Mapper注解或Mapper XML文件来实现这些方法,将SQL语句绑定到接口方法上。这样,业务层只需调用DAO接口,无需关心SQL的具体执行细节。 在具体的...