一、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
1) 注意:
在如果当前工程依赖了springboot不要写版本,springboot已经对其进行了版本控制(不然会报错)
二、SpringBoot连接Mybatis
坑: 如果使用springboot test 进行测试,切记要添加@RunWith(SpringRunner.class)注解,如果没有不会读取配置文件,还有同时需要修改junit的版本,默认是 4.11 版本需要大于 4.11
1. 添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--MySQL启动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!--mybatis starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--druid 连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--作为客户端访问 eureka注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--springboot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--对外暴漏服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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. 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)
);
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工程中声明远程调用接口
/**
* @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 {}