接上一篇:Spring cloud微服务搭建(二)——pojo实体类
编写Spring cloud服务提供方,在父项目下新建module,选择普通的maven项目。
1、引入Maven依赖
在父项目dependencyManagement
中依赖的基础上(无需指定版本号),新增导入pojo实体类模块依赖:
<dependency>
<groupId>zuka</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2、application.yaml文件
-
服务提供方端口号:8001
-
mybatis配置:
- mapper-locations:mapper文件位置
- map-underscore-to-camel-case:数据库表字段一般下划线格式,pojo实体类属性名一般camel风格,设置为true/on,则自动支持两种风格的映射。实现了字段名与属性名的松散绑定,不需要严格一致。
-
Spring的配置:
-
application名称:也是监控页面显示节点名称
-
数据源配置:
- url:jdbc:mysql://{server IP}:{server port}/{dbname}?useUnicode=true&characterEncoding=utf-8
useUnicode=true&characterEncoding=utf-8,避免中文字符乱码
-
server:
port: 8001
#mybatis的配置
mybatis:
type-aliases-package: zuka.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
#config-location: classpath:mybatis/mybatis-config.xml
configuration:
map-underscore-to-camel-case: on
#Spring的配置
spring:
application:
name: springcloud-provider
#数据源的配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
password: 123456
username: root
3、mapper接口定义
@Repository
:表示为数据访问层,注入为容器中的组件。@Mapper
:表示为mybatis mapper的标记式注解。
@Mapper
@Repository
public interface DepartmentDao {
public boolean addDepartment(Department department);
public Department queryById(int id);
public List<Department> queryForList();
}
4、mapper.xml文件(sql语句)
-
所在路径与
application.yaml
文件中配置的mybatis.mapper-locations: classpath:mybatis/mapper/*.xml
一致 -
namespace
:mapper接口的全限定类名 -
id
:mapper接口定义的方法名满足如上条件后,mapper.xml文件会被mybatis通过反射实例化出一个mapper接口实现类,及实现方法。达到执行sql语句的目的。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="springcloud.dao.DepartmentDao">
<insert id="addDepartment" parameterType="pojo.Department" >
insert into department (dept_name,database_source) values (#{deptName},DATABASE());
</insert>
<select id="queryById" resultType="pojo.Department" parameterType="int">
select * from department where dept_no=#{deptNo};
</select>
<select id="queryForList" resultType="pojo.Department">
select * from department;
</select>
</mapper>
5、服务接口
简单起见,接口方法与mapper接口定义的方法一致。
public interface DeparmentService {
public boolean addDepartment(Department department);
public Department queryById(int id);
public List<Department> queryForList();
}
6、服务接口实现类
@Service
:标记为服务层,注入为容器中的一个组件。
重要属性DepartmentDao
:访问数据库的实现类。
- mybatis会在运行时通过反射,将mapper.xml文件实例化为一个DepartmentDao接口的实现类,实际完成数据库sql执行。
- spring boot自动装配做了大部分工作,MybatisAutoConfiguration已经提供了 SqlSessionFactory 和 SqlSessionTemplate这两个bean,注入容器中。
- 开发者实现简单的数据访问层,只需两步:
- 定义mapper接口
- 编写mapper.xml文件中sql语句。
- 在服务层中可以直接使用mapper接口,此处为
DepartmentDao
,执行sql语句。
@Service
public class DepartmentServiceImp implements DeparmentService{
@Autowired
private DepartmentDao departmentDao;
@Override
public boolean addDepartment(Department department) {
return departmentDao.addDepartment(department);
}
@Override
public Department queryById(int id) {
return departmentDao.queryById(id);
}
@Override
public List<Department> queryForList() {
return departmentDao.queryForList();
}
}
7、控制器Controller
前端控制器用于接收url请求,调用业务代码,完成处理后,返回结果供前端页面展示。
@RestController
:无需手写前端页面,jackson格式返回执行结果,默认页面展示。
@RestController
public class DepartmentController {
@Autowired
private DeparmentService deparmentService;
@PostMapping("/dept/add")
public boolean addDepartment(Department department){
return deparmentService.addDepartment(department);
}
@GetMapping("/dept/get/{id}")
public Department queryById(@PathVariable("id") int id){
return deparmentService.queryById(id);
}
@GetMapping("/dept/list")
public List<Department> queryForList(){
return deparmentService.queryForList();
}
}
8、服务启动类
-
@SpringBootApplication
:标记为spring boot服务启动类 -
启动类要放在root package下面。用户自定义的包也要在root package下。
以便
conponent-scan
可以自动扫描跟主程序同级的包,自动装配成Spring bean。
@SpringBootApplication
@EnableEurekaClient
public class DepartmentProvider8001 {
public static void main(String[] args) {
SpringApplication.run(DepartmentProvider8001.class,args);
}
}
9、测试执行
启动服务后,在浏览器输入http://localhost:8001/dept/list,返回页面如下:
更多:
Spring cloud开发环境搭建(一)——maven依赖