学习笔记

这篇博客涵盖了Java的MD5加密、MyBatis的基本配置与多数据源配置,包括XML字符串的处理、数据库操作与Excel导出。还涉及HTTPClient的HTTPS和HTTP调用、JDK版本问题解决、XML与JSON转换、甘特图和UML图表的使用,以及Markdown编辑技巧和文件导入导出。
摘要由CSDN通过智能技术生成

#MD5 -加密 解密

MD5 加密 机密

  1. 方法一 加密
public static void toMD5(String plainText) {
   
        try {
   
             //生成实现指定摘要算法的 MessageDigest 对象。
             MessageDigest md = MessageDigest.getInstance("MD5");    
             //使用指定的字节数组更新摘要。
             md.update(plainText.getBytes());
             //通过执行诸如填充之类的最终操作完成哈希计算。
             byte b[] = md.digest();
             //生成具体的md5密码到buf数组
             int i;
             StringBuffer buf = new StringBuffer("");
             for (int offset = 0; offset < b.length; offset++) {
   
                  i = b[offset];
                  if (i < 0)
                      i += 256;
                  if (i < 16)
                      buf.append("0");
                  buf.append(Integer.toHexString(i));
             }
             System.out.println("32位: " + buf.toString());// 32位的加密
             System.out.println("16位: " + buf.toString().substring(8, 24));// 16位的加密,其实就是32位加密后的截取
        } 
        catch (Exception e) {
   
            e.printStackTrace();
        }
   }
  1. 方法二 加密 和 解密
 /*** 
     * MD5加码 生成32位md5码 
     */  
    public static String string2MD5(String inStr){
     
        MessageDigest md5 = null;  
        try{
     
            md5 = MessageDigest.getInstance("MD5");  
        }catch (Exception e){
     
            System.out.println(e.toString());  
            e.printStackTrace();  
            return "";  
        }  
        char[] charArray = inStr.toCharArray();  
        byte[] byteArray = new byte[charArray.length];  
  
        for (int i = 0; i < charArray.length; i++)  
            byteArray[i] = (byte) charArray[i];  
        byte[] md5Bytes = md5.digest(byteArray);  
        StringBuffer hexValue = new StringBuffer();  
        for (int i = 0; i < md5Bytes.length; i++){
     
            int val = ((int) md5Bytes[i]) & 0xff;  
            if (val < 16)  
                hexValue.append("0");  
            hexValue.append(Integer.toHexString(val));  
        }  
        return hexValue.toString();  
  
    }  

2.1 方法二 解密

  /** 
     * 加密解密算法 执行一次加密,两次解密 
     */   
    public static String convertMD5(String inStr){
     
  
        char[] a = inStr.toCharArray();  
        for (int i = 0; i < a.length; i++){
     
            a[i] = (char) (a[i] ^ 't');  
        }  
        String s = new String(a);  
        return s;  
  
    }  


	public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
   
// TODO Auto-generated method stub
		   String s2 = EncoderByMd5("INSPUR-DZZW-BDC3100852bdctybh");
		   String s1 = "INSPUR-DZZW-BDC3100852bdctybh";
	        System.out.println(s1);
	        toMD5("INSPUR-DZZW-BDC"+"3100852"+"bdctybh");
	        String s = new String("tangfuqiang");  
	        System.out.println("原始:" + s1);  
	        System.out.println("MD5后:" + string2MD5(s1));  
	        System.out.println("加密的:" + convertMD5(s1));  
	        System.out.println("解密的:" + convertMD5(convertMD5(s1)));  
	}

INSPUR-DZZW-BDC3100852bdctybh
32: 0c65507be003309a2549f04fc402cb86
16: e003309a2549f04f
原始:INSPUR-DZZW-BDC3100852bdctybh
MD5后:0c65507be003309a2549f04fc402cb86
加密的:=:'$!&Y0..#Y607GEDDLAF

mybatis

mybatis 基本配置

  • 1.单数据源
mybatis.type-aliases-package=com.sum.dao
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.jdbc-type-for-null=null
mybatis.configuration.call-setters-on-nulls=true
  • 2.多数据源
# master 数据源配置
master.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8
master.datasource.username=root
master.datasource.password=321
master.datasource.driverClassName=com.mysql.jdbc.Driver

# second 数据源配置
second.datasource.url=jdbc:mysql://localhost:3306/springbootdb_second?useUnicode=true&characterEncoding=utf8
second.datasource.username=root
second.datasource.password=321
second.datasource.driverClassName=com.mysql.jdbc.Driver

多数据源配置的时候注意,必须要有一个主数据源,即 MasterDataSourceConfig 配置

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
   
 
    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "org.spring.springboot.dao.master";
    static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";
 
    @Value("${master.datasource.url}")
    private String url;
 
    @Value("${master.datasource.username}")
    private String user;
 
    @Value("${master.datasource.password}")
    private String password;
 
    @Value("${master.datasource.driverClassName}")
    private String driverClass;
 
    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
   
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }
 
    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
   
        return new DataSourceTransactionManager(masterDataSource());
    }
 
    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
   
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

第二个数据源SecondDataSourceConfig的配置如下:

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
   

    // 精确到 cluster 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.springboot.dao.second";
    static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";

    @Value("${second.datasource.url}")
    private String url;

    @Value("${second.datasource.username}")
    private String user;

    @Value("${second.datasource.password}")
    private String password;

    @Value("${second.datasource.driverClassName}")
    private String driverClass;

    @Bean(name = "secondDataSource")
    public DataSource clusterDataSource() {
   
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "secondTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager() {
   
        return new DataSourceTransactionManager(clusterDataSource());
    }

    @Bean(name = "secondSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
            throws Exception {
   
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(clusterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(SecondDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

mybatis 语句


  	<!-- 数据集合-->
	<resultMap type="com.entry.xm" id="xmMap">
		<result property="xmid" column="xmid" jdbcType="VARCHAR"/>
		<result property="xmmc" column="xmmc" jdbcType="VARCHAR"/>
	</resultMap>

	<select id="tsxm" resultMap="xmMap">
		<![CDATA[
		select
		xmid, xmmc
		from bdc_xm
	
           ]]>
	</select>

	<!-- list集合的-->
       <update id="update">
        update bdc_xm  set xmzs=1
        where xmid=
		  <foreach collection="list" index="index" item="item" separator="union all" open="(" close=")">
			  SELECT
			  #{
   item.xmid,jdbcType=VARCHAR}
			  FROM dual
		  </foreach>

    </update>
	<!-- 实体类的-->
	<update id="xmupdate">
		update bdc_xm  set xmzs=1
		where xmid=#{
   xmid}
	</update>
<!-- 数据类型 -->
	<resultMap type="com.enery.xm" id="xmMap">
		<result property="xmid" column="xmid" jdbcType="VARCHAR"/>
		<result property="xmmc" column="xmmc" jdbcType="VARCHAR"/>
	</resultMap>
	<select id="tsxm" resultMap="xmMap">
		<![CDATA[
		select
		xmid, xmmc
		from bdc_xm
		where fcbs=0 and rownum <=10
            ]]>
	</select>
       <update id="update">
        update bdc_xm  set FCBS=1;

        where xmid = #{
   xmid}
    </update>
    <!-- list 集合的 (实体放在list中list<xm>)-->
     <insert id="JYXT_insertXM" parameterType="com.entry.xm" useGeneratedKeys="false">
        insert into bdc_xm(xmid,xmmc)
		 <foreach collection="list" index="index" item="item" separator="union all" open="(" close=")">
			 SELECT
			 #{
   item.xmid,jdbcType=VARCHAR},
			 #{
   item.xmmc,jdbcType=VARCHAR}

			 FROM dual
		 </foreach>
    </insert>

    <!-- 实体类的 -->
	<insert id="JYXT_bdcxminsertXM" parameterType="com.entry.xm" useGeneratedKeys="false">

 MERGE INTO bdc_xm T
          USING (
            SELECT
              #{
   xmid} as T_XMID,
              #{
   xmmc} as T_XMMC
FROM DUAL
        )T1
        ON (T.XMID =  T1.T_XMID)
        WHEN MATCHED THEN
          UPDATE SET
          T.XMMC =T1.T_XMMC
        WHEN NOT MATCHED THEN
          INSERT
          (XMID,XMMC)
          VALUES (T1.T_XMID,T1.T_XMMC)
	</insert>

多数据源配置

  • application.yml
server:
  port: 9999
  servlet:
    context-path: /XYZZSH
spring:
  mvc:
    static-path-pattern: /**
    pathmatch:
      use-suffix-pattern: true
  druid:
    filters: stat
    maxActive: 20
    initialSize: 1
    maxWait: 60000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 'x' FROM DUAL
    testWhileIdle: true
    testOnBorrow: true
    testOnReturn: true
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20
    logSlowSql: true
  ywk:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    username: sjk
    password: sjk
    driver-class-name: oracle.jdbc.OracleDriver
  qzj:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    username: sjk
    password: sjk
    driver-class-name: oracle.jdbc.OracleDriver
logging:
  level:
    com.dao: DEBUG
  config: classpath:logback.xml

  • 主数据源配置


import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
@Configuration
@MapperScan(basePackages = YWKDruidConfig.PACKAGE, sqlSessionFactoryRef = "ywkSqlSessionFactory")
public class YWKDruidConfig {
   
    static final String PACKAGE = "com.dao.ywk";
    static final String MAPPER_LOCATION = "classpath:mapper/ywk/*.xml";
    
    @Value("${spring.ywk.url}")
    private String ywk_dbUrl;

    @Value("${spring.ywk.username}")
    private String ywk_username;

    @Value("${spring.ywk.password}")
    private String ywk_password;

    @Value("${spring.ywk.driver-class-name}")
    private String ywk_driverClassName;
    
    @Value("${spring.druid.initialSize}")
    private int initialSize;

    @Value("${spring.druid.minIdle}")
    private int minIdle;

    @Value("${spring.druid.maxActive}")
    private int maxActive;

    @Value("${spring.druid.maxWait}")
    private int maxWait;

    @Value("${spring.druid.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;

    @Value("${spring.druid.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;

    @Value("${spring.druid.validationQuery}")
    private String validationQuery;

    @Value("${spring.druid.testWhileIdle}")
    private boolean testWhileIdle;

    @Value("${spring.druid.testOnBorrow}")
    private boolean testOnBorrow;

    @Value("${spring.druid.testOnReturn}")
    private boolean testOnReturn;

    @Value("${spring.druid.filters}")
    private String filters;

    @Value("${spring.druid.logSlowSql}")
    private String logSlowSql;
    
    @Bean
    public ServletRegistrationBean druidServlet() throws ServletException {
   
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        reg.addInitParameter("loginUsername", "admin");
        reg.addInitParameter("loginPassword", "123");
        reg.addInitParameter("logSlowSql", logSlowSql);
        return reg;
    }
    public FilterRegistrationBean filterRegistrationBean() {
   
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.addInitParameter("profileEnable", "true");
        return filterRegistrationBean;
    }
    @Bean(name="ywkDataSource")
    public DataSource ywkDataSource() {
   
        DruidDataSource datasource = new DruidDataSource();
        datasource.setName("ywk");
        datasource.setUrl(ywk_dbUrl);
        datasource.setUsername(ywk_username);
        datasource.setPassword(ywk_password);
        datasource.setDriverClassName(ywk_driverClassName);
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        try {
   
            datasource.setFilters(filters);
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return datasource;
    }
    @Bean(name = "ywkTransactionManager")
    public DataSourceTransactionManager ywkTransactionManager() {
   
        return new DataSourceTransactionManager(ywkDataSource());
    }
 
    @Bean(name = "ywkSqlSessionFactory")
    public SqlSessionFactory ywkSqlSessionFactory(@Qualifier("ywkDataSource") DataSource ywkDataSource)
            throws Exception {
   
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(ywkDataSource);
        sessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(YWKDruidConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

  • 副数据源配置


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.sql.SQLException;

@Configuration
@MapperScan(basePackages = QZJDruidConfig.PACKAGE, sqlSessionFactoryRef = "qzjSqlSessionFactory")
public class QZJDruidConfig {
   
    static final String PACKAGE = &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值