MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)

简介: MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)

动态数据源Deomo采用早之前的博客的代码内容;

码云也现成有代码;

博客地址

码云地址博客最后;

效果图如下:

查询的字段全部都是login,password

list01是原有的效果;

list02把null删除了;

http://localhost:1234/user/list01

http://localhost:1234/user/list02

详细代码上面地址有我这边只赋相关内容;

Controller

/**
     * 尝试动态数据库
     * @return
     *
     * http://localhost:1234/user/list
     */
    @RequestMapping("list01")
    public List<UserEntity> findall01(){
        return userService.findall01();
    }
    /**
     * 尝试动态数据库
     * @return
     *
     * http://localhost:1234/user/list02
     */
    @RequestMapping("list02")
    public List<Map<String,String>> findall02() throws IllegalAccessException {
        return userService.findall02();
    }

Srevice

/**
     * 查询所有的数据
     * @return
     */
    List<UserEntity> findall01();
    /**
     * 查询所有的数据
     * @return
     */
    List<Map<String,String>> findall02() throws IllegalAccessException;

ServiceImpl

/**
   * 调用finall 实现查询全部
   * @return
   */
  @Override
  public List<UserEntity> findall01() {
   //表名
     String tableName="user";
     //字段名
     String name="login,password";
     List<UserEntity> list = userinfoMapper.findall01(tableName,name);
    return list;
  }
    /**
     * 调用finall 实现查询全部
     * @return
     */
    @Override
    public List<Map<String,String>> findall02() throws IllegalAccessException {
        //表名
        String tableName="user";
        //字段名
        String name="login,password";
        List<UserEntity> find= userinfoMapper.findall02(tableName,name);
        List<Map<String,String>> lit=new ArrayList<>();
        for (UserEntity maps:find) {
          //  Map<String, Object> mapList = BeanUtil.beanToMap(maps);
            lit.add(objectToMap(maps));
        }
        return lit;
    }
    public static Map<String,String> objectToMap(Object requestParameters) throws IllegalAccessException {
        Map<String, String> map = new HashMap<>();
        // 获取f对象对应类中的所有属性域
        Field[] fields = requestParameters.getClass().getDeclaredFields();
        for (int i = 0, len = fields.length; i < len; i++) {
            String varName = fields[i].getName();
            // 获取原来的访问控制权限
            boolean accessFlag = fields[i].isAccessible();
            // 修改访问控制权限
            fields[i].setAccessible(true);
            // 获取在对象f中属性fields[i]对应的对象中的变量
            Object o = fields[i].get(requestParameters);
            if (o != null && StringUtils.isNotBlank(o.toString().trim())) {
                map.put(varName, o.toString().trim());
                // 恢复访问控制权限
                fields[i].setAccessible(accessFlag);
            }
        }
        return map;
    }

上面的import内容,参考大家知道引的那个依赖即可

import cn.hutool.core.bean.BeanUtil;
import com.example.demo.entity.UserEntity;
import com.example.demo.mapper.UserinfoMapper;
import com.example.demo.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Dao

/**
     * 查询全部
     * @return
     */
    List<UserEntity> findall01(@Param("tableName") String tableName,@Param("name") String name);
    /**
     * 查询全部
     * @return
     */
    List<UserEntity> findall02(@Param("tableName") String tableName, @Param("name") String name);

SQL

<!--     查询全部信息-->
    <select id="findall01"  parameterType="com.example.demo.entity.UserEntity" resultMap="userMap">
        select ${name}
        from ${tableName}
    </select>
    <!--     查询全部信息-->
    <select id="findall02"  parameterType="java.util.Map" resultMap="userMap">
        select ${name}
        from ${tableName}
    </select>

以上作为参考;具体以大家需求为主;


相关文章
|
1月前
|
数据库
mybatisplus返回指定字段的两种方式
mybatisplus返回指定字段的两种方式
51 1
|
1月前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
1天前
|
SQL Java 数据库连接
mybatis动态sql
mybatis动态sql
|
2天前
|
SQL 安全 BI
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
|
4天前
|
SQL Java 数据库连接
MyBatis #与$的区别以及动态SQL
MyBatis #与$的区别以及动态SQL
7 0
|
5天前
|
SQL Java 数据库连接
【mybatis】动态sql之批量增删改查
【mybatis】动态sql之批量增删改查
10 0
|
12天前
|
SQL Java 数据库连接
Mybatis Plus字段为空值时未更新解决方案
Mybatis Plus字段为空值时未更新解决方案
|
16天前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
17天前
|
SQL Java 数据库连接
【Mybatis】动态sql之sql的复用
【Mybatis】动态sql之sql的复用
12 0
|
20天前
|
SQL XML Java
Javaweb之Mybatis的动态SQLforeach和include的详细解析
Javaweb之Mybatis的动态SQLforeach和include的详细解析
8 0