Spring+SpringMVC+Mybatis 多数据源整合

原文地址:http://blog.csdn.net/q908555281/article/details/50316137

-----------------------------------

此篇文章是基于Spring3.0和mybatis3.2的
总体大概流程

1. 拷贝所需jar

2.写一个数据库切换的工具类:DataSourceContextHolder,用来切换数据库
3.写一个DynamicDataSource类来继承AbstractRoutingDataSource,并重写determineCurrentLookupKey()方法,来达到动态切换数据库
4. 创建springmvc-servlet.xml文件,然后创建spring配置文件(beans.xml)
5. 在beans.xml文件中配置数据源。我这里配置的三个数据源
6. 在beans.xml文件中创建sqlSessionFactory实例
7. 在beans.xml文件中配置事物、事物的传播性
8. 在beans.xml文件中配置AOP
9. 创建一个User对象,配置User.xml文件。写一个UserMapper接口,用来操作User对象的接口
10. 将User类的路径以及User.xml文件的路径在mybatis-config.xml文件中配置
11. 写一个UserService接口(接口里面的方法和UserMapper接口里面的方法一致,返回值和参数可不同,方法名最好一致),并写UserServiceImpl来实现UserService接口
12.写Controller类,并在其中写相对应的方法,给外部调用


下面看一下我的工程的目录:
common包存放的是一些公用类
controller包下放的是提供给外部访问的接口的(.do)类
datasource包下是用来配置数据库
entity:实体类

mapper:.....存放XXMapper以及实体类的对应表的关系的xml文件





下面一步步的来讲解:

1、拷贝jar文件。需要的jar文件入下图所示,因为我的项目中用到了json解析,所以导入了json相关的包



2.写一个数据库切换的工具类:DataSourceContextHolder,用来切换数据库

[java] view plaincopy
  1. public class DataSourceContextHolder {  
  2.      private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  
  3.   
  4.      public static void setDbType(String dbType) {  
  5.             contextHolder.set(dbType);  
  6.      }  
  7.   
  8.      public static String getDbType() {  
  9.             return ((String) contextHolder.get());  
  10.      }  
  11.   
  12.      public static void clearDbType() {  
  13.             contextHolder.remove();  
  14.      }  
  15. }  

3.写一个DynamicDataSource类来继承AbstractRoutingDataSource,并重写determineCurrentLookupKey()方法,来达到动态切换数据库

[java] view plaincopy
  1. import java.sql.SQLFeatureNotSupportedException;  
  2. import java.util.logging.Logger;  
  3.   
  4. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  
  5.   
  6. public class DynamicDataSource extends AbstractRoutingDataSource {  
  7.   
  8.      @Override  
  9.      public Logger getParentLogger() throws SQLFeatureNotSupportedException {  
  10.             return null;  
  11.      }  
  12.   
  13.      @Override  
  14.      protected Object determineCurrentLookupKey() {  
  15.             return DataSourceContextHolder. getDbType();  
  16.      }  
  17.   
  18. }  

4. 创建springmvc-servlet.xml文件,然后创建spring配置文件(beans.xml),看一下我的springmvc-servlet.xml文件。
   这里配置了一个注解扫描器,一般填自己的主包名就可以了,他会自动扫描我的com.baimi.routerweb包下面所有的带注解的类或者方法,常变量等。
   还配置了一个视图解析器(如果需要用到jsp文件,就需要配置此解析器)
   最后引入我的spring的配置文件:beans.xml文件

[html] view plaincopy
  1. <?xml version="1.0" encoding"UTF-8"?>  
  2. <beans xmlns"http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context"http://www.springframework.org/schema/context"  
  5.        xmlns:mvc"http://www.springframework.org/schema/mvc"  
  6.        xsi:schemaLocation= "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
  7.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  9.   
  10.       <!-- 注解扫描器 -->  
  11.       <context:component-scan base-package ="com.baimi.routerweb"/>  
  12.         
  13.       <!-- 配置试图解析器 -->  
  14.       <bean class"org.springframework.web.servlet.view.InternalResourceViewResolver" >  
  15.              <property name ="prefix" value="/"></ property>  
  16.              <property name ="suffix" value=".jsp"></ property>  
  17.       </bean >  
  18.         
  19.       <import resource ="classpath:beans.xml"/>  
  20.   
  21. </beans>  


5. 在beans.xml文件中配置数据源。我这里配置的三个数据源,不过在配置数据源之前,先配置一下注解扫描器。然后我接着配置了三个数据源,然后配置动态数据源

[html] view plaincopy
  1. <context:component-scan base-package ="com" />  
  2.   
  3.    <!-- 多数据源配置 -->  
  4.    <bean id ="ds_admin" class"org.apache.commons.dbcp.BasicDataSource" >  
  5.           <property name ="driverClassName" value"com.mysql.jdbc.Driver"></property >  
  6.           <property name ="url" value"jdbc:mysql://192.168.19.72:3307/100msh_admin" ></property >  
  7.           <property name ="username" value="root"></ property>  
  8.           <property name ="password" value="root"></ property>  
  9.    </bean >  
  10.    <bean id ="ds_partner" class"org.apache.commons.dbcp.BasicDataSource" >  
  11.           <property name ="driverClassName" value"com.mysql.jdbc.Driver"></property >  
  12.           <property name ="url"  
  13.                 value"jdbc:mysql://192.168.19.72:3308/100msh_partner" ></property >  
  14.           <property name ="username" value="root"></ property>  
  15.           <property name ="password" value="root"></ property>  
  16.    </bean >  
  17.    <bean id ="ds_mop" class="org.apache.commons.dbcp.BasicDataSource">  
  18.           <property name ="driverClassName" value"com.mysql.jdbc.Driver"></property >  
  19.           <property name ="url" value"jdbc:mysql://192.168.19.72:3309/100msh_mop" ></property >  
  20.           <property name ="username" value="root"></ property>  
  21.           <property name ="password" value="root"></ property>  
  22.    </bean >  
  23.   
  24.    <!-- 动态配置数据源 -->  
  25.    <bean id ="dataSource" class"com.baimi.routerweb.datasource.DynamicDataSource" >  
  26.           <property name ="targetDataSources">  
  27.                 <map key-type ="java.lang.String">  
  28.                       <entry value-ref ="ds_admin" key"ds_admin"></entry >  
  29.                       <entry value-ref ="ds_partner" key"ds_partner"></entry >  
  30.                       <entry value-ref ="ds_mop" key="ds_mop"></ entry>  
  31.                 </map >  
  32.           </property >  
  33.           <property name ="defaultTargetDataSource" ref"ds_mop"></property >      <!-- 默认使用ds1的数据源 -->  
  34.    </bean >  

6. 在beans.xml文件中创建sqlSessionFactory实例

[html] view plaincopy
  1. <!-- 创建SqlSessionFactory -->  
  2. <bean id ="sqlSessionFactoryBean" class"org.mybatis.spring.SqlSessionFactoryBean" >  
  3.        <!-- 指定数据源 -->  
  4.        <property name ="dataSource" ref="dataSource" />  
  5.        <!-- 指定mybatis 的配置文件 -->  
  6.        <property name ="configLocation" value"classpath:mybatis-config.xml" />  
  7. </bean >  

7. 在beans.xml文件中配置事物、事物的传播性

[html] view plaincopy
  1. <!-- 配置事务 -->  
  2.       <bean id ="transactionManager"  
  3.              class"org.springframework.jdbc.datasource.DataSourceTransactionManager" >  
  4.              <property name ="dataSource" ref="dataSource"></ property>  
  5.       </bean >  
  6.   
  7.       <!-- 映射接口 -->  
  8.       <bean class ="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  9.              <property name ="basePackage" value"com.baimi.routerweb.mapper"></property >  
  10.       </bean >  
  11.   
  12.       <!-- 配置事务的传播特性 -->  
  13.       <tx:advice id ="txAdvice" transaction-manager="transactionManager">  
  14.              <tx:attributes >  
  15.                    <tx:method name ="find*" read-only="true" />  
  16.                    <tx:method name ="get*" read-only="true" />  
  17.                    <tx:method name ="query*" read-only="true" />  
  18.                    <tx:method name ="add*" propagation="REQUIRED" />  
  19.                    <tx:method name ="update*" propagation="REQUIRED" />  
  20.                    <tx:method name ="del*" propagation="REQUIRED" />  
  21.              </tx:attributes >  
  22.       </tx:advice >  

8. 在beans.xml文件中配置AOP,注意这里,expression 后面一定要是自己程序所在包名,复制的时候一定要改掉

[html] view plaincopy
  1. <!-- 配置AOP -->  
  2. <aop:config >  
  3.        <!-- 切点 -->  
  4.        <aop:pointcut expression ="execution(* com.baimi.routerweb.service..*.*(..))"  
  5.              id"pointcut" />  
  6.        <aop:advisor advice-ref ="txAdvice" pointcut-ref="pointcut" />  
  7. </aop:config >  

9. 创建一个User对象,配置User.xml文件。写一个UserMapper接口,用来操作User对象的接口。
    User类属性有点长,请忽略这些属性

[java] view plaincopy
  1.   public class User {  
  2.      private int userId;  
  3.      private int compId;  
  4.      private String euserName;  
  5.      private String euserPhone;  
  6.      private int euserStatus;  
  7.      private String eAddTime;  
  8.      private String eLeaveTime;  
  9.      private String eUserNameCn;  
  10.      private int cUserId;  
  11.      private String scDown;  
  12.      private String userDesc;  
  13.   
  14.      public int getUserId() {  
  15.             return userId;  
  16.      }  
  17.   
  18.      public void setUserId( int userId) {  
  19.             this. userId = userId;  
  20.      }  
  21.   
  22.      public int getCompId() {  
  23.             return compId;  
  24.      }  
  25.   
  26.      public void setCompId( int compId) {  
  27.             this. compId = compId;  
  28.      }  
  29.   
  30.      public String getEuserName() {  
  31.             return euserName;  
  32.      }  
  33.   
  34.      public void setEuserName(String euserName) {  
  35.             this. euserName = euserName;  
  36.      }  
  37.   
  38.      public String getEuserPhone() {  
  39.             return euserPhone;  
  40.      }  
  41.   
  42.      public void setEuserPhone(String euserPhone) {  
  43.             this. euserPhone = euserPhone;  
  44.      }  
  45.   
  46.      public int getEuserStatus() {  
  47.             return euserStatus;  
  48.      }  
  49.   
  50.      public void setEuserStatus( int euserStatus) {  
  51.             this. euserStatus = euserStatus;  
  52.      }  
  53.   
  54.      public String geteAddTime() {  
  55.             return eAddTime;  
  56.      }  
  57.   
  58.      public void seteAddTime(String eAddTime) {  
  59.             this. eAddTime = eAddTime;  
  60.      }  
  61.   
  62.      public String geteLeaveTime() {  
  63.             return eLeaveTime;  
  64.      }  
  65.   
  66.      public void seteLeaveTime(String eLeaveTime) {  
  67.             this. eLeaveTime = eLeaveTime;  
  68.      }  
  69.   
  70.      public String geteUserNameCn() {  
  71.             return eUserNameCn;  
  72.      }  
  73.   
  74.      public void seteUserNameCn(String eUserNameCn) {  
  75.             this. eUserNameCn = eUserNameCn;  
  76.      }  
  77.   
  78.      public int getcUserId() {  
  79.             return cUserId;  
  80.      }  
  81.   
  82.      public void setcUserId( int cUserId) {  
  83.             this. cUserId = cUserId;  
  84.      }  
  85.   
  86.      public String getScDown() {  
  87.             return scDown;  
  88.      }  
  89.   
  90.      public void setScDown(String scDown) {  
  91.             this. scDown = scDown;  
  92.      }  
  93.   
  94.      public String getUserDesc() {  
  95.             return userDesc;  
  96.      }  
  97.   
  98.      public void setUserDesc(String userDesc) {  
  99.             this. userDesc = userDesc;  
  100.      }  
  101. }    


编写UserMapper接口,这里面的方法是用来操作User对象的,我这里只是一个简单的根据手机号码,得到这个User对象
[java] view plaincopy
  1. public interface UserMapper {  
  2.      public User getUser(String euserPhone);  
  3. }  

编写User.xml文件,该文件里面配置User类里面的属性和表中的那些字段进行对应,以及在UserMapper中定义的查询的方法,在User.xml中写上对应的查询语句,我这里是查的t_expand_user 表

[html] view plaincopy
  1. <?xml version="1.0" encoding"UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >  
  5.   
  6. <mapper namespace"com.baimi.routerweb.mapper.UserMapper" >  
  7.       <resultMap type ="User" id="usermap">  
  8.              <result property ="userId" column="euser_id" />  
  9.              <result property ="compId" column="comp_id" />  
  10.              <result property ="euserName" column="euser_name" />  
  11.              <result property ="euserPhone" column="euser_phone" />  
  12.              <result property ="euserStatus" column="euser_status" />  
  13.              <result property ="eAddTime" column="e_add_time" />  
  14.              <result property ="eLeaveTime" column="e_leave_time" />  
  15.              <result property ="eUserNameCn" column="euser_name_cn" />  
  16.              <result property ="cUserId" column="user_id" />  
  17.              <result property ="scDown" column="sc_own" />  
  18.              <result property ="userDesc" column="euser_desc" />  
  19.       </resultMap >  
  20.   
  21.       <!-- 查询一条记录 -->  
  22.       <select id ="getUser" parameterType="java.lang.String" resultMap"usermap">  
  23.             select * from t_expand_user where euser_phone=#{euserPhone}  
  24.       </select >  
  25.   
  26. </mapper>  


10. 将User类的路径以及User.xml文件的路径在mybatis-config.xml文件中配置

[html] view plaincopy
  1. <?xml version="1.0" encoding"UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd" >  
  5. <configuration>  
  6.   
  7.       <!-- 别名 -->  
  8.       <typeAliases >  
  9.              <typeAlias type ="com.baimi.routerweb.entity.User" alias"User" />  
  10.       </typeAliases >  
  11.       <mappers >  
  12.              <mapper resource ="com/baimi/routerweb/mapper/User.xml" />  
  13.       </mappers >  
  14. </configuration>  

11. 写一个UserService接口(接口里面的方法和UserMapper接口里面的方法一致,返回值和参数可不同,方法名最好一致),并写UserServiceImpl来实现UserService接口

[java] view plaincopy
  1. public interface UserService {  
  2.      public User getUser(String euserPhone);  
  3. }  

UserServiceImpl里面要做的就是调用UserMapper中的方法
[java] view plaincopy
  1. import javax.annotation.Resource;  
  2.   
  3. import org.springframework.stereotype.Service;  
  4.   
  5. import com.baimi.routerweb.datasource.DataSourceContextHolder;  
  6. import com.baimi.routerweb.datasource.DataSourceType;  
  7. import com.baimi.routerweb.entity.User;  
  8. import com.baimi.routerweb.mapper.UserMapper;  
  9. import com.baimi.routerweb.service.UserService;  
  10.   
  11. @Service  
  12. public class UserServiceImpl implements UserService {  
  13.   
  14.      @Resource(name = "userMapper")  
  15.      private UserMapper userMapper;  
  16.   
  17.      @Override  
  18.      public User getUser(String euserPhone) {  
  19.           DataSourceContextHolder. setDbType(DataSourceType.SOURCE_MOP);  
  20.             return userMapper.getUser(euserPhone);  
  21.      }  
  22.   
  23. }  


12.写Controller类,并在其中写相对应的方法,给外部调用,这里主要就是两行代码:注意每次要和数据库打交道之前,切换到相对应的数据库,我的DataSourceType. SOURCE_MOP="ds_mop"; 这里的名字一定要和beans.xml里面配置的数据源的名称一样

[java] view plaincopy
  1. //切换数据库  
  2. DataSourceContextHolder. setDbType(DataSourceType. SOURCE_MOP);  
  3. //从数据库中得到该用户的数据  
  4. User user= userService.getUser(userId);  

整个Controller类的代码
[java] view plaincopy
  1.   
[java] view plaincopy
  1. import javax.annotation.Resource;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import javax.servlet.http.HttpServletResponse;  
  4.   
  5. import net.sf.json.JSONObject;  
  6.   
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.RequestMapping;  
  9.   
  10. import com.baimi.routerweb.common.Constant;  
  11. import com.baimi.routerweb.common.ErrorHandle;  
  12. import com.baimi.routerweb.datasource.DataSourceContextHolder;  
  13. import com.baimi.routerweb.datasource.DataSourceType;  
  14. import com.baimi.routerweb.entity.User;  
  15. import com.baimi.routerweb.service.UserService;  
  16. import com.baimi.routerweb.util.HttpUtil;  
  17.   
  18. @Controller  
  19. public class MainController {  
  20.   
  21.      @Resource(name = "userServiceImpl")  
  22.      private UserService userService;  
  23.   
  24.      @RequestMapping("/login.do")  
  25.      public String login(HttpServletRequest request, HttpServletResponse response) {  
  26.             // 获取客户端传过来的code的值  
  27.            String code = request.getParameter( "code");  
  28.             if (code == null || "".equals(code)) {  
  29.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  30.            }  
  31.             // 从微信得到token的值  
  32.            JSONObject objToken = HttpUtil.httpRequest(Constant.URL_WEIXIN_TOKEN, "GET"null);  
  33.             if (objToken == null || "".equals(objToken)) {  
  34.                  return ErrorHandle.getError(ErrorHandle.SERVICE_UNRESPONSE, "service unresponse");  
  35.            }  
  36.             if (!objToken.has( "access_token")) {  
  37.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  38.            }  
  39.             //根据token和code得到UserId  
  40.            JSONObject objUser = HttpUtil.httpRequest(Constant.URL_GET_USERID,  
  41.                       "POST""access_token=" + objToken.getString("access_token" )+ "&code=" + code + "&agentid=1");  
  42.             if(objUser== null|| "".equals(objUser)){  
  43.                  return ErrorHandle.getError(ErrorHandle.SERVICE_UNRESPONSE, "service unresponse");  
  44.            }  
  45.             if(!objUser.has( "UserId")){  
  46.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  47.            }  
  48.            String userId=objUser.getString( "UserId");  
  49.             //切换数据库  
  50.           DataSourceContextHolder. setDbType(DataSourceType.SOURCE_MOP);  
  51.             //从数据库中得到该用户的数据  
  52.            User user= userService.getUser(userId);  
  53.             if(user!= null){  
  54.                 JSONObject rtObj = new JSONObject();  
  55.                 rtObj.put( "userId", String.valueOf(user.getUserId()));  
  56.                  return rtObj.toString();     
  57.            }  
  58.             return ErrorHandle.getError(ErrorHandle.INVALID_USER,"invalid user");  
  59.      }  
  60. }  

访问路径:locahost:8080/RouterWeb/login.do


demo下载地址:http://download.csdn.net/detail/q908555281/9357757



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看mysql sql执行器优化后的sql

EXPLAIN EXTENDED select s.* from student s where s.sid in ( select sid from sc where sc.cid 0 and sc.score 100); show WARNINGS;

git ssh拉取代码_win10下git初始安装及配置工作

git安装从https://git-scm.com/https://git-scm.com/download/win 中下载安装包&#xff0c;点击exe文件运行&#xff0c;选择安装路径即可安装。git配置初次运行git前的配置&#xff0c;新建文件夹1、 新建一个文件夹&#xff0c;用来存放代码的文件夹---2、 打开文件夹&#…

联想m7400pro清零方法_联想打印机怎么清零 联想打印机清零方法【教程】

今天小编为读者挑选出了联想 打印机 部分机型的清零方式&#xff0c;希望阅读完这篇文章能帮助到各位。LJ3010A、LJ3116A、LJ3220A清零方式先点击控制面板上的“联机”按钮&#xff0c;让打印机处于脱机状态&#xff0c;再点击“执行”按钮进行打印。先点击控制面板上的“联机”…

c语言中数组名可以与其他变量名相同,C语言初学者入门讲座 第九讲 数组(1)...

C语言初学者入门讲座 第九讲 数组(1)(2007-01-17 11:39:19)数组在程序设计中&#xff0c;为了处理方便&#xff0c;把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中&#xff0c;数组属于构造数据类型。一个数组可以分解为…

pb通过对象名称调用对象_C++ 可调用对象(二)

点击上方“蓝字”&#xff0c;发现更多精彩。本文在前一篇关于函数对象、bind 函数的基础上&#xff0c;对 C 中 lambda不表达式的使用进行总结。lambda01PART定义一个 lambda 表达式表示一个可调用的代码单元&#xff0c;可以理解为是一个未命名的内敛函数。类似任何函数&…

交换机虚拟化和堆叠的区别_核心交换机和普通交换机有何区别?

提起核心交换机与普通交换机有什么区别&#xff1f;相信很多朋友都有点迷惑&#xff0c;今天我们一起来了解下。核心交换机并不是交换机的一种类型&#xff0c;而是放在核心层(网络主干部分)的交换机叫核心交换机。一般大型企业网络和网吧需要购买核心交换机来实现强大的网络扩…

tmpfiles.d导致的unix:///tmp/supervisor.sock no such file坑(待续)

为什么80%的码农都做不了架构师&#xff1f;>>> 系统环境: CentOS Linux release 7.1.1503 (Core) supervisor 3.3.1今天初七&#xff0c;刚放完假需要去supervisor restart下程序。发现报了这个错误。但是看supervisord的进程还在运行&#xff0c;项目代码也还在…

springMVC两种方式实现多文件上传及效率比较

springMVC实现多文件上传的方式有两种&#xff0c;一种是我们经常使用的以字节流的方式进行文件上传&#xff0c;另外一种是使用springMVC包装好的解析器进行上传。这两种方式对于实现多文件上传效率上却有着很大的差距&#xff0c;下面我们通过实例来看一下这两种方式的实现方…

c语言 个位,如何才能给C语言增加几个位操作函数

在汇编语言中有直接对位进行操作的指令&#xff0c;如置位、复位、位取反、测试某一位等&#xff0c;这对于硬件操作十分方便&#xff0c;在C语言中尽管也提供了一些位操作手段&#xff0c;如按位与、按位或、按位取反等&#xff0c;但它们是对一个字节进行操作&#xff0c;如要…

hsrp 切换_HSRP、VRRP、GLBP | 网络工程师之网关高可用、冗余

在RS的学习过程中我们接触到很多网络技术&#xff0c;后面就把工作中常用的拿来与大家分享&#xff0c;本次我们来分享网关冗余技术。当我们的网关设备无法使用堆叠(VSS,istack&#xff0c;IRF)&#xff0c;或者不同厂商设备的时候&#xff0c;非常有效&#xff0c;能够提供网关…

Linux文件系统详解

从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。本文参考&#xff1a; http://blog.chinaunix.net/uid-8698570-id-1763151.htmlhttp://www.iteye.com/topic/816268http://soft.chinabyte.co…

opencv机器学习线性回归_机器学习(线性回归(二))

Lasso与岭回归的同和异Lasso、岭回归都可以预防模型过拟合Lasso回归惩罚项为L1正则&#xff0c;岭回归为L2正则Lasso回归可用来特征选择&#xff0c;岭回归则不能Lasso回归用坐标下降法求解&#xff0c;岭回归用梯度下降法求解。为什么Lasso可用于特征选择&#xff0c;而岭回归…

把EXCEL用程序导入到ORACLE中(SpringMVC+MyBatis)

前提&#xff1a;项目中需要把EXCEL数据批量导入oracle中两张表中。如是用到了poi技术。分别导入poi-3.11-beta2.jar和poi-ooxml-schemas-3.9.jar这两个包。EXCEL数据如下 第一步&#xff1a;修改spring框架配置文件。 springmvc-servlet.xml加上&#xff1a; <!-- 文件上传…

access实例_西门子PLC1200组态王跟Access数据库-⑥组态王变量

西门子PLC1200&#xff0c;组态王跟Access数据库--⑥组态王变量组态王的变量设置1.0 变量设置如下图所示&#xff0c;选择数据词典&#xff0c;里面是系统变量跟新建的变量&#xff0c;选择新建1.1 如下图&#xff0c;从上往下依次&#xff0c;变量名(这个应该知道)&#xff0c…

Android 撸起袖子,自己封装 DialogFragment

前言 具体的代码以及示例我都放上 Github 了&#xff0c;有需要的朋友可以去看一下 DialogFragmentDemos&#xff0c;欢迎 star 和 fork. 本文的主要内容 DialogFragment 是什么创建通用的 CommonDialogFragment实现各种类型的 DialogFragment在写正文之前&#xff0c;先来一波…

as模拟器文件夹路径_EGG Switch手机模拟器怎么用?中文教程来了......

大家好&#xff0c;小鸡妹我又来啦。自从昨天曝光了美国NX工作室的EGG模拟器之后&#xff0c;推文底下就多了一千多条留言&#xff0c;说啥的都有。不过小鸡妹大概总结了一下&#xff0c;发现下面这几条问题&#xff0c;出现的频率最高&#xff1a;① 找不到网址&#xff1b;②…

郁金香汇编代码注入怎么写看雪_世界黑客编程大赛冠军的汇编代码 你见过吗?...

前几天发布了一篇“雷军22年前写的汇编代码”的文章&#xff0c;引起网友的热议。有人说汇编是最牛逼的编程语言&#xff0c;没有之一。汇编语言确实厉害&#xff0c;不知道你有没有见过世界黑客编程大赛冠军的作品?雷军编写的的汇编代码有 网友分享了97年Mekka ’97 4K Intro…

变位齿轮重合度计算公式_齿轮“模数”是如何计算的?

模数是决定齿轮大小的因素。齿轮模数被定义为模数制轮齿的一个基本参数&#xff0c;是人为抽象出来用以度量轮齿规模的数。目的是标准化齿轮刀具&#xff0c;减少成本。直齿、斜齿和圆锥齿齿轮的模数皆可参考标准模数系列表。工业定义&#xff1a;齿轮的分度圆是设计、计算齿轮…

获取freemarker处理后的内容

相信很多人都用过freemarker&#xff0c;或做视图&#xff0c;或模板&#xff0c;或生成静态文件等,但是有多少人做过这样的应用&#xff0c;通过模板后&#xff0c;不是要输出静态的内容&#xff0c;而是直接在代码中获取处理模板后的内容&#xff0c;研究了下API,freemarker里…

c4.5算法python实现_算法:用Python实现—最优化算法

今天给大家分享一下算法&#xff0c;用python来实现最优化算法。废话不多说&#xff0c;直接上代码&#xff1a;一、二分法函数详见rres&#xff0c;此代码使该算法运行了两次def asdf(x): rres8*x**3-2*x**2-7*x3 return rresi2left0right1while i>0 : i i-1 …