3.配置一个简单的springcloud项目

1.先创建一个父项目

1.父项目的作品是指定子项目相同依赖的版本,和springboot的版本仲裁功能类似
创建一个maven工程,删除掉里面的src等目录,只留下一个pom文件
    pom文件解析:
    <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.com.springcloud</groupId>
    <artifactId>springcloud</artifactId>
    <!--说明当前项目是父类型项目:因为项目的打包类型有:pom、jar、war-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <!--同一管理jar包的版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>
    <!--子模块继承之后,提供作用:所并本本+子modlue,不用写groupID和version-->
    <!--重点1:dependencyManagement里面的依赖只是设置了子类项目依赖的版本,并不会在父类项目中下载-->
    <dependencyManagement>
        <dependencies>
            <!--springboot2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springcloud Hoxton.Sr1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


结论:
    重点1:<packaging>pom</packaging>表明当前项目是父项目
    重点2:父项目中的只是表明依赖版本,并不会下载!当子类项目引入时才会下载!
        <dependencyManagement>
            <dependencies>
                。。。
            <dependencies>
        <dependencyManagement>

公共代码

公共代码里包含了各个子类模块使用的工共代码:如共同的实体类,工共的工具类等等!

服务提供端代码:

提供了对数据库表的各项操作:
项目结构如下:
注意体会到什么是面向接口编程!
1.控制层(controller)
    @RestController
    @Slf4j
    public class UserController {
        重点1:此处引入的依赖是service的接口,并不是接口的实现类,并且servcie的接口并没有加上注解!其实现类加上了@service注解!后面会说..
        @Autowired
        private UserService userService;
        @GetMapping("/producer/queryUserById/{id}")
        public CommResult queryUserById(@PathVariable("id") int id){
            User user=userService.queryUserByid(id);
            if (user!=null){
                log.info("id:"+id+" 查询用户成功!");
                重点2:此处返回的是CommResult,并传入user,因为CommResult有个属性是泛型,可以传入任何类型的参数!高!实在是高!
                return new CommResult(200,"成功",user);
            }else {
                log.info("id:"+id+" 查询用户失败!");
                return new CommResult(444,"查询失败!id:"+id);
            }
        }
    }
2.service层
    2.1接口:重点1:接口上没有加任何的注解
        public interface UserService {
            User queryUserByid(int id);
            int saveUser(User user);
        }
    2.2接口实现类:
        重点1:在接口实现类上加上了@service注解
        @Service
        public class UserServiceImp implements UserService {
            重点2:dao层接口的依赖注入
            @Autowired
            private UserMapper userMapper;
            @Override
            public User queryUserByid(int id) {
                User user = userMapper.queryUserByid(id);
                return user;
            }
        }
        
4.dao层:
    重点:此处有两种方式,因为采用的是mybatis访问数据库
        1.在接口上使用@mapper注解去标注当前接口为mybatis的绑定接口(和mapper.xml)
        2.在springboot的启动类上加上@mapperscan(dao层接口包名)去批量加入
        加上这两个注解后,可以在接口方法上使用标签@select/@insert/@update/@delete
    public interface UserMapper {
        User queryUserByid(@Param("id") int id);
        int saveUser(User user);
    }
6.绑定的mapper.xml:绑定了dao层接口,并绑定了其中的方法
    <mapper namespace="cn.com.springcloud.producer.dao.UserMapper">
        重点1:数据库查询出的字段和实体类字段不对应,使用该标签一一对应,具体参考mybatis笔记!
        <resultMap id="queryUserById_toUser" type="com.cn.entities.User">
            <result property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="pwd" column="pwd"/>
        </resultMap>
        <select id="queryUserByid" resultMap="queryUserById_toUser">
            select * from public."user" where id=#{id}
        </select>
        <insert id="saveUser" parameterType="com.cn.entities.User" useGeneratedKeys="true" keyProperty="id">
            insert into public."user"(name, pwd) values (#{name},#{pwd})
        </insert>
    </mapper>
7.springboot启动类代码
    @SpringBootApplication
    重点1:使用@mappersacn批量导入mybatis的dao层接口
    @MapperScan(value = "cn.com.springcloud.producer.dao")
    public class ProducerUserApiApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ProducerUserApiApplication.class, args);
        }
    
    }
8.springboot的配置文件代码:
server:
  port: 8081

spring:
  application:
    name: springcloud练习:服务提供端
  datasource:
    #数据源基本配置
    username: root
    password: Ustcinfo@2020
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://133.64.181.208:18921/wmd_test?currentSchema=public
    type: com.alibaba.druid.pool.DruidDataSource
重点1:
mybatis-plus:
  指定mybatis的mapper.xml文件位置
  mapper-locations: classpath*:/mapper/**/*.xml
  使用别名,扫描别名类的包,不太好用,配置了这个,在mapper.xml中使用别名会爆红,虽然不影响运行,但是没有提醒等功能,也不好看。暂时不推荐使用!
  type-aliases-package: com.cn.entities

服务调用方法代码

服务调用方调用提供放代码,返回结果!
重点1:导入共同依赖common,这样就可以使用公共类CommResult和User类
重点2:采用的是RestTemplate进行远程调用并返回,所以需要配置RestTemplate并加载到容器中!
1.自己的配置类
    @Configuration
    public class MyConfig {
        重点1:在自己的配置类中加入RestTemplate
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
2.控制层代码:
    @RestController
    @Slf4j
    public class UserController {
        private final static String PRODUCER_PATH="http://localhost:8081/producer/";
        @Autowired
        private RestTemplate restTemplate;
        @PostMapping("/customer/saveUser")
        public CommResult saveUser(User user){
            log.info("客户端:插入的用户信息->"+user);
            重点1:使用restTemplate的各种方法(支持rest形式)去进行调用和返回
            CommResult result = restTemplate.postForObject(PRODUCER_PATH + "saveUser", user, CommResult.class);
            return result;
        }
    }

 

posted @ 2022-05-29 16:05  努力的达子  阅读(162)  评论(0编辑  收藏  举报