无锡建设网站的公司,杭州定制网站制作,app运营方案策划,wordpress2016目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目#xff0c;引入相应的启动器#xff0c;编写数据库对应的“实体类”③额外添加pom.xml文… 目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目引入相应的启动器编写数据库对应的“实体类”③额外添加pom.xml文件依赖④ 编写application.properties 配置文件⑤ 编写自定义的关于“DruidDataSource“ 的 配置类” 2. 使用“注解”的方式整合MyBatis ( 使用 “注解” 来“直接”操作数据库)3. 使用“配置文件”的方式整合MyBatis ( 使用 “XxxMapper.java文件 XxxMapper.xml文件” 来 操作数据库) 作者简介 一只大皮卡丘计算机专业学生正在努力学习、努力敲代码中! 让我们一起继续努力学习 该文章参考学习教材为 《Spring Boot企业级开发教程》 黑马程序员 / 编著 文章以课本知识点 代码为主线结合自己看书学习过程中的理解和感悟 最终成就了该文章 文章用于本人学习使用 同时希望能帮助大家。 欢迎大家点赞 收藏⭐ 关注哦 侵权可联系我进行删除如果雷同纯属巧合
一、Spring Boot”数据访问概述“ Spring Data 是 Spring 提供的一个用 于简化数据库访问、支持云服务的开源框架。它是一个 伞形项目包含了 大量关系型数据库 及 非关系型数据库 的 数据访问解决方案其设计目的是使我们可以快速且简单地使用各种数据访问技术。 Spring Boot默认采用整合 Spring Data 的方式统一处理数据访问层通过添加大量自动配置引入各种数据访问模板 xxxTemplate 以及统一的 Repository 接口从而达到简化数据访问层的操作。 Spring Data 提供了 多种类型数据库支持Spring Boot对 Spring Data支持的数据库进行了 整合管理 提供了 各种依赖启动器。 常见的 数据库依赖启动器如下表所示 名称描述spring-boot-starter-data-jpaSpring Data JPA 与 Hibernate 的启动器spring-boot-starter-data-mongodbMongoDB 和 Spring Data MongoDB 的启动器spring-boot-starter-data-neo4jNeo4j 图数据库 和 Spring Data Neo4j 的启动器spring-boot-starter-data-redisRedis键值数据存储 与 Spring Data Redis 和 Jedis客户端 的启动器需要说明的是MyBatis作为操作数据库的流行框架Spring Boot没有提供MyBatis 场景 依赖但是 MyBatis开发团队自己适配了Spring Boot提供了 mybatis-spring-boot-starter 依赖启动器实现数据访问操作。 二、Spring Boot”整合MyBatis” MyBatis 是一款优秀的持久层框架它支持 定制化SQL、存储过程以及高级映射避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的 XML 或 注解 配置和映射原生信息并将 接口 和Java的 POJOs ( Plain Old Java Objects普通Java对象) 映射成数据库中的记录。Spring Boot 官方虽然没有对MyBatis进行整合但是MyBatis 团队自行适配了对应的启动器进一步简化了MyBatis 对数据的操作。 1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”) 因为SpringBoot 框架开发很便利所以实现 Spring Boot 与 数据访问层框架( 例如MyBatis ) 的整合非常简单主要是 引入对应的依赖启动器并进行 数据库相关参数设置 即可。 ① 数据准备 (导入Sql文件) 先创建了一个 数据库springbootdata然后创建了两个表 t_article和t_comment 并向表中插入数据。 其中评论表t_comment 的a_id 与文章表t_article 的主键id 相关联 ( t_article的主键作为t_comment表的 “外键”)。 springbootdata.sql ② 创建项目引入相应的启动器编写数据库对应的“实体类” 使用 Spring Initializr 的方式 创建 Spring Boot 项目。在Dependencies依赖中选择 SQL 模块中的 MySQL 和 MyBatis依赖并根据后续提示完成项目创建。 编写 数据库 对应的 “实体类” Article.java : package com.myh.chapter_04.domain;import java.util.List;
public class Article {private Integer id;private String title;private String content;private ListComment commentList;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getTitle() {return title;}public void setTitle(String title) {this.title title;}public String getContent() {return content;}public void setContent(String content) {this.content content;}public ListComment getCommentList() {return commentList;}public void setCommentList(ListComment commentList) {this.commentList commentList;}Overridepublic String toString() {return Article{ id id , title title \ , content content \ , commentList commentList };}
}Comment.java : package com.myh.chapter_04.domain;public class Comment {private Integer id;private String content;private String atuthor;private Integer aId; //Article表的主键作为Comment表的外键public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getContent() {return content;}public void setContent(String content) {this.content content;}public String getAtuthor() {return atuthor;}public void setAtuthor(String atuthor) {this.atuthor atuthor;}public Integer getaId() {return aId;}public void setaId(Integer aId) {this.aId aId;}Overridepublic String toString() {return Comment{ id id , content content \ , atuthor atuthor \ , aId aId };}
}③额外添加pom.xml文件依赖 额外添加的 pom.xml文件依赖 : !-- druid数据库连接池的依赖启动器 --
!-- 该依赖中的version不能省略因为其是阿里巴巴为了迎合Springboot而有不是Springboot自己制作的 --
dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version
/dependency上述引入的依赖druid-spring-boot-starter同样是 阿里巴巴为了迎合Spring Boot 项目 而适配的 Druid 数据源启动器当在pom.xml文件中引入该启动器后不需要再进行其他额外配置Spring Boot项目会自动识别配置Druid 数据源。需要说明的是上述配置的Druid 数据源启动器内部已经初始化了一些运行参数( 例如 initialSize、minIdle、maxActive 等)如果开发过程中需要修改第三方Druid的运行参数则必须在全局配置文件中修改。 ④ 编写application.properties 配置文件 在 application.properties配置文件 中 进行数据库连接配置。打开全局配置文件 application.properties在配置文件中编写对应的 MySQL数据库连接配置内容如下 application.properties : spring.application.namechapter_06#配置数据库信息
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/springbootdata?useUnicodetruecharacterEncodingutf-8serverTimezoneGMTnullCatalogMeansCurrenttrue
spring.datasource.usernameroot
spring.datasource.passwordroot#添加并配置第三方数据源Druid(数据库连接池)
spring.datasource.typecom.alibaba.druid.pool.DruidDataSource
#初始化时创建的连接数。当应用程序启动时连接池会立即创建这么多连接。
spring.datasource.initialSize20
#连接池中最小的空闲连接数。连接池会维护至少这么多的空闲连接当空闲连接数低于这个数值时连接池会创建新的连接。
spring.datasource.minIdle10
#连接池中最大的活动连接数。这表示在任何时候连接池中的活动即被使用的连接数不会超过这个数值。如果所有连接都在使用中并且达到这个上限那么新的数据库连接请求将被阻塞或拒绝直到有连接可用。
spring.datasource.maxActive100配置文件中修改了 Druid数据源的类型、初始化连接数、最小空闲连接数、最大连接数如果有其他需求还可以参考 Druid 属性设置更多参数。 在上面的 application.properties配置文件 中添加 上述配置 后会发现initialSize、minIdle 和 maxActive 底纹为黄色 (IDEA工具中的显示色) 这是因为在Spring Boot 提供的 数据源自动配置类 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties 中没有 与这些 参数对应的默认属性所以 这些设置的属性值 ”无法识别“和生效 但这几个属性是 有用的为 “自定义配置类” 服务的。然后接下来的操作是就是 编写一个自定义配置类将配置文件中的属性 注入到DruidDataSource类的属性中 ps 为什么要 创建 一个 返回值 为 DruidDataSource的 自定义 “配置类” 呢 因为要用到 application.properties 中 添加的“配置参数” 通过 ConfigurationProperties( )注解 来将application.properties中的相关参数注入到DruidDataSource类中通过这些“配置参数”来 修改Druid中的默认配置。 ⑤ 编写自定义的关于“DruidDataSource“ 的 配置类” 编写 自定义的“配置类” : 该 配置的作用 创建一个 DruidDataSource对象然后将 application.properties 中关于Druid中的参数注入到 DruidDataSource对象 package com.myh.chapter_04.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;Configuration //标记该类为“配置类”
public class DataSourceConfig { //关于DruidDataSource的“配置类”ConfigurationProperties(spring.datasource) //将配置文件中的spring.datasource开头的“属性值”注入到DruidDataSource对象中的“属性”中Bean //将该方法的返回值“对象”交给IOC容器管理public DataSource getDruid() {return new DruidDataSource(); //返回值为一个DruidDataSource对象}
}在上面的代码中通过 Configuration注解标识了一个自定义配置类DataSourceConfig在该配置类中通过 Bean注解注入了一个DataSource实例对象ConfigurationProperties(prefix “spring.datasource”) 注解的作用是将全局配置文件中以spring.datasource开头的属性值注入到 getDruid( )方法返回的DataSource类对象属性中,这样就可以完成第三方数据源参数值的注入。 2. 使用“注解”的方式整合MyBatis ( 使用 “注解” 来“直接”操作数据库) 相比 Spring 与 Mybatis的整合Spring Boot与MyBatis的整合会使项目开发更加简便同时还支持 XML 和 注解 两种配置方式。 通过 “注解” 的方式 整合Mybatis 的例子如 CommentMapper.java (接口) : package com.myh.chapter_05.mapper;import com.myh.chapter_05.domain.Comment;
import org.apache.ibatis.annotations.*;Mapper //将该接口加入到IOC容器中
public interface CommentMapper {Select(select * from t_comment where id #{id})public Comment findById(Integer id);Insert(insert into t_comment(content,author,a_id) values(#{content},#{author}#{aId}))public int insertComment(Comment comment);Update(update t_comment et content #{content} where id #{id})public int updateComment(Comment comment);Delete(delete from t_comment where id #{id})public int deleteComment(Integer id);
}上面的代码中Mapper( )注解表示该类是一个MyBatis接口文件并保证能够被Spring Boot自动扫描到 Spring 容器中在该接口内部分别通过 Select( )、lnsert( )、Update( )、Delete( ) 注解配合 SQL 语句完成了对数据库表t_comment表数据的 增删改查 操作。 ”增删改查“注解描述Select( )、Insert( )、Update( )、Delete( )这四个注解用于 映射“sql语句” 到 接口方法上 这样调用接口方法就能操作数据库。 注意点 上面的CommentMapper.java 的代码中了添加 Mapper 注解如果编写的Mapper接口过多时需要重复为每一个接口文件添加 Mapper 注解。为了避免这种麻烦可以直接在Spring Boot项目启动类上添加MapperScan(“xxx”)注解不需要再逐个添加 Mapper 注解。MapperScan(“xxx”)注解的作用和 Mapper注解类似但是它必须指定需要扫描的具体包名例如 MapperScan(“com.itheima.mapper”)。 注解描述Mapper注解Mapper注解通常只用在接口上用于将接口加入到IOC容器中。MapperScan(“需要扫描的包名”)注解用于将指定包下的接口 全都加入到IOC容器中。在 SpringBoot 中该注解用在 “项目的启动类”上。MapperScan( )注解 例子如: SpringBootApplication
MapperScan(com.myh.chapter_05.mapper) //将该包下的所有接口都加入到IOC容器中
public class Chapter05Application {public static void main(String[] args) {SpringApplication.run(Chapter05Application.class, args);}
}application.properties : spring.application.namechapter_06#配置数据库信息
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/springbootdata?useUnicodetruecharacterEncodingutf-8serverTimezoneGMTnullCatalogMeansCurrenttrue
spring.datasource.usernameroot
spring.datasource.passwordroot#添加并配置第三方数据源Druid(数据库连接池)
spring.datasource.typecom.alibaba.druid.pool.DruidDataSource
#初始化时创建的连接数。当应用程序启动时连接池会立即创建这么多连接。
spring.datasource.initialSize20
#连接池中最小的空闲连接数。连接池会维护至少这么多的空闲连接当空闲连接数低于这个数值时连接池会创建新的连接。
spring.datasource.minIdle10
#连接池中最大的活动连接数。这表示在任何时候连接池中的活动即被使用的连接数不会超过这个数值。如果所有连接都在使用中并且达到这个上限那么新的数据库连接请求将被阻塞或拒绝直到有连接可用。
spring.datasource.maxActive100pom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.3.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdchapter_06/artifactIdversion0.0.1-SNAPSHOT/versionnamechapter_06/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversionRELEASE/versionscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.0.1/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.28/version/dependency/dependencies!-- build--
!-- plugins--
!-- plugin--
!-- groupIdorg.springframework.boot/groupId--
!-- artifactIdspring-boot-maven-plugin/artifactId--
!-- /plugin--
!-- /plugins--
!-- /build--/project Chapter06ApplicationTests.java : (单元测试类) package com.myh.chapter_06;import com.myh.chapter_06.domain.Comment;
import com.myh.chapter_06.mapper.CommentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest
class Chapter06ApplicationTests {Autowiredprivate CommentMapper commentMapper;Testvoid contextLoads() {Comment comment commentMapper.findById(1);System.out.println(comment);}
} 3. 使用“配置文件”的方式整合MyBatis ( 使用 “XxxMapper.java文件 XxxMapper.xml文件” 来 操作数据库) Spring Boot 与MyBatis整合使用时不仅支持注解方式还支持XML配置文件的方式 (通过 XxxMapper.java XxxMapper.xml的方式来操作数据库 )。 例子如下 Article.java : package com.myh.chapter_06.domain;import java.util.List;public class Article {private Integer id;private String title; //标题private String content; //文章内容private ListComment commentList; //评论 --要用到“关联映射”的知识点 (为一对多的关系)public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getTitle() {return title;}public void setTitle(String title) {this.title title;}public String getContent() {return content;}public void setContent(String content) {this.content content;}public ListComment getCommentList() {return commentList;}public void setCommentList(ListComment commentList) {this.commentList commentList;}Overridepublic String toString() {return Article{ id id , title title \ , content content \ , commentList commentList };}
} Comment.java : package com.myh.chapter_06.domain;public class Comment {private Integer id;private String content;private String author;private Integer aId;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getContent() {return content;}public void setContent(String content) {this.content content;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author author;}public Integer getaId() {return aId;}public void setaId(Integer aId) {this.aId aId;}Overridepublic String toString() {return Comment{ id id , content content \ , author author \ , aId aId };}
} ArticleMapper.java : package com.myh.chapter_06.mapper;import com.myh.chapter_06.domain.Article;
import org.apache.ibatis.annotations.Mapper;Mapper //将该接口加入到IOC容器中
public interface ArticleMapper { //通过XxxMapper.java 和 XxxMapper.xml配置文件的方式来操作数据库public Article selectArticle(Integer id);public int updateArticle(Article article);} ArticleMapper.xml : ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd!-- namespace的命名空间 --
!-- 我们在项目中编写了配置文件springboot并不知晓要在全局配置文件中添加Mybatis映射文件的位置--
mapper namespacecom.myh.chapter_06.mapper.ArticleMapper!-- 查询文章详细信息包括评论信息 --select idselectArticle resultMaparticleWithCommentselect a.*,c.id c_id,c.content c_content,c.authorfrom t_article a ,t_comment cwhere a.id c.a_id and a.id #{id}/select!-- resultMap进行“关联映射”进行数据的注入和同时避免字段名和属性名不一致的问题 --!-- 因为在全局配置文件中用了该配置 : mybatis.type-aliases-packagecom.myh.chapter_06.domain ,则下面写“小写字母开头的类名”即可不用写全限定类名 --resultMap idarticleWithComment typearticleid propertyid columnid/result propertytitle columntitle/result propertycontent columncontent/!-- collection : 嵌套结果的方式 --collection propertycommentList ofTypecommentid propertyid columnc_id/result propertycontent columnc_content/result propertyauthor columnauthor/result propertyaId columna_id//collection/resultMap!-- 根据文章id更新文章信息 --!-- 用了动态sql的知识点有值才设置没则不用设 --update idupdateArticle parameterTypearticleupdate t_articlesetif testtitle!null and title !title #{title},/ifif testcontent!null and content !content #{content},/if/setwhere id #{id}/update/mapper 上面的配置文件中mapper标签的namespace属性值对应的是ArticleMapper.java接口文件的全路径名称在映射文件中根据ArticleMapper接口文件中的方法编写两个对应的SQL语句; 同时配置数据类型映射时没有使用类的全路径名称而是使用了类的别名(例如没有使用com.itheima.domain.Article (而是使用了article ) ––因为在 application.properties 中配置了 mybatis.type-aliases-packagecom.myh.chapter_06.domain。 注意点 我们在项目中编写的XML 映射文件Spring Boot并无从知晓所以无法扫描到该自定义编写的XML配置文件还必须在全局配置文件application.properties 中添加 MyBatis 映射文件路径的配置 同时需要添加实体类别名映射路径。具体代码在application.properties中 Chapter06ApplicationTests.java ( 测试类 ) : package com.myh.chapter_06;import com.myh.chapter_06.domain.Article;import com.myh.chapter_06.domain.Comment;import com.myh.chapter_06.mapper.ArticleMapper;import com.myh.chapter_06.mapper.CommentMapper;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;SpringBootTestclass Chapter06ApplicationTests {Autowiredprivate ArticleMapper articleMapper;Testpublic void selectArticle() {Article article articleMapper.selectArticle(1);System.out.println(article);}} 测试方法运行结果 从上图可以看出selectArticle( )方法执行成功查询出了文章id 为1的文章详情并关联查询出了对应的评论信息这说明使用 配置文件的方式整合MyBatis 成功。对于Spring Boot 支持与MyBatis整合的两种方式而言使用 注解的方式 比较 适合简单的增删改查操作而使用 配置文件的方式 稍微麻烦但对于 复杂的数据操作却显得比较实用。实际开发中使用Spring Boot整合MyBatis进行项目开发时通常会 混合使用两种整合方式。
文章转载自: http://www.morning.bpyps.cn.gov.cn.bpyps.cn http://www.morning.nytpt.cn.gov.cn.nytpt.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.sjsks.cn.gov.cn.sjsks.cn http://www.morning.rlxg.cn.gov.cn.rlxg.cn http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.qsdnt.cn.gov.cn.qsdnt.cn http://www.morning.incmt.com.gov.cn.incmt.com http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn http://www.morning.htjwz.cn.gov.cn.htjwz.cn http://www.morning.nmymn.cn.gov.cn.nmymn.cn http://www.morning.0small.cn.gov.cn.0small.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.pkmcr.cn.gov.cn.pkmcr.cn http://www.morning.sbrjj.cn.gov.cn.sbrjj.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.yesidu.com.gov.cn.yesidu.com http://www.morning.qrlkt.cn.gov.cn.qrlkt.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.ailvturv.com.gov.cn.ailvturv.com http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn http://www.morning.xrnh.cn.gov.cn.xrnh.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.qpqb.cn.gov.cn.qpqb.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.qjngk.cn.gov.cn.qjngk.cn http://www.morning.fkrzx.cn.gov.cn.fkrzx.cn http://www.morning.qczjc.cn.gov.cn.qczjc.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.lnyds.cn.gov.cn.lnyds.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.ysfj.cn.gov.cn.ysfj.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.jrksk.cn.gov.cn.jrksk.cn http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.psyrz.cn.gov.cn.psyrz.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.lwrks.cn.gov.cn.lwrks.cn http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.bktzr.cn.gov.cn.bktzr.cn http://www.morning.fnssm.cn.gov.cn.fnssm.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.fcqlt.cn.gov.cn.fcqlt.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn http://www.morning.mksny.cn.gov.cn.mksny.cn http://www.morning.sryyt.cn.gov.cn.sryyt.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.cznsq.cn.gov.cn.cznsq.cn http://www.morning.mbmtz.cn.gov.cn.mbmtz.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.bpmdq.cn.gov.cn.bpmdq.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.junmap.com.gov.cn.junmap.com http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.fwkpp.cn.gov.cn.fwkpp.cn http://www.morning.rfbq.cn.gov.cn.rfbq.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.brkc.cn.gov.cn.brkc.cn http://www.morning.mxdiy.com.gov.cn.mxdiy.com