zoukankan      html  css  js  c++  java
  • springcloud系列三 搭建服务模块

    搭建服务模块为了模拟正式开发环境,只是少写了service层直接在controller里面直接引用,直接上图和代码:更为方便:

    创建完成之后加入配置:

    pom.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>springcloud-parent</artifactId>
            <groupId>com.cxy</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <packaging>jar</packaging>
        <artifactId>spring-person</artifactId>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <!--千万注意,不要写成spring-cloud-netflix-eureka-client,写成这样不会报错,但是注册不了服务-->
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.41</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.5</version>
                        </dependency>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>5.1.41</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>mybatis generator</id>
                            <phase>package</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <!--允许移动生产的文件-->
                        <verbose>true</verbose>
                        <!--允许自动覆盖文件,在开发者不可以设置为true-->
                        <overwrite>true</overwrite>
                        <!--制定生产文件的位置-->
                        <configurationFile>
                            src/main/resources/mybatis_generator.xml
                        </configurationFile>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    这个插件中加入了自动生成代码插件:

    mybatis_generator.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE generatorConfiguration PUBLIC
            "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    <generatorConfiguration>
        <!--驱动包的路径-->
        <!--<classPathEntry location="F:maven
    eposmysqlmysql-connector-java5.1.34mysql-connector-java-5.1.34.jar"/>-->
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <!--注释-->
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
                <property name="suppressDate" value="true"/>
            </commentGenerator>
            <!--数据库连接-->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://127.0.0.1:3306/fr_db?zeroDateTimeBehavior=convertToNull&amp;
                            autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8"
                            userId="root"
                            password="1234"/>
    
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!--生成Model类存放位置-->
            <javaModelGenerator targetPackage="com.cxy.dataObject" targetProject="src/main/java">
                <!--是否对model添加构造函数-->
                <property name="constructorBased" value="false"/>
                <!--是否允许子包-->
                <property name="enableSubPackages" value="true"/>
                <!--建立的model对象是否不可变,也就是生成的model没有setter方法-->
                <property name="immutable" value="false"/>
                <property name="trimStrings" value="false"/>
            </javaModelGenerator>
    
            <!--生成映射文件存放位置-->
            <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
    
            <!--生成Mapper类存放位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.cxy.dao" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!--生成与表对应的类名-->
            <table tableName="person" domainObjectName="PersonDo" enableCountByExample="false"
                   enableDeleteByExample="false"
                   enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"></table>
    
        </context>
    
    </generatorConfiguration>

    yml文件:

    eureka:
      client:
        serviceUrl:
         defaultZone: http://127.0.0.1:8761/eureka/  #eureka注册中心地址
    spring:
      application:
        name: cxy-person-service #应用名
     #datasource,数据连接
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url : jdbc:mysql://127.0.0.1:3306/fr_db?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8
        password: 1234
        username: root
     #mybatis
    mybatis:
        type-aliases-package: com.cxy.dataObject #实体类映射文件包
        mapper-locations: classpath:mapping/*.xml #生成的sql语句
    server:
      port: 8081

    笔者在这个文件配置时候出现很多问题,慢慢的解决了,

    注意yml文件格式

    启动类:

    package com.cxy;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    /***
     * @ClassName: PersonApplication
     * @Description:
     * @Auther: 陈绪友
     * @Date: 2019/1/2816:30
     * @version : V1.0
     */
    @SpringBootApplication
    @EnableEurekaClient  //开启注解,注册服务
    @MapperScan("com.cxy.dao")
    public class PersonApplication {
        public static void main(String[] args) {
            SpringApplication.run(PersonApplication.class,args);
        }
    }

    controller

    package com.cxy.controller;
    
    import com.cxy.dao.PersonDoMapper;
    import com.cxy.dataObject.PersonDo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    /***
     * @ClassName: PersonController
     * @Description:
     * @Auther: 陈绪友
     * @Date: 2019/1/2816:31
     * @version : V1.0
     */
    @RequestMapping("/person")
    @RestController
    public class PersonController {
        @Autowired
        private PersonDoMapper personDoMapper;
    
        @RequestMapping(value = "{id}",method = RequestMethod.GET) 

      public PersonDo selectPersonDoByid(@PathVariable Integer id){

        return personDoMapper.selectByPrimaryKey(id); }
      @RequestMapping(
    value = "{id}",method = RequestMethod.DELETE)

      public Integer deletePersonDoByid(@PathVariable Integer id){

        return personDoMapper.deleteByPrimaryKey(id); } }

    dao

    package com.cxy.dao;
    
    import com.cxy.dataObject.PersonDo;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface PersonDoMapper {
        int deleteByPrimaryKey(Integer id);
    
        int insert(PersonDo record);
    
        int insertSelective(PersonDo record);
    
        PersonDo selectByPrimaryKey(Integer id);
    
        int updateByPrimaryKeySelective(PersonDo record);
    
        int updateByPrimaryKey(PersonDo record);
    }

    pojo:个人喜欢叫做数据库数据模型,在正式开发中和这个是不可以直接返回给前端的,是需要进行封装给前端的

    po,对应的数据库数据模型

    dto 返回给前端的数据模型,即就是页面展示的模型

    vo 是前端传输过来给后台的模型

    package com.cxy.dataObject;
    
    public class PersonDo {
        private Integer id;
    
        private String name;
    
        private Integer age;
    
        private String address;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }

    xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.cxy.dao.PersonDoMapper">
      <resultMap id="BaseResultMap" type="com.cxy.dataObject.PersonDo">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="age" jdbcType="INTEGER" property="age" />
        <result column="address" jdbcType="VARCHAR" property="address" />
      </resultMap>
      <sql id="Base_Column_List">
        id, name, age, address
      </sql>
      <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from person
        where id = #{id,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        delete from person
        where id = #{id,jdbcType=INTEGER}
      </delete>
      <insert id="insert" parameterType="com.cxy.dataObject.PersonDo">
        insert into person (id, name, age, 
          address)
        values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, 
          #{address,jdbcType=VARCHAR})
      </insert>
      <insert id="insertSelective" parameterType="com.cxy.dataObject.PersonDo">
        insert into person
        <trim prefix="(" suffix=")" suffixOverrides=",">
          <if test="id != null">
            id,
          </if>
          <if test="name != null">
            name,
          </if>
          <if test="age != null">
            age,
          </if>
          <if test="address != null">
            address,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
          <if test="id != null">
            #{id,jdbcType=INTEGER},
          </if>
          <if test="name != null">
            #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null">
            #{age,jdbcType=INTEGER},
          </if>
          <if test="address != null">
            #{address,jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.cxy.dataObject.PersonDo">
        update person
        <set>
          <if test="name != null">
            name = #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null">
            age = #{age,jdbcType=INTEGER},
          </if>
          <if test="address != null">
            address = #{address,jdbcType=VARCHAR},
          </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.cxy.dataObject.PersonDo">
        update person
        set name = #{name,jdbcType=VARCHAR},
          age = #{age,jdbcType=INTEGER},
          address = #{address,jdbcType=VARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
    </mapper>

    这个是代码生成命令的截图

    启动服务:

    进入注册中心查看:

    在此服务注册就完成了,那么远程是如何进行调用的呢,下接将会整合opnfeign进行服务调用,当然传统的httpclient,restemplate都是可以进行服务调用的

    传统的方法就不调用了,比较繁琐,

  • 相关阅读:
    CentOS如何挂载U盘(待更新)
    CentOS6.8启动Tomcat无法访问
    CentOS7安装后连不上网络无法使用yum
    Android Studio 3.0找不到Android Device Monitor
    初识 ‘测试左移 测试右移’
    利用coverage工具进行Python代码覆盖率测试
    Charles抓包过滤的四种方式
    postman中添加cookie信息
    初始Activity启动模式
    MySQL数据库报错:Too many connection
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/10331030.html
Copyright © 2011-2022 走看看