Java常用sql查询语句,以及跨数据源操作问题

1,确定时间格式查询sql
SELECT
date_format(wrr.create_time,’%Y-%m-%d %H:%i:%s’) AS createTime,
date_format(wrr.arrival_time ,’%Y-%m-%d %H:%i:%s’) AS arrivalTime,

FROM
wp_recruitment_requirement wrr

2,倒序,正序查询
倒序查询:
sql中排序倒序使用desc关键字,一般需要和order by 合用,示例sql语句如下:
例如:select * from student order by age desc;
意思是查询学生表,以学生年纪倒序排列。
排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到where 语句后面。
例如: select ename,job,ename from emp order by job desc,sal desc;
意思是查询员工表按照 job 和薪水倒序排序 。

正序查询:
sql中升序(正序)用法介绍:
1、使用asc关键字
例如: select ename,sal from emp order by sal asc;
手动指定按照薪水由小到大排序(升序关键字 asc)
2、不加asc关键字,系统默认升序
例如: select ename,job,sal from emp where job = ”MANAGER”order by sal;
取得job 为 MANAGER 的员工,按照薪水由小到大排序(系统默 认由小到大)

3,待更新。。。。。。

跨数据源操作数据库
步骤一:定义注解(@interface )
package cn.licoy.wdog.core.config.datasource;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**

  • @Author: Jingchun
  • @Date: 2019/10/10 17:52
  • @Version 1.0
    */
    @Retention(RetentionPolicy.RUNTIME)
    @Target({
    ElementType.METHOD
    })
    public @interface DS {
    //主数据源
    String value() default “ctpmanage”;
    }

步骤二:数据源配置(DataSourceConfig )
package cn.licoy.wdog.core.config.datasource;

import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**

  • @Author: guanquan

  • @Date: 2019/10/10 17:38

  • @Version 1.0
    */
    @Configuration
    public class DataSourceConfig {

    //三种数据源
    @Bean(name = “ctpdb”)
    @ConfigurationProperties(prefix = “spring.datasource.ctpdb”) // application.properteis中对应属性的前缀
    public DataSource dataSourceCtp() {
    return DataSourceBuilder.create().build();
    }

    @Bean(name = “ctpmanage”)
    @ConfigurationProperties(prefix = “spring.datasource.ctpmanage”) // application.properteis中对应属性的前缀
    public DataSource dataSourceCtpmanage() {
    return DataSourceBuilder.create().build();
    }

    @Bean(name = “freeswitch”)
    @ConfigurationProperties(prefix = “spring.datasource.freeswitch”) // application.properteis中对应属性的前缀
    public DataSource dataSourceFreeswitch() {
    return DataSourceBuilder.create().build();
    }

    /**

    • 动态数据源: 通过AOP在不同数据源之间动态切换
    • @return
      */
      @Bean(name = “dynamicDS”)
      @Primary
      public DataSource dataSource() {
      System.out.println("=======dynamicDS=");
      DynamicDataSource dynamicDataSource = new DynamicDataSource();
      // 默认数据源
      dynamicDataSource.setDefaultTargetDataSource(dataSourceCtpmanage());
      // 配置多数据源
      Map<Object, Object> dsMap = new HashMap(5);
      dsMap.put(“ctpdb”, dataSourceCtp());
      dsMap.put(“ctpmanage”, dataSourceCtpmanage());
      dsMap.put(“freeswitch”,dataSourceFreeswitch());
      dynamicDataSource.setTargetDataSources(dsMap);
      return dynamicDataSource;
      }
      }

步骤三:切换数据源(DataSourceContextHolder)
package cn.licoy.wdog.core.config.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**

  • @Author: guanquan
  • @Date: 2019/10/10 17:49
  • @Version 1.0
    /
    public class DataSourceContextHolder {
    public static final Logger log = LoggerFactory.getLogger(DataSourceContextHolder.class);
    /
    *
    • 默认数据源
      */
      public static final String DEFAULT_DS = “ctpmanage”;
      private static final ThreadLocal contextHolder = new ThreadLocal<>();
      // 设置数据源名
      public static void setDB(String dbType) {
      log.debug(“切换到{}数据源”, dbType);
      contextHolder.set(dbType);
      }
      // 获取数据源名
      public static String getDB() {
      return (contextHolder.get());
      }
      // 清除数据源名
      public static void clearDB() {
      contextHolder.remove();
      }
      }

步骤四:动态数据来源(DynamicDataSource)
package cn.licoy.wdog.core.config.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**

  • @Author: jingchun

  • @Date: 2019/10/10 17:50

  • @Version 1.0
    */
    public class DynamicDataSource extends AbstractRoutingDataSource {
    private static final Logger log = LoggerFactory.getLogger(DynamicDataSource.class);

    @Override
    protected Object determineCurrentLookupKey() {
    log.debug(“数据源为{}”, DataSourceContextHolder.getDB());
    System.out.println("=======数据源为" + DataSourceContextHolder.getDB());
    return DataSourceContextHolder.getDB();
    }
    }

步骤五:动态数据源使用(DynamicDataSourceAspect)
package cn.licoy.wdog.core.config.datasource;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**

  • @Author: jingchun

  • @Date: 2019/10/10 17:53

  • @Version 1.0
    */
    @Aspect
    @Component
    @Order(1)
    public class DynamicDataSourceAspect {
    @Before("@annotation(DS)")
    public void beforeSwitchDS(JoinPoint point) {
    //获得当前访问的class
    Class<?> className = point.getTarget().getClass();
    //获得访问的方法名
    String methodName = point.getSignature().getName();
    //得到方法的参数的类型
    Class[] argClass = ((MethodSignature) point.getSignature()).getParameterTypes();
    String dataSource = DataSourceContextHolder.DEFAULT_DS;
    try {
    // 得到访问的方法对象
    Method method = className.getMethod(methodName, argClass);
    // 判断是否存在@DS注解
    if (method.isAnnotationPresent(DS.class)) {
    DS annotation = method.getAnnotation(DS.class);
    // 取出注解中的数据源名
    dataSource = annotation.value();
    System.out.println("=" + dataSource + "=");
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    // 切换数据源
    DataSourceContextHolder.setDB(dataSource);
    }

    @After("@annotation(DS)")
    public void afterSwitchDS(JoinPoint point) {
    DataSourceContextHolder.clearDB();
    }

}

步骤六:在Controller层添加@DS注解
eg: @DS(“ctpdp”)

发布了15 篇原创文章 · 获赞 3 · 访问量 384

猜你喜欢

转载自blog.csdn.net/weixin_44520602/article/details/104725063