基于MyBatis注解扩展,实现无需配置即可使用
来源:互联网 发布:java url webservice 编辑:程序博客网 时间:2024/05/19 14:02
一、使用篇
如果项目本身基于SpringMVC+Mybatis构建,不需添加任何配置Mapper类只需继承BaseMapper,即拥有增删改方法操作,无需任何配置文件
1.
package com.springmvc.mapper;import org.springframework.stereotype.Repository;import com.nmtx.mybatis.ext.mapper.BaseMapper;import com.springmvc.model.User;@Repositorypublic interface UserMapper extends BaseMapper<User>{}
2.
package com.springmvc.service.impl;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.springmvc.mapper.UserMapper;import com.springmvc.model.User;import com.springmvc.service.UserService;@Servicepublic class UserServiceImpl implements UserService{ @Resource private UserMapper userMapper; public int insertUser(User user) { return userMapper.insert(user); } @Override public int updateUser(User user) { return userMapper.update(user); } @Override public int deleteUser(User user) { return userMapper.delete(user); } @Override public User findUser(User user) { return userMapper.findFirst(user); }}
3.
<?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.springmvc.mapper.UserMapper"> </mapper>
扩展原理基于Mybatis中 @InsertProvider,@DeleteProvider,@UpdateProvider,@SelectProvider注解,具体实现代码如下
1.
package com.nmtx.mybatis.ext.mapper;import org.apache.ibatis.annotations.DeleteProvider;import org.apache.ibatis.annotations.InsertProvider;import org.apache.ibatis.annotations.Options;import org.apache.ibatis.annotations.SelectProvider;import org.apache.ibatis.annotations.UpdateProvider;import com.nmtx.mybatis.ext.common.SqlProvider;public interface BaseMapper<T> { @InsertProvider(type = SqlProvider.class, method = "insert") @Options(useGeneratedKeys=true) public int insert(T bean); @DeleteProvider(type = SqlProvider.class, method = "delete") public int delete(T bean); @UpdateProvider(type = SqlProvider.class, method = "update") public int update(T bean); @SelectProvider(type = SqlProvider.class, method = "findFirst") public T findFirst(T bean);
2.
package com.nmtx.mybatis.ext.common;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import org.apache.commons.lang3.ArrayUtils;import org.springframework.util.StringUtils;import com.nmtx.mybatis.ext.common.table.TableFormat;import com.nmtx.mybatis.ext.common.table.annotation.Column;import com.nmtx.mybatis.ext.common.table.annotation.Table;import com.nmtx.mybatis.ext.common.table.impl.HumpToUnderLineFormat;public class SqlProvider { private TableFormat tableFormat = new HumpToUnderLineFormat(); public String insert(Object bean) { Class<?> beanClass = bean.getClass(); String tableName = getTableName(beanClass); Field[] fields = getFields(beanClass); StringBuilder insertSql = new StringBuilder(); List<String> insertParas = new ArrayList<String>(); List<String> insertParaNames = new ArrayList<String>(); insertSql.append("INSERT INTO ").append(tableName).append("("); try { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; Column column = field.getAnnotation(Column.class); String columnName = ""; if (column != null) { if (!column.required()) continue; columnName = column.value(); } if (StringUtils.isEmpty(columnName)) { columnName = tableFormat.getColumnName(field.getName()); } field.setAccessible(true); Object object = field.get(bean); if (object != null) { insertParaNames.add(columnName); insertParas.add("#{" + field.getName() + "}"); } } } catch (Exception e) { new RuntimeException("get insert sql is exceptoin:" + e); } for (int i = 0; i < insertParaNames.size(); i++) { insertSql.append(insertParaNames.get(i)); if (i != insertParaNames.size() - 1) insertSql.append(","); } insertSql.append(")").append(" VALUES("); for (int i = 0; i < insertParas.size(); i++) { insertSql.append(insertParas.get(i)); if (i != insertParas.size() - 1) insertSql.append(","); } insertSql.append(")"); return insertSql.toString(); } public String update(Object bean) { Class<?> beanClass = bean.getClass(); String tableName = getTableName(beanClass); Field[] fields = getFields(beanClass); StringBuilder updateSql = new StringBuilder(); updateSql.append(" update ").append(tableName).append(" set "); try { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; Column column = field.getAnnotation(Column.class); String columnName = ""; if (column != null) { if (!column.required()) continue; columnName = column.value(); } if (StringUtils.isEmpty(columnName)) { columnName = tableFormat.getColumnName(field.getName()); } field.setAccessible(true); Object beanValue = field.get(bean); if (beanValue != null) { updateSql.append(columnName).append("=#{").append(field.getName()).append("}"); if (i != fields.length - 1) { updateSql.append(","); } } } } catch (Exception e) { new RuntimeException("get update sql is exceptoin:" + e); } updateSql.append(" where ").append(tableFormat.getId()+" =#{id}"); return updateSql.toString(); } public String delete(Object bean) { Class<?> beanClass = bean.getClass(); String tableName = getTableName(beanClass); Field[] fields = getFields(beanClass); StringBuilder deleteSql = new StringBuilder(); deleteSql.append(" delete from ").append(tableName).append(" where "); try { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; Column column = field.getAnnotation(Column.class); String columnName = ""; if (column != null) { if (!column.required()) continue; columnName = column.value(); } if (StringUtils.isEmpty(columnName)) { columnName = tableFormat.getColumnName(field.getName()); } field.setAccessible(true); Object beanValue = field.get(bean); if (beanValue != null) { deleteSql.append(columnName).append("=#{").append(field.getName()).append("}"); if (i != fields.length - 1) { deleteSql.append(" and "); } } } } catch (Exception e) { new RuntimeException("get delete sql is exceptoin:" + e); } return deleteSql.toString(); } public String findFirst(Object bean) { Class<?> beanClass = bean.getClass(); String tableName = getTableName(beanClass); Field[] fields = getFields(beanClass); StringBuilder selectSql = new StringBuilder(); List<String> selectParaNames = new ArrayList<String>(); List<String> selectParas = new ArrayList<String>(); selectSql.append("select "); try { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; Column column = field.getAnnotation(Column.class); String columnName = ""; if (column != null) { if (!column.required()) continue; columnName = column.value(); } if (StringUtils.isEmpty(columnName)) { columnName = tableFormat.getColumnName(field.getName()); } field.setAccessible(true); Object object = field.get(bean); selectSql.append(field.getName()); if (object != null) { selectParaNames.add(columnName); selectParas.add("#{" + field.getName() + "}"); } if (i != fields.length - 1) selectSql.append(","); } } catch (Exception e) { new RuntimeException("get select sql is exceptoin:" + e); } selectSql.append(" from ").append(tableName).append(" where "); for (int i = 0; i < selectParaNames.size(); i++) { selectSql.append(selectParaNames.get(i)).append("=").append(selectParas.get(i)); if (i != selectParaNames.size() - 1) selectSql.append(" and "); } return selectSql.toString(); } private String getTableName(Class<?> beanClass) { String tableName = ""; Table table = beanClass.getAnnotation(Table.class); if (table != null) { tableName = table.value(); } else { tableName = tableFormat.getTableName(beanClass.getSimpleName()); } return tableName; } private Field[] getFields(Class<?> beanClass) { Field[] beanFields = beanClass.getDeclaredFields(); Class<?> beanSuperClass = beanClass.getSuperclass(); Field[] beanSuperFields = beanSuperClass.getDeclaredFields(); return ArrayUtils.addAll(beanFields, beanSuperFields); }}
0 0
- 基于MyBatis注解扩展,实现无需配置即可使用
- samba简单安装,无需配置即可使用
- Mybatis使用 注解配置
- 无需配置即可创建 React Apps [ 译 ]
- 无需加好友,即可实现QQ对话。
- 使用注解来配置MyBatis
- 基于注解配置简单的SpringMVC+Mybatis
- 使用基于注解的mybatis实现根据参数动态生成sql语句
- 使用MyBatis对表执行CRUD操作——基于注解的实现
- 使用MyBatis对表执行增删改查操作——基于注解的实现
- J2EE项目使用自定义注解实现基于SpringMVC + Mybatis + Mysql的读写分离
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
- 【MyBatis学习18】使用注解配置Mapper
- springboot中使用Mybatis注解配置详解
- MyBatis第二讲学习笔记 ,使用MyBatis对表执行增删改查操作——基于注解的实现
- 基于注解的mybatis
- 基于注解的mybatis
- 基于注解的mybatis
- jquery通过name属性取值的方法
- shell学习-5
- Java Web学习(12):JSP九大内置对象(二)
- 做SEO时 大部分企业都会面临这些懵逼的问题!
- Android广告位循环轮播图的实现
- 基于MyBatis注解扩展,实现无需配置即可使用
- oracle 11g physical standby switchover steps
- HDU1019
- 插入排序
- Python中的str与unicode处理方法
- fastdfs-zyc监控系统的使用
- fdsf
- Activity 的启动模式都有哪些以及各自的特点
- (1)android入门函数理解,tutorial-android项目的MyApplication类分析