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>

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


相关文章
|
4月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
517 4
|
5月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
374 18
|
10月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
10月前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
184 0
|
10月前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
177 0
|
10月前
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
162 0
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
1177 9
|
10月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1588 0
|
10月前
|
缓存 Java 数据库连接
MyBatis篇-常见配置
本文介绍了 MyBatis 的常见配置及事务管理相关内容。首先概述了 MyBatis 属性加载顺序,方法参数属性优先级最高。接着列举了几个常见配置属性,如 cacheEnabled、lazyLoadingEnabled 等,并说明其作用与默认值。在多环境配置部分,讲解如何通过 SqlSessionFactoryBuilder 指定环境,以及 environments 元素的配置细节。最后讨论了两种事务管理模式:JDBC 和 MANAGED,分别适用于不同场景,并指出在使用 Spring 模块时无需额外配置事务管理器。
|
SQL Java 数据库连接
Mybatis拦截器实现公共字段填充
通过使用MyBatis拦截器,可以实现对公共字段的自动填充,简化代码,提高开发效率。拦截器通过拦截SQL操作,在插入和更新操作时自动填充公共字段,使得开发者不再需要手动设置这些字段。本文详细介绍了实现步骤,并通过示例代码展示了具体实现方法,希望能为您的开发工作提供实用的指导和帮助。
792 13