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”)