一、Entity工程

1. 实体类的进一步细分

  • VO View Object 视图对象
    • 用途 1:接收浏览器发送过来的数据
    • 用途 2:把数据发送给浏览器去显示
  • PO Persistent Object 持久化对象
    • 用途 1:将数据封装到 PO 对象存入数据库
    • 用途 2:将数据库数据查询出来存入 PO 对象 所以 PO 对象是和数据库表对应,一个数据库表对应一个 PO 对象
  • DO Data Object 数据对象
    • 用途 1:从 Redis 查询得到数据封装为 DO 对象
    • 用途 2:从 ElasticSearch 查询得到数据封装为 DO 对象
    • 用途 3:从 Solr 查询得到数据封装为 DO 对象 …… 从中间件或其他第三方接口查询到的数据封装为 DO 对象
  • DTO Data Transfer Object 数据传输对象
    • 用途 1:从 Consumer 发送数据到 Provider
    • 用途 2:Provider 返回数据给 Consumer
  • 使用 org.springframework.beans.BeanUtils.copyProperties(Object, Object)在不同 实体类之间复制属性。
  • MemberVO→复制属性→MemberPO

2. 在Entity工程创建包

com.yixuexi.crowd.entity.vo
com.yixuexi.crowd.entity.po

3. Lombok

未命名图片.png
未命名图片.png

1) 注意:

在如果当前工程依赖了springboot不要写版本,springboot已经对其进行了版本控制(不然会报错)


二、SpringBoot连接Mybatis

坑: 如果使用springboot test 进行测试,切记要添加@RunWith(SpringRunner.class)注解,如果没有不会读取配置文件,还有同时需要修改junit的版本,默认是 4.11 版本需要大于 4.11

1. 添加依赖

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. <scope>test</scope>
  6. </dependency>
  7. <!--MySQL启动-->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>5.1.37</version>
  12. </dependency>
  13. <!--mybatis starter-->
  14. <dependency>
  15. <groupId>org.mybatis.spring.boot</groupId>
  16. <artifactId>mybatis-spring-boot-starter</artifactId>
  17. </dependency>
  18. <!--druid 连接池-->
  19. <dependency>
  20. <groupId>com.alibaba</groupId>
  21. <artifactId>druid</artifactId>
  22. </dependency>
  23. <!--作为客户端访问 eureka注册中心 -->
  24. <dependency>
  25. <groupId>org.springframework.cloud</groupId>
  26. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  27. </dependency>
  28. <!--springboot 测试-->
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. <!--Lombok-->
  35. <dependency>
  36. <groupId>org.projectlombok</groupId>
  37. <artifactId>lombok</artifactId>
  38. </dependency>
  39. <!--对外暴漏服务-->
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-web</artifactId>
  43. </dependency>
  44. <!--为了能使用到工具类-->
  45. <dependency>
  46. <groupId>com.yixuexi</groupId>
  47. <artifactId>atcrowdfunding05-common-util</artifactId>
  48. <version>1.0-SNAPSHOT</version>
  49. </dependency>
  50. <!--为了能使用到实体类-->
  51. <dependency>
  52. <groupId>com.yixuexi</groupId>
  53. <artifactId>atcrowdfunding09_member_entity</artifactId>
  54. <version>1.0-SNAPSHOT</version>
  55. </dependency>

2. yaml配置

server:
  port: 2000
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1000/eureka/
spring:
  application:
    name: yixuexi-crowd-mysql
  datasource:
    username: root
    password: "0000"
    url: jdbc:mysql://localhost:3306/project_crowd
    driver-class-name: com.mysql.jdbc.Driver
    name: mydb
    type: com.alibaba.druid.pool.DruidDataSource

logging:
  level:
    com.yixuexi.crowd.mapper: debug
    com.yixuexi.crowd.test: debug

mybatis:
  mapper-locations: "classpath:mybatis/mapper/*.xml"

3. 测试

test测试类 坑:需要添加 @RunWith(SpringRunner.class) 注解,如果不添,不会读取配置文件,junit 的版本需要是4.12以上

/**
 * @date: 2021/3/12   18:21
 * @author: 易学习
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyBatisTest {
    @Autowired
    private DataSource dataSource;

    @Test
    public void test() throws SQLException {
        System.out.println(dataSource.getConnection());
    }
}

三、SpringBoot整合MyBatis

1. member表

CREATE TABLE t_member
(
    id INT(11) NOT NULL AUTO_INCREMENT,
    oginacct VARCHAR(255) NOT NULL, 
    userpswd CHAR(200) NOT NULL, 
    username VARCHAR(255), 
    email VARCHAR(255), 
    authstatus INT(4) COMMENT '实名认证状态 0 - 未实名认证, 1 - 实名认证申请中, 2 - 已实名认证', 
    usertype INT(4) COMMENT ' 0 - 个人, 1 - 企业', 
    realname VARCHAR(255), 
    cardnum VARCHAR(255), 
    accttype INT(4) COMMENT '0 - 企业, 1 - 个体, 2 - 个人, 3 - 政府', 
    PRIMARY KEY (id)
);

使用common-reverse工程里的逆向工程生成代码

2. 主启动类添加注解 @MapperScan(“包名”) 将接口扫进去

@MapperScan("com.yixuexi.crowd.mapper")
@SpringBootApplication
public class CrowdMainClass {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainClass.class,args);
    }
}

3. MySQL工程对外暴露接口

1) api工程添加feign依赖

<!--声明时远程调用-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 更好的使用别的工程组件 -->
<dependency>
  <groupId>com.yixuexi</groupId>
  <artifactId>atcrowdfunding05-common-util</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>com.yixuexi</groupId>
  <artifactId>atcrowdfunding09_member_entity</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

2) 在api工程中声明远程调用接口

未命名图片.png

/**
 * @date: 2021/3/12   22:13
 * @author: 易学习
 * @FignClient: 写对应的提供者微服务名
 */
@FeignClient("yixuexi-crowd-mysql")
public interface MySqlRemoteService {
    /**
      * 远程调用的接口方法:
      *      1.要求@RequestMapping注解映射的地址一致
      *      2.要求方法声明一致
      *      3.用来获取请求参数
      *          : @RequestParam  @PathVariable @RequestBody @RequestParam  不能省略,两边一致
      * @return
      */
    @RequestMapping("/get/member/by/login/acct/remote")
    public ResultEntity<MemberPO> getMemberByLoginAcctRemote(
            @RequestParam("loginacct") String loginacct);
}

注意:上面的远程调用接口是给提供给consumer用的,而现在并没有consumer

3) mysql工程的 service方法

/**
 * @date: 2021/3/12   22:21
 * @author: 易学习
 * @Transactional(readOnly=true): 在类上使用 针对查询操作设置事务属性
 */

@Transactional(readOnly = true)
@Service
public class MemberServiceImpl implements MemberService {}