spring boot:mybatis+redis+mysql(增删改查)+eureka+feign集成小demo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32589355/article/details/81302424

一:软件

1.run环境:IDEA

2.redis:客户端先安装完毕->图形化界面redis desktop manager软件安装------------------------>目的:redis做缓存数据

3.mysql:5.7 client版本->图形化界面 navicat for mysql软件安装---------------------------->还是比较好用的软件

4.postman:做http请求,很好用

二:demo 大致流程

       1.新建项目做producer->搭项目基本结构:刚开始不知道规范包名的我真烂,现在相比前两天好一点

       2.spring boot 实现增删改查(刚开始碰的读者最好只写一个查,简单先来谈谈路),需要了解mybatis

         不得不吐槽,使用@insert等注解很方便,但是tutor要我写xml,小白有点碰壁,后期还是xml方式可能好维护点

      3.在mysql访问前,加一层redis缓存

      4.新建项目做eureka注册中心,producer项目进行注册服务

     5.新建项目做consumer,向注册中心注册服务

PS:消费者访问路径,向注册中心找相应的服务名,然后注册中心分配一个同服务名的一个端口给消费者,然后匹配相同的路径,达到一个简单负载均衡的效果和隐藏真实路径的效果

三:介绍主要的producer项目

       (1)包名架构及规范(遵从yml格式):

                   api:接口

                       model:定义基础类(含类属性)

                      service:接口类

                              impl:接口实现类

                  core:

                       config:配置类

                       dao:数据库操作类

                      manage:事务类

                     service:接口类

                            impl:接口实现类

                     util:工具类

resource下新建mapper文件,放置mybatis数据库配置的xml文件

      (2)关键点注意:

              1.lombok插件:对基础类通过注解简化代码格式

              2.GenerateSerialVersionUID插件:自动生成序列化ID,不过tutor说redistemplate自带序列化ID不用这么麻烦

              3.mybatis plugin插件:mybatis 类->xml可以实现快速定位

             4.数据库连接请注意不要使用spring.datasource.name,一定要username,这个坑我先踩了

# mysql
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/whh?useUnicode=true&characterEncoding=utf-8&useSSL=true
    driver-class-name: com.mysql.jdbc.Driver

            5.mybatis配置

             接口类:

public interface UserDao {

    /**
     * 增加用户
     * @param user
     * @return
     */
    User insertUser(User user);

    /**
     * 根据用户ID获取用户信息
     * @param id
     * @return
     */
    User getUserById(Integer id);

    /**
     * 根据用户ID修改用户信息
     * @param user
     * @return
     */
    User updateUserById(User user);

    /**
     * 根据用户ID删除用户信息
     * @param id
     * @return
     */
    User deleteUserById(Integer id);
}

        mybatis 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.example.producer.core.dao.UserDao" >

    <resultMap id="userMap" type="com.example.producer.api.model.User" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name"/>
        <result column="age" property="age"/>
        <result column="companyAddress" property="company_address"/>
    </resultMap>
    <resultMap id="paramUser" type="com.example.producer.api.model.User"/>
    <sql id="base_table">
    person
    </sql>

    <sql id="base_column">
    id,name,age
    </sql>

    <select id="insertUser" parameterMap="paramUser" resultType="userMap">
        insert into
        <include refid="BASE_TABLE"/>
        values
        (#{id},#{name},#{age})
    </select>

    <select id="getUserById" parameterType="java.lang.Integer" resultType="com.example.producer.api.model.User">
        SELECT
        <include refid="BASE_COLUMN"/>
        FROM
        <include refid="BASE_TABLE"/>
        WHERE id = #{id}
    </select>

    <select id="updateUserById" parameterType="com.example.producer.api.model.User" resultType="com.example.producer.api.model.User">
        update
        <include refid="BASE_TABLE"/>
        set name=#{name},age=#{age} WHERE Id = #{id}
    </select>

    <select id="deleteUserById" parameterType="java.lang.Integer" resultType="com.example.producer.api.model.User">
        delete
        FROM
        <include refid="BASE_TABLE"/>
        WHERE id = #{id}
    </select>
</mapper>

    项目配置文件application.yml:

mybatis:
  type-aliases-package: com.example.producer.core.dao
  mapper-locations: classpath:mapper/*.xml

       5.打包成别的项目的依赖包时,去掉这个pom.xml文件中红色区域

     6.mvn clean install 打包,这个已经打包成本地maven仓库中,然后直接去项目中依赖该包

    7.feign接口类不要为了省略http路径前缀,在类上面加@requestmapping。

      虽然可以使用,但同时SpringMVC会把该接口的实例当作Controller开放出去,这个可以在启动的Mapping日志中查看到。 

      这样的做法会污染调用方的mapping映射空间。假如在controller中存在相同路径的url,会造成项目启动失败

    项目码云地址:https://gitee.com/wanghaohui/spring-boot-demo1/tree/master

展开阅读全文

没有更多推荐了,返回首页