zoukankan      html  css  js  c++  java
  • SpringBoot填坑系列---XML方式配置数据库

    本次只是简单的运用SpringBoot搭建框架,对其原理并不做深入的探究

    1.POM文件

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      4     <modelVersion>4.0.0</modelVersion>
      5 
      6     <groupId>com.hxyz</groupId>
      7     <artifactId>media</artifactId>
      8     <version>0.0.1-SNAPSHOT</version>
      9     <packaging>jar</packaging>
     10 
     11     <name>media</name>
     12     <description>Demo project for Spring Boot</description>
     13 
     14     <parent>
     15       <groupId>org.springframework.boot</groupId>
     16       <artifactId>spring-boot-starter-parent</artifactId>
     17       <version>1.4.0.RELEASE</version>
     18       <relativePath/> <!-- lookup parent from repository -->
     19    </parent>
     20    
     21    <properties>
     22       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     23       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     24       <java.version>1.8</java.version>
     25       <mybatis.version>3.2.2</mybatis.version>
     26    </properties>
     27    
     28    <dependencies>
     29     <dependency>
     30         <groupId>org.springframework.boot</groupId>
     31         <artifactId>spring-boot-starter-web</artifactId>
     32     </dependency>
     33     <dependency>
     34         <groupId>mysql</groupId>
     35         <artifactId>mysql-connector-java</artifactId>
     36     </dependency>
     37     <!-- mybatis -->
     38     <dependency>
     39         <groupId>org.mybatis</groupId>
     40         <artifactId>mybatis</artifactId>
     41         <version>${mybatis.version}</version>
     42     </dependency>
     43     <dependency>
     44         <groupId>org.mybatis</groupId>
     45         <artifactId>mybatis-spring</artifactId>
     46         <version>1.2.0</version>
     47     </dependency>
     48     
     49     <dependency>
     50             <groupId>org.springframework.boot</groupId>
     51             <artifactId>spring-boot-starter</artifactId>
     52         </dependency>
     53         <dependency>
     54             <groupId>org.springframework.data</groupId>
     55             <artifactId>spring-data-commons</artifactId>
     56         </dependency>
     57         <!-- connection pool -->
     58         <dependency>
     59             <groupId>org.springframework</groupId>
     60             <artifactId>spring-jdbc</artifactId>
     61         </dependency>
     62         <dependency>
     63             <groupId>org.apache.tomcat</groupId>
     64             <artifactId>tomcat-jdbc</artifactId>
     65         </dependency>
     66         <dependency>
     67             <groupId>mysql</groupId>
     68             <artifactId>mysql-connector-java</artifactId>
     69         </dependency>
     70        <dependency>
     71             <groupId>com.fasterxml.jackson.core</groupId>
     72             <artifactId>jackson-databind</artifactId>
     73             <version>2.7.0</version>
     74         </dependency>
     75         <dependency>
     76             <groupId>net.sf.json-lib</groupId>
     77             <artifactId>json-lib</artifactId>
     78             <version>2.4</version>
     79             <classifier>jdk15</classifier>
     80         </dependency>
     81         <dependency>
     82             <groupId>com.fasterxml.jackson.module</groupId>
     83             <artifactId>jackson-module-jaxb-annotations</artifactId>
     84             <version>2.7.0</version>
     85         </dependency>
     86          <dependency>
     87             <groupId>net.sf.json-lib</groupId>
     88             <artifactId>json-lib</artifactId>
     89             <version>2.4</version>
     90             <classifier>jdk15</classifier>
     91         </dependency>
     92         <dependency>
     93             <groupId>dom4j</groupId>
     94             <artifactId>dom4j</artifactId>
     95             <version>1.1</version>
     96         </dependency>
     97         <dependency>
     98             <groupId>org.apache.commons</groupId>
     99             <artifactId>commons-lang3</artifactId>
    100             <version>3.1</version>
    101         </dependency>
    102         <dependency>
    103             <groupId>org.codehaus.jackson</groupId>
    104             <artifactId>jackson-mapper-asl</artifactId>
    105             <version>1.9.13</version>
    106         </dependency>
    107         <dependency>
    108             <groupId>org.codehaus.jackson</groupId>
    109             <artifactId>jackson-core-asl</artifactId>
    110             <version>1.9.13</version>
    111         </dependency>
    112     </dependencies>
    113 
    114     <build>
    115         <plugins>
    116             <plugin>
    117                 <groupId>org.springframework.boot</groupId>
    118                 <artifactId>spring-boot-maven-plugin</artifactId>
    119             </plugin>
    120         </plugins>
    121     </build>
    122 
    123 
    124 </project>

    2.通过MyBatis-generate自动生成实体类和mapper

    3.配置XML文件

    在resource下面新建applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
        xmlns:p="http://www.springframework.org/schema/p"  
        xmlns:aop="http://www.springframework.org/schema/aop"   
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:jee="http://www.springframework.org/schema/jee"  
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation="    
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    
     <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
            <!-- Connection Info -->
            <property name="driverClassName" value="${jdbc.driver}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
    
            <!-- Connection Pooling Info -->
            <property name="maxActive" value="10" />
            <property name="maxIdle" value="50" />
            <property name="minIdle" value="0" />
            <property name="defaultAutoCommit" value="false" />
        </bean>
         <!-- MyBatis配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
            <property name="typeAliasesPackage" value="com.hxyz.media.entity" />
            <!-- 显式指定Mapper文件位置 -->
            <property name="mapperLocations" value="classpath:/mapper/*Mapper.xml" />
        </bean>
        <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.hxyz.media.mapper" />
        </bean>
    </beans>    
    

    在resource路径下新建application.properties

    1 server.port=8089
    2 jdbc.driver=com.mysql.jdbc.Driver
    3 jdbc.url=jdbc:mysql://localhost:3306/
    4 jdbc.username=jack
    5 jdbc.password=123456

    至此,我们的xml文件已经配置好了,我们可以写一个简单的控制器来测试下数据库是否已经连通

    4.测试是否连通

    1 public interface FactoryService {
    2     
    3     public List<FactoryEntity> findFactory();
    4 
    5 }
    @Service
    public class FactoryServiceImpl implements FactoryService{
        @Resource
        private FactoryEntityMapper factoryMaaper;
    
        @Override
        public List<FactoryEntity> findFactory() {
            FactoryEntityExample example=new FactoryEntityExample();
            Criteria createCriteria = example.createCriteria();
            List<FactoryEntity> selectByExample = factoryMaaper.selectByExample(example);
            return selectByExample;
        }
    
    }
     1 @RestController
     2 @RequestMapping(value="front/factory")
     3 public class FactoryController {
     4     @Resource
     5     private FactoryService factoryService;
     6     
     7     @RequestMapping(value="list")
     8     @ResponseBody
     9     public ResponseVo queryAll(){
    10         ResponseVo responseVo=new ResponseVo();
    11         List<FactoryEntity> factoryEntityList = factoryService.findFactory();
    12         responseVo.setData(factoryEntityList);
    13         return responseVo;
    14         
    15     }
    16     
    17 
    18 }

    所以,我们猜一下,现在我请求下,数据会正常的返回么

    我们现在请求下

    http://localhost:8089/front/factory/list

    返回的是

     1 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.hxyz.media.mapper.FactoryEntityMapper] found for dependency [com.hxyz.media.mapper.FactoryEntityMapper]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
     2     at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     3     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     4     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     5     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     6     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     7     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     8     at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
     9     at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    10     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    11     ... 34 common frames omitted

    没有找到FactoryEntityMapper,但是我们明明是在xml中配置了mapperScannerConfigue

    这是因为springboot在启动后并不会主动的去读取xml文件,只会根据类文件间的依赖去加载spring的bean类,所以springboot并没有发现xml中的配置

    我们可以在启动类中添加

    @ImportResource(locations = "classpath*:/applicationContext.xml")

    完整的启动类如下

    1 @ImportResource(locations = "classpath*:/applicationContext.xml")
    2 @SpringBootApplication
    3 //@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
    4 public class MediaApplication {
    5 
    6     public static void main(String[] args) {
    7         SpringApplication.run(MediaApplication.class, args);
    8     }
    9 }

    这时我们再启动就可以返回数据了

     

  • 相关阅读:
    两个容器盛水法。
    Windows程序设计 读书笔记 位图和BitBlt。
    VC DrawText显示多行,包括设置行距。
    内存管理函数
    GDI+
    二进制法。
    Windows程序设计 读书笔记 打印机。
    逆推法
    DDB和DIB概念区别 及 程序示例。
    Windows程序设计 读书笔记 剪贴板。
  • 原文地址:https://www.cnblogs.com/xmzJava/p/7076460.html
Copyright © 2011-2022 走看看