// 品牌ID
// MyBatisPlus主键策略注解
@TableId(type= IdType.AUTO)
private Integer id;
// 品牌名字
private String name;
// 品牌图片
private String image;
// 品牌首字母
private String initial;
// 品牌排序
private Integer sort;
}
主键生成策略
| AUTO | 数据库ID自增 |
| — | — |
| NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
| INPUT | insert前自行set主键值 |
| ASSIGN_ID | 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator
的方法nextId
(默认实现类为DefaultIdentifierGenerator
雪花算法) |
| ASSIGN_UUID | 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator
的方法nextUUID
(默认default方法) |
| ID_WORKER | 分布式全局唯一ID 长整型类型(please use ASSIGN_ID
) ,已过时 |
| UUID | 32位UUID字符串(please use ASSIGN_UUID
) ,已过时 |
| ID_WORKER_STR | 分布式全局唯一ID 字符串类型(please use ASSIGN_ID
) ,已过时 |
项目工程结构如下:
3)商品微服务
在mall-service
中创建mall-goods-service
微服务,用于操作shop_goods
数据库。
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”>
mall-service
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
mall-goods-service
shop_goods微服务
com.bobo.vip.mall
goods-api
1.0-SNAPSHOT
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
创建bootstrap.yml
,配置如下:
server:
port: 8081
spring:
application:
name: mall-goods
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.100.140:3306/shop_goods?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
cloud:
nacos:
config:
file-extension: yaml
server-addr: 192.168.100.140:8848
discovery:
#Nacos的注册地址
server-addr: 192.168.100.140:8848
MybatisPlus
mybatis-plus:
mapper-locations: mapper/*.xml
type-aliases-package: com.bobo.vip.mall.*.model
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#日志配置
logging:
pattern:
console: “%msg%n”
配置说明:
type-aliases-package:指定JavaBean的别名包,和MyBatis用法一样。
mapper-locations:复杂的操作可能需要自己写SQL,SQL可以写到xml文件中,这里指定和Dao对应的xml文件,此时我们需要在resources中创建一个mapper目录。
map-underscore-to-camel-case:开启驼峰功能,数据库表列名如果有_,可以自动按驼峰命名规则转换。
log-impl:日志开启,方便测试。
创建启动类com.bobo.vip.mall.MallGoodsServiceApplication
:
@SpringBootApplication
@MapperScan(basePackages = {“com.bobo.vip.mall.goods.mapper”})
public class MallGoodsServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MallGoodsServiceApplication.class,args);
}
}
此时启动程序,查看Nacos控制台:http://192.168.100.140:8848/nacos 账号和密码都是nacos,效果如下:
我们创建一个品牌操作的功能,实现品牌增删改查,分别创建model
、mapper
、service
、controller
。
MyBatisPlus提供了很多通用方法:
mapper(接口)->extends BaseMapper【增删改查】
service(接口)->extends IService【增删改查】
serviceImpl->extends ServiceImpl【增删改查】
3.1 Mapper创建
在mall-goods-service
创建com.bobo.vip.mall.goods.mapper.BrandMapper
接口,代码如下:
public interface BrandMapper extends BaseMapper {
}
代码说明:BaseMapper中已经存在了很多常见数据库操作方法,可以大幅提升开发速度。
3.2 Service创建
在mall-goods-service
创建com.bobo.vip.mall.goods.service.BrandService
接口,代码如下:
public interface BrandService extends IService{
}
在mall-goods-service
创建com.bobo.vip.mall.goods.service.impl.BrandServiceImpl
实现类,代码如下:
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper,Brand> implements BrandService {}
代码说明:IService
和ServiceImpl
中已经创建好了很多常用的增删改查方法,我们写常用的增删改查,几乎不用写方法。
3.3 增删改功能
增删改功能在IService
和ServiceImpl
中已经全部存在, 不需要额外添加方法,只需要在Controller调用即可。
在mall-goods-service
创建com.bobo.vip.mall.goods.controller.BrandController
,代码如下:
@RestController
@RequestMapping("/brand")
public class BrandController {
@Autowired
private BrandService service;
/**
-
添加品牌
-
@param brand
-
@return
*/
@PostMapping
public RespResult save(@RequestBody Brand brand){
service.save(brand);
return RespResult.ok();
}
/****
- 修改
*/
@PutMapping
public RespResult update(@RequestBody Brand brand){
//修改品牌
service.updateById(brand);
return RespResult.ok();
}
/****
- 删除品牌
*/
@DeleteMapping("/{id}")
public RespResult delete(@PathVariable(value = “id”) Integer id){
//删除品牌
service.removeById(id);
return RespResult.ok();
}
}
重启服务然后我们通过Postman来测试即可
表结构中原有数据
Postman中的数据
点击Send
后查看数据库中数据
操作成功
修改删除操作是一样的,就不再截图演示了,大家可以自行尝试下哦!
4.4 条件查询/分页
条件查询需要封装条件信息,MyBatis Plus提供了条件封装对象Wrapper
(它的子类QueryWrapper
可以直接使用),我们可以用它的子类QueryWrapper
实现封装查询条件。
4.4.1 条件查询
在BrandService
中创建如下方法:
List queryList(Brand brand);
在BrandServiceImpl
中创建条件查询方法实现(不要忘了注入brandMapper
):
/**
-
多条件查询
-
@param brand
-
@return
*/
@Override
public List queryList(Brand brand) {
// 多条件构造器
QueryWrapper queryWrapper = new QueryWrapper<>();
if(brand != null){
if(!StringUtils.isEmpty(brand.getName())){
queryWrapper.like(“name”,brand.getName());
}
if(!StringUtils.isEmpty(brand.getInitial())){
queryWrapper.eq(“initial”,brand.getInitial());
}
}
return mapper.selectList(queryWrapper);
}
代码说明:
like:表示模糊查询
eq:表示等值查询
在BrandController
中创建条件查询方法:
/****
- 条件查询
*/
@PostMapping(value = “/list”)
public RespResult<List> list(@RequestBody(required = false) Brand brand){
// 查询
List brands = brandService.queryList(brand);
return RespResult.ok(brands);
}
不带参数查询所有的数据
带参数查询
4.4.2 分页查询
在BrandService
中创建如下方法:
Page queryPageList(Long currentPage,Long size,Brand brand);
在BrandServiceImpl
中创建条件查询方法实现(不要忘了注入brandMapper
):
/***
-
分页查询
-
@param brand
-
@return
*/
@Override
public Page queryPageList(Long currentPage, Long size, Brand brand) {
// 封装查询条件
Page page = brandMapper.selectPage(
new Page(currentPage, size),
new QueryWrapper()
.like(“name”, brand.getName()));
return page;
}
代码说明:
like:表示模糊查询
在BrandController
中创建条件查询方法:
/****
- 条件分页查询
*/
@PostMapping(value = “/list/{page}/{size}”)
public RespResult<Page> list(
@PathVariable(value = “page”)Long currentPage,