项目前期准备--MyBaitsPlus、MyBatisPlusGenerator和Spring Security(3)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 项目前期准备--MyBaitsPlus、MyBatisPlusGenerator和Spring Security(3)

关于在IDEA中装配持久层接口对象时,使用@Autowired默认报错的解决方案:

改为使用@Resource注解;

配置@Autowired的注解参数为required=false,即:@Autowired(required=false);

在接口之前添加@Repository注解。

如果直接执行以上单元测试,会出现以下错误:


Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class cn.tedu.blog.user.model.User' with value '1282871589072584705' Cause: java.lang.IllegalArgumentException: argument type mismatch


因在插入数据时,MyBatisPlus会自动生成Id值(例如以上错误信息中的1282871589072584705),需要显式的在实体类中与主键对应的属性之前添加@TableId注解,并且将注解属性type设置为IdType.AUTO:


@Data
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    // 忽略后续代码
}


然后,再次运行,即可正常插入数据。


另外,此次运行可以看到日志中输出了此次执行的SQL语句及相关信息,之所以会显示这些日志,是因为:


MyBatis框架默认就会输出这些信息;

必须在项目中添加SLF4j的依赖,以保证MyBatis输出日志;

MyBatis输出SQL日志的级别是Debug,必须将日志的显示级别设置的更低,例如设置为trace。


2. 项目前期准备–MyBatisPlusGenerator


2.1. 使用MyBatisPlusGenerator生成代码


在IDEA中创建straw项目,作为父级项目,在创建教程中,将Lombok、Spring Web、MySQL、MyBatis Framework并在其中创建straw-portal子模块项目:

image.png



MyBatisPlus Generator是一个代码生成器,通过使用它,运行后,就可以直接生成大量代码文件(例如Java类、接口、配置SQL的XML文件),然后,将这些文件复制到正式使用的项目中,就可以省去一些基础的创建过程!


首先,代码生成器的相关使用应该在一个独立的子模块项目中,避免与其它项目产生交集(不要在正式使用的项目中使用代码生成器)!所以,继续在straw父项目中创建代码生成器专用的子模块项目straw-generator,创建过程与一般子模块项目完全相同:


image.png


然后,通过http://doc.canglaoshi.org/config/mybatis-plus-generator.zip下载使用代码生成器必要的2个文件(在同一个压缩包中):


image.png


以上的2个文件,CodeGenerator是代码生成器的执行文件,通过调整其中的配置并执行即可生成所需要的文件,mapper.java.ftl是需要生成的Java类/接口文件的模版文件。


首先,在straw-generator子模块项目中,将原有的src文件夹下的test文件删除(也可以不删,主要是留着也没用),同样的,还可以将src下的启动类(StrawGeneratorApplication)和配置文件application.properties删除(也用不上)。


在straw-generator子模块项目的pom.xml中,添加必要的依赖:


<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.3.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>


然后,将下载解压得到的CodeGenerator.java文件直接复制到项目的cn.tedu.straw.generator包中,并打开该文件夹,检查各全局属性的值,特别是连接哪个数据库、连接数据库的用户名和密码,必须与自己当前使用的MySQL保持一致!还必须检查modelName属性的值,它表示当前聚合项目的某个子模块项目的名称,这个值将作用于最终生成的类、接口文件的包名:


image.png


确定无误后,在straw-generator子模块项目的src/main/resources下创建ftl文件夹,并将下载得到的mapper.java.ftl复制到这个文件夹中:



image.png

然后,回到CodeGenerator类中,将最后一个全局属性(用于配置模版文件的位置的属性)设置为"/ftl/mapper.java"(与以上放置文件的位置对应)。



package cn.tedu.straw.portal.mapper;
import cn.tedu.straw.portal.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.jws.soap.SOAPBinding;
import javax.sql.DataSource;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
@SpringBootTest
@Slf4j
public class UserMapperTests {
    @Autowired
    DataSource dataSource;
    @Autowired
    UserMapper userMapper;
    @Test
    void contextLoads() {
        log.debug("UserMapperTests.context");
    }
    @Test
    void getConnection() throws SQLException {
        Connection connection = dataSource.getConnection();
        log.debug("connection > {}", connection);
    }
    @Test
    void insert() {
        User user = new User();
        user.setUsername("plus");
        user.setPassword("1234");
        int rows = userMapper.insert(user);
        log.debug("rows={}", rows);
    }
    @Test
    void selectById() {
        Integer id = 1;
        User user = userMapper.selectById(id);
        log.debug("user > {}", user);
    }
    @Test
    void selectList() {
        List<User> users = userMapper.selectList(null);
        log.debug("count={}", users.size());
        for (User user : users) {
            log.debug("user > {}", user);
        }
    }
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
WXM
|
3月前
|
Java 应用服务中间件 Maven
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
1天前
|
Java Spring
ij社区版如何创建spring项目
如何在IntelliJ IDEA社区版中创建Spring项目,包括安装Spring Boot Helper插件的步骤和创建过程。
7 1
ij社区版如何创建spring项目
|
3月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
3月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
3月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
7天前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
9 0
|
14天前
|
Java Spring
spring boot 启动项目参数的设定
spring boot 启动项目参数的设定
|
2月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
42 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
2月前
|
前端开发 JavaScript Java
spring boot+vue前后端项目的分离(我的第一个前后端分离项目)
该博客文章介绍了作者构建的第一个前后端分离项目,使用Spring Boot和Vue技术栈,详细说明了前端Vue项目的搭建、后端Spring Boot项目的构建过程,包括依赖配置、数据库连接、服务层、数据访问层以及解决跨域问题的配置,并展示了项目的测试结果。
spring boot+vue前后端项目的分离(我的第一个前后端分离项目)