当前位置:Gxlcms > 数据库问题 > SpringBoot填坑系列---XML方式配置数据库

SpringBoot填坑系列---XML方式配置数据库

时间:2021-07-01 10:21:17 帮助过:3人阅读

<?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

  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:p="http://www.springframework.org/schema/p"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xmlns:jee="http://www.springframework.org/schema/jee"
  8. xmlns:tx="http://www.springframework.org/schema/tx"
  9. xsi:schemaLocation="
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  11. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  12. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  13. http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
  14. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
  15. <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
  16. <!-- Connection Info -->
  17. <property name="driverClassName" value="${jdbc.driver}" />
  18. <property name="url" value="${jdbc.url}" />
  19. <property name="username" value="${jdbc.username}" />
  20. <property name="password" value="${jdbc.password}" />
  21. <!-- Connection Pooling Info -->
  22. <property name="maxActive" value="10" />
  23. <property name="maxIdle" value="50" />
  24. <property name="minIdle" value="0" />
  25. <property name="defaultAutoCommit" value="false" />
  26. </bean>
  27. <!-- MyBatis配置 -->
  28. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  29. <property name="dataSource" ref="dataSource" />
  30. <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
  31. <property name="typeAliasesPackage" value="com.hxyz.media.entity" />
  32. <!-- 显式指定Mapper文件位置 -->
  33. <property name="mapperLocations" value="classpath:/mapper/*Mapper.xml" />
  34. </bean>
  35. <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
  36. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  37. <property name="basePackage" value="com.hxyz.media.mapper" />
  38. </bean>
  39. </beans>

在resource路径下新建application.properties

  1. <span style="color: #008080">1</span> server.port=8089
  2. <span style="color: #008080">2</span> jdbc.driver=<span style="color: #000000">com.mysql.jdbc.Driver
  3. </span><span style="color: #008080">3</span> jdbc.url=jdbc:mysql:<span style="color: #008000">//</span><span style="color: #008000">localhost:3306/</span>
  4. <span style="color: #008080">4</span> jdbc.username=<span style="color: #000000">jack
  5. </span><span style="color: #008080">5</span> jdbc.password=123456

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

4.测试是否连通

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

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

我们现在请求下

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

返回的是

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

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

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

我们可以在启动类中添加

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

完整的启动类如下

  1. <span style="color: #008080">1</span> @ImportResource(locations = "classpath*:/applicationContext.xml"<span style="color: #000000">)
  2. </span><span style="color: #008080">2</span> <span style="color: #000000">@SpringBootApplication
  3. </span><span style="color: #008080">3</span> <span style="color: #008000">//</span><span style="color: #008000">@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})</span>
  4. <span style="color: #008080">4</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span><span style="color: #000000"> MediaApplication {
  5. </span><span style="color: #008080">5</span>
  6. <span style="color: #008080">6</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
  7. </span><span style="color: #008080">7</span> SpringApplication.run(MediaApplication.<span style="color: #0000ff">class</span><span style="color: #000000">, args);
  8. </span><span style="color: #008080">8</span> <span style="color: #000000"> }
  9. </span><span style="color: #008080">9</span> }

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

 

 

SpringBoot填坑系列---XML方式配置数据库

标签:tco   default   mysq   rom   sql   jdb   osi   连通   driver   

人气教程排行