`
qingwei201314
  • 浏览: 167960 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mybatis 公用CRUD 增删改查

 
阅读更多

mybatis公用增删改查CRUD

1.具体mapper

package com.kevin.mapper;

import org.apache.ibatis.annotations.Mapper;

import com.kevin.dto.AllType;
import com.kevin.mapper.common.CommonMapper;

@Mapper
public interface AllTypeMapper extends CommonMapper<AllType> {

}

2.公用mapper:

package com.kevin.mapper.common;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.SelectProvider;

/**
 * CRUD公用类
 * @author Kevin Zhang @Date 2018年3月20日 下午4:55:23
 */
public interface CommonMapper<T> {
    @SelectProvider(type = CommonProvider.class, method = "save")
    public void save(T t);
   
    @SelectProvider(type = CommonProvider.class, method = "delete")
    public void delete(Integer id, Class<T> t);
   
    /**
     * 注意,更新之前, 输入参数t一定要从数据库中读出,不然很容易将其他字段置为空
     */
    @SelectProvider(type = CommonProvider.class, method = "update")
    public void update(Integer id, Map<String,Object> map, Class<T> t);
   
    @SelectProvider(type = CommonProvider.class, method = "find")
    T findOne(T t);
   
    @SelectProvider(type = CommonProvider.class, method = "find")
    List<T> find(T t);
}

3.公用CRUD

package com.kevin.mapper.common;

import java.lang.reflect.Field;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.jdbc.SQL;

import com.kevin.annotation.Column;
import com.kevin.annotation.Ignore;
import com.kevin.annotation.Table;

/**
 * 公用crud
 *
 * @author Kevin Zhang @Date 2018年3月15日 下午4:43:52
 */
public class CommonProvider {
    /**
     * 保存对象至数据库
     */
    public static <T> String save(T t) throws IllegalAccessException {
        String sql = new SQL() {
            {
                Class<?> entityClass = t.getClass();
                String tableName = tableName(entityClass);

                // 各字段,如果不为null, 且不为"", 则作为查询条件,并用and连接后,生成SQL
                Field[] fields = entityClass.getDeclaredFields();
                if (fields != null && fields.length > 0) {
                    // 生成insert
                    INSERT_INTO(tableName);
                    for (Field field : fields) {
                        String fieldName = field.getName();
                        Ignore ignore = field.getAnnotation(Ignore.class);
                        if (!"serialVersionUID".equals(fieldName) && ignore == null) {
                            field.setAccessible(true);
                            Column column = field.getAnnotation(Column.class);
                            if (column != null) {                                                             // 如果有加列注解,用列的注解名
                                fieldName = column.name();
                            }

                            Object o = field.get(t);
                            if(!"id".equals(fieldName) || ("id".equals(fieldName) && o != null)){
                                if (o instanceof String) {                                                     // 如果string类型, SQL里要加引号
                                    VALUES(fieldName, "'" + o.toString() + "'");
                                } else if(o instanceof Date) {                                                // 如果是日期格式,转换成string: yyyy-MM-dd HH:mm:ss
                                    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                    String dateString = format.format((Date)o);
                                    VALUES(fieldName, "'" + dateString + "'");
                                } else {                                                                     // 如果不是string类型,直接填值
                                    String value = o == null ? "null" : o.toString();
                                    VALUES(fieldName, value);
                                }
                            }
                        }
                    }
                }
            }
        }.toString();
        return sql;
    }
   
    /**
     * 删除指定表,指id行的记录
     */
    public static <T> String delete(final Integer id, final Class<T> t) {
        String sql = new SQL() {
            {
                String tableName = tableName(t);
                DELETE_FROM(tableName);
                WHERE("id = " + id);
            }
        }.toString();
        return sql;
    }

    /**
     * 更新数据库记录
     */
    public static <T> String update(Integer id, Map<String,Object> map, Class<T> t) {
        String sql = new SQL() {
            {
                String tableName = tableName(t);

                Set<String> columns = map.keySet();
                if (id != null && columns != null && columns.size() > 0) {
                    // 生成update
                    UPDATE(tableName);
                    for (String column : columns) {
                        Object o = map.get(column);
                        if (o instanceof String) {                                                     // 如果string类型, SQL里要加引号
                            SET(column + "='" + o.toString() + "'");
                        } else {                                                                     // 如果不是string类型,直接填值
                            String value = o == null ? "null" : o.toString();
                            SET(column + "=" + value);
                        }
                    }
                    //where 条件
                    WHERE("id = " + id);
                }
            }
        }.toString();
        return sql;
    }
   
    /**
     * 根据查询条件查出记录:查询条件用and连接, null或"" 不能作为查询条件
     */
    public static <T> String find(T t) throws IllegalAccessException {
        return new SQL() {
            {
                Class<?> entityClass = t.getClass();
                String tableName = tableName(entityClass);

                // 各字段,如果不为null, 且不为"", 则作为查询条件,并用and连接后,生成SQL
                Field[] fields = entityClass.getDeclaredFields();
                if (fields != null && fields.length > 0) {
                    SELECT("*");
                    FROM(tableName);
                    for (Field field : fields) {
                        String fieldName = field.getName();
                        Ignore ignore = field.getAnnotation(Ignore.class);
                        if (!"serialVersionUID".equals(fieldName) && ignore == null) {
                            field.setAccessible(true);
                            Column column = field.getAnnotation(Column.class);
                            if (column != null) { // 如果有加列注解,用列的注解名
                                fieldName = column.name();
                            }

                            Object o = field.get(t);
                            // 字段值不为null, 且不为"", 才作为条件进行查询
                            if (o != null && !"".equals(o.toString())) {
                                if (o instanceof String) {                                     // 如果string类型, SQL里要加引号
                                    WHERE(fieldName + "='" + o + "'");
                                } else if(o instanceof Date){                                // 如果Date作为查询条件
                                    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                    String value = format.format((Date)o);
                                    WHERE(fieldName + "='" + value + "'");
                                } else { // 如果不是string类型,直接填值
                                    WHERE(fieldName + "=" + o);
                                }
                            }
                        }
                    }
                }
            }
        }.toString();
    }

    /**
     * 根据对象取出表名
     */
    private static <T> String tableName(Class<?> entityClass) {
        // 取出表名
        Table a = entityClass.getAnnotation(Table.class);
        String tableName = null;
        if (a != null) { // 有加注解,写明表名
            tableName = a.name();
        } else { // 没加注解,则用类名
            String className = entityClass.getName();
            tableName = className.substring(className.lastIndexOf("."));
        }
        return tableName;
    }
}

分享到:
评论

相关推荐

    mybatis-plus 增删改查模板

    plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_plus 增删改查模板mybatis_...

    mybatis_crud增删改查数据库操作.zip

    在本示例中,"mybatis_crud增删改查数据库操作.zip" 提供了一个使用MyBatis进行CRUD(Create、Read、Update、Delete)操作的教程。通过解压这个压缩包,我们可以看到一个名为"mybatis_day03_crud"的目录,这通常包含...

    dubbo zookee mybatis springboot java 增删改查demo 服务远程调用 服务组测 服务发现

    dubbo zookee mybatis springboot java 增删改查demo 服务远程调用 服务组测 服务发现 dubbo zookee mybatis springboot java 增删改查demo 服务远程调用 服务组测 服务发现 dubbo zookee mybatis springboot java ...

    maven-springboot-mysql-thymeleaf-mybatis-CRUD增删改查完整版

    【标题】"maven-springboot-mysql-thymeleaf-mybatis-CRUD增删改查完整版"是一个综合性的项目示例,它演示了如何使用Maven、Spring Boot、MySQL、Thymeleaf和MyBatis这五种技术进行CRUD(创建、读取、更新、删除)...

    Mybatis通用增删改查

    在实际开发中,为了提高代码的复用性和减少重复工作,开发者通常会实现一套通用的增删改查模板,这就是“Mybatis通用增删改查”的概念。 1. **基础 DaoImpl 概念** Dao(Data Access Object)接口是Java中用于...

    SpringBoot整合MyBatis Plus实现增删改查教程

    本文将详细介绍如何使用 Spring Boot 框架和 MyBatis Plus 实现增删改查(CRUD)操作的教程。MyBatis Plus 是一个基于 MyBatis 的 ORM 框架,它提供了许多实用的功能来简化数据库交互。 首先,MyBatis Plus 是什么...

    通用mybatis-MySQL增删改查CRUD源码

    本资源"通用mybatis-MySQL增删改查CRUD源码"旨在帮助开发者避免重复编写繁琐的SQL语句和Mapper接口,提高开发效率。以下是关于这个主题的详细知识讲解。 **1. CRUD操作** CRUD是创建(Create)、读取(Retrieve)、更新...

    myEclipse2013+spring-mvc+mybatis3.2.2实现增删改查简单完整版

    myEclipse2013+spring-mvc+mybatis3.2.2实现增删改查简单完整版,可在myEclipse2013自带的Tomcat 7上运行,weblogic上可能有问题,有ModelMap 和ModelAndView的简单使用比较,ModelMap用起来更方便简洁。也使用到了c...

    Springboot+mybatis登录注册增删改查

    以上就是Spring Boot+Mybatis构建登录注册增删改查系统的详细过程,通过这个项目,开发者可以深入理解Spring Boot的自动配置原理,以及Mybatis如何与Spring Boot结合实现数据库操作。在实际开发中,还需要考虑异常...

    Mybatis基本应用实现增删改查

    在本文中,我们将深入探讨如何使用Mybatis来实现基本的数据库增删改查(CRUD)操作。 首先,我们需要在项目中引入Mybatis的依赖。通常,这可以通过Maven或Gradle来完成。在Maven的pom.xml文件中,添加以下依赖: `...

    springMVC+mybatis实现登录和增删改查

    在本项目中,"springMVC+mybatis实现登录和增删改查"是一个典型的Web应用程序,它结合了SpringMVC、MyBatis两大主流框架,以及Bootstrap前端库,来构建一个用户友好的数据管理平台。以下是这个项目涉及到的主要知识...

    Spring Mvc+Mybatis框架组合增删改查

    下面将详细解释这两个框架以及它们如何协同工作实现数据的增删改查。 首先,Spring MVC是一个模型-视图-控制器(Model-View-Controller)架构模式的实现,它提供了松耦合的组件、强大的依赖注入和AOP(面向切面编程...

    spring+mybatis实现数据增删改查

    在Java Web开发中,数据增删改查(CRUD)是最基础的操作,涵盖了创建(Create)、读取(Read)、更新(Update)和删除(Delete)四种数据库操作。Spring与MyBatis的结合,使得这些操作变得非常简洁和高效。 1. **...

    Mybatis+Servlet整合增删改查模板

    Mybatis+Servlet整合增删改查模板,有数据库和相关jar包.直接导入myeclipse或者eclipse中.运行数据库脚本.项目就可以运行.需要运行前提:eclipse+jdk+数据库 下载资源后有问题可以联系我

    基于jsp+Servlet+mybatis实现简单增删改查的图书信息系统

    这个系统具备基础的图书信息增删改查(CRUD)功能,并且实现了分页展示,同时也包含了用户登录模块。下面我们将详细解析这些关键知识点。 1. **JSP(JavaServer Pages)**: JSP是Java的一个动态网页技术,允许...

    spring+springmvc+mybatis架构整合增删改查

    本文将详细讲解如何整合Spring、SpringMVC和MyBatis进行增删改查操作。 首先,`tb_user.sql`文件通常包含数据库表的创建脚本。在SSM架构中,MyBatis会与数据库进行交互,`tb_user`可能是我们的用户表,用于存储用户...

    servlet+mybatis做的增删改查

    标题“servlet+mybatis做的增删改查”表明这个项目是关于如何使用Servlet和MyBatis实现基本的CRUD(创建、读取、更新、删除)操作。在Web应用中,增删改查是最基本的需求,涵盖了数据的生命周期管理。 1. **Servlet...

    maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查基础开发框架

    maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查基础开发框架.maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查基础开发框架.maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查...

    mybatis-plus 增删改查

    mybatis-plus 增删改查 mybatis-plus是mybatis的增强版

    mybatisCRUD (Mybatis 增删改查 代码)

    本项目主要展示了如何使用Mybatis进行基本的CRUD(创建、读取、更新、删除)操作,并且结合了Junit进行单元测试,确保代码的正确性。 在Mybatis中,CRUD操作的核心在于Mapper接口和XML配置文件。Mapper接口定义了...

Global site tag (gtag.js) - Google Analytics