一步到位springboot目录
gitee:https://gitee.com/chaitou/leilema.git
上篇我们已经敲定ORM
框架使用Mybatis-plus
了,这篇我们就正式来撸。
在开撸之前再强调一遍:
lombok
,因此拉下代码后,要运行前请务必装上lombok
插件,否则报错。不知道怎么装的再回顾下springboot02:准备mysql
,并通过项目中/sql
目录下的语句或springboot02:准备中的sql语句准备好数据库环境(当让也可以使用项目上的数据库,但是请在使用后清空生成的数据,防止影响他人的是使用)有一些初学者认为集成框架是架构师做的事情,是很牛逼很难的事情。这里我纠正一下这种同学的观点,集成框架是非常简单的事情。架构师的价值体现在对项目的把握,提出一套易于开发,易于扩展,在性能成本方面又最具性价比的解决方案。所以在这里给小白吃个定心丸,别方,无论什么集成什么框架顶多就3步
jar
包,现在使用maven
或gredle
就更简单了是的,就这么简单,接下去就手把手带大家集成一下Mybatis-plus
mysql
数据库,所以我们需要引入mysql
的驱动器依赖。
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
Mybatis-plus
,就需要引入其starter
依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.3.0version>
dependency>
这样写ok吗?low low low
身为一名优秀的架构师,我们是看不得这种3.3.0
的,要把他写成配置,不然逼格根本上不去。以后看到写3.3.0
这种数字的一定要跟他说low
<properties>
<java.version>1.8java.version>
<mybatis-plus.version>3.3.0mybatis-plus.version>
properties>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>${mybatis-plus.version}version>
dependency>
lombok
的依赖,因为entity
实体层必然需要用到getter
跟setter
(怕你们项目起不来,我可真是太卑微了,最后一次强调lombok
…)
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://148.70.139.121:3306/leilema?useSSL=false&serverTimezone=GMT%2B8
username: root
password: leilema
xml
的配置都被去掉了,都改用注解的形式,Mybatis-plus
当然也不例外了,我们新建一个MybatisPlusConfiguration
配置类,等同于老springxml
中写的@EnableTransactionManagement
@MapperScan("com.bugpool.leilema.*.mapper")
@Configuration
public class MybatisPlusConfiguration {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
解释一下这几个注解
@Configuration
:表明这是一个配置文件,spring应该把他当成跟xml配置文件一样进行读取,然后放入Ioc容器中@EnableTransactionManagement
:开启事务用的,既然要与数据库打交到,事务是不可或缺的,虽然本篇还用不着,但是先写着吧@MapperScan("com.bugpool.leilema.*.mapper")
:指定扫描mapper
的目录,mapper
就是常说的dao
层。Mybatis-plus
启动时会去自动扫描这些目录下的文件,并当成Mapper
注入到Spring Ioc容器中,如果路径错误,必然引起service
层的注入错误ProductInfo
商品是单表操作,因此以它为例,我们需要建立一下层级目录,entity
实体层、mapper
数据访问层、service
业务、service
服务层、controller
控制层
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 商品主键
*/
@TableId(value = "product_id", type = IdType.AUTO)
private Integer productId;
/**
* 商品名称
*/
private String productName;
/**
* 单价
*/
private BigDecimal productPrice;
/**
* 描述
*/
private String productDescription;
/**
* 商品状态,0正常1下架
*/
private Integer productStatus;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 创建人
*/
private String createUser;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 修改人
*/
private String updateUser;
}
public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
}
还需要添加mapper的xml文件
<mapper namespace="com.bugpool.leilema.product.mapper.ProductInfoMapper">
mapper>
public interface ProductInfoService extends IService<ProductInfo> {
}
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {
}
@RestController
@RequestMapping("/product/product-info")
public class ProductInfoController {
}
怎么校验呢?查一下数据库不就知道了,在数据库中插入一条数据,如果能查询出来遍说明集成成功了。这里我们先接触一下单元测试
,不懂不要紧,只管先抄,后面专题讲解
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
/test
目录下编写单元测试类@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductInfoMapperTest {
@Autowired
ProductInfoMapper productInfoMapper;
@Test
public void testGetById() {
ProductInfo productInfo = productInfoMapper.selectById(1);
System.out.println(productInfo);
Assert.assertNotNull(productInfo);
}
}
点击运行,看看能不能把数据查出来,如果你看到下图,说明已经集成成功了
@Autowired
ProductInfoMapper productInfoMapper;
这句代码相信读者都看到了productInfoMapper
飘红了,这是为什么呢?
主要是因为IDEA太智能了,当我们@Autowire
自动注入某个类的时候,他就会自动去项目下寻找是否有@Componte
、@Service
或者相关Bean注解的标识,如果没有,他就认为你注入的Bean不存在,提示你
回看我们的Mapper
文件,确实是没有加相关依赖,因为我们使用了@MapperScan("com.bugpool.leilema.*.mapper")
进行mapper
扫描,然后当如到Ioc容器中,但是IDEA看不懂啊,所以他就飘红了。因此就算飘红,其实我们的代码是没有问题的,也是可以正常运行。但是看着总是心烦(如果像我这种快捷键小王子,F2快速跳转错误的操作一定会被逼死),因此我们就关闭IDEA让他别检测这个类型的错误了
去除这个检测只会在本项目生效,其他项目不会生效,因此不用担心影响其他项目。实在处女座的同学,就是担心IDEA配置乱掉,可以到该目录进行查看IDEA检测配置