目录

稻草人项目

1. 项目前期准备--MyBaitsPlus

创建实体类User

添加MySQL的依赖:

application.properties中配置连接数据库的配置信息:

Druid据库连接池相关依赖

application.properties中配置使用Druid连接池:

创建UserMapper接口

添加@MapperScan注解来配置接口文件所在的包:

UserMapperTests测试类

2. 项目前期准备--MyBatisPlusGenerator

2.1. 使用MyBatisPlusGenerator生成代码

2.2. 测试MyBatisPlusGenerator生成的代码

3. 项目前期准备--Spring Security


稻草人项目

1. 项目前期准备--MyBaitsPlus

MyBatisPlus是基于MyBatis的基础之上的,它可以自动生成常规的数据访问,使得开发人员在使用时不需要自行编写那些每张表都会有常规数据访问功能,例如插入数据、根据id删除数据等。

先创建数据库straw

CREATE DATABASE straw;

并使用该数据库:

USE straw;

然后创建用户数据表,便于接下来访问数据:

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(20)  COMMENT '用户名',`nickname` varchar(20) NULL COMMENT '昵称',`password` char(68) NOT NULL COMMENT '密码',`gender` int(1) COMMENT '性别',`day_of_birth` date COMMENT '生日',`phone` varchar(20) COMMENT '电话号码',`class_id` int(11) COMMENT '所属班级id',`created_time` datetime COMMENT '注册时间',`enabled` int(1) COMMENT '账号是否可用,0-否,1-是',`locked` int(1) COMMENT '账号是否锁定,0-否,1-是',`type` int(1) COMMENT '0-学生,1-老师',`self_introduction` varchar(255) COMMENT '自我介绍',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

创建实体类User

接下来,还要创建与数据表对应的实体类,在blog-user模块项目中,在根包cn.tedu.blog.user下创建model子包,并在这个子包中创建实体类User

package cn.tedu.blog.user.model;
​
import lombok.Data;
​
import java.time.LocalDate;
import java.time.LocalDateTime;
​
@Data
public class User {
​private Integer id;private String username;private String nickname;private String password;private Integer gender;private LocalDate dayOfBirth;private String phone;private Integer classId;private LocalDateTime createdTime;private Integer enabled;private Integer locked;private Integer type;private String selfIntroduction;
​
}

在使用MyBatisPlus之前,需要MyBatisPlus的依赖,由于当前案例只是演示这个效果,所以相关依赖添加在父项目或blog-user子模块项目中都是可以的:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version>
</dependency>

添加MySQL的依赖:

同时,还需要添加MySQL的依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

application.properties中配置连接数据库的配置信息:

然后,还需要在application.properties中配置连接数据库的配置信息:

spring.datasource.url=jdbc:mysql://localhost:3306/straw?
useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

当配置完成后,应该及时测试,以保证数据库连接的配置是正确的:

@Autowired
DataSource dataSource;
​
@Test
void getConnection() throws SQLException {Connection conn = dataSource.getConnection();log.debug("conn > {}", conn);
}

Druid据库连接池相关依赖

如果需要使用Druid或其它数据库连接池,需要先添加相关依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.23</version>
</dependency>

application.properties中配置使用Druid连接池:

然后在application.properties中配置使用Druid连接池:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=2
spring.datasource.druid.max-active=5

创建UserMapper接口

当需要使用MyBatisPlus时,应该在项目的根包中创建mapper子包(非必须),并在这个子包下创建UserMapper接口,该接口需要继承自MyBatisPlus提供的BaseMapper接口,在继承时,泛型为实体类的类型:

package cn.tedu.blog.user.mapper;
​
import cn.tedu.blog.user.model.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
​
@Repository
public interface UserMapper extends BaseMapper<User> {}

添加@MapperScan注解来配置接口文件所在的包:

与使用MyBatis相同,需要在配置类中添加@MapperScan注解来配置接口文件所在的包:

package cn.tedu.blog.user;
​
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
@MapperScan("cn.tedu.blog.user.mapper")
public class BlogUserApplication {
​public static void main(String[] args) {SpringApplication.run(BlogUserApplication.class, args);}
​
}

UserMapperTests测试类

至此,MyBaitsPlus就已经可以正常使用了,在BaseMapper接口中已经定义了许多数据访问功能,并且,MyBatisPlus会自动完成这些数据访问功能对应的SQL语句,如果不需要自定义其它的方法时,是可以直接使用的!

假设需要向用户表中插入新的用户数据,就可以直接使用BaseMapper中已经定义好的insert()方法。

blog-user模块项目的src/test/java下创建cn.tedu.blog.user.mapper.UserMapperTests测试类,编写并执行单元测试:

package cn.tedu.blog.user.mapper;
​
import cn.tedu.blog.user.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;
​
@SpringBootTest
@Slf4j
public class UserMapperTests {
​@AutowiredUserMapper mapper;
​@Testvoid insert() {User user = new User();user.setUsername("root");user.setPassword("1234");int rows = mapper.insert(user);log.debug("rows={}", rows);}
​
}

关于在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项目,作为父级项目,在创建教程中,将LombokSpring WebMySQLMyBatis Framework并在其中创建straw-portal子模块项目:

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

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

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

 

以上的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属性的值,它表示当前聚合项目的某个子模块项目的名称,这个值将作用于最终生成的类、接口文件的包名:

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

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

2.2. 测试MyBatisPlusGenerator生成的代码

先在straw父项目的pom.xml中添加Druid相关依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.23</version>
</dependency>

straw-portal项目的application.properties配置:

server.port=8080
​
spring.datasource.url=jdbc:mysql://localhost:3306/straw?
useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=2
spring.datasource.druid.max-active=7
​
mybatis.mapper-locations=classpath:mapper/*.xml
​
logging.level.cn.tedu.straw.portal=trace

在项目的启动类上添加注解,配置接口文件的位置:

@MapperScan("cn.tedu.straw.portal.mapper")

全部完成后,在straw-portal子模块项目的src/test/java下创建cn.tedu.straw.portal.mapper.UserMapperTests测试类,进行简单的功能测试:

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 {
​@AutowiredDataSource dataSource;@AutowiredUserMapper userMapper;
​@Testvoid contextLoads() {log.debug("UserMapperTests.context");}
​@Testvoid getConnection() throws SQLException {Connection connection = dataSource.getConnection();log.debug("connection > {}", connection);}
​@Testvoid insert() {User user = new User();user.setUsername("plus");user.setPassword("1234");int rows = userMapper.insert(user);log.debug("rows={}", rows);}
​@Testvoid selectById() {Integer id = 1;User user = userMapper.selectById(id);log.debug("user > {}", user);}
​@Testvoid selectList() {List<User> users = userMapper.selectList(null);log.debug("count={}", users.size());for (User user : users) {log.debug("user > {}", user);}}
​
}

3. 项目前期准备--Spring Security

Spring Security是Spring提供的安全组件,主要用于在项目中对用户的身份进行识别和认证。

使用Spring Security之前,需要添加依赖,可以在创建SpringBoot项目时直接勾选,也可以在已经创建好的项目中添加:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

首先,Spring Security可以实现对密码的加密处理!在straw-portal子模块项目中创建cn.tedu.straw.portal.security.SecurityConfig配置类,需要添加@Configuration注解,在类中自定义方法,返回PasswordEncoder的对象交给Spring容器,其对象的类型可以使用BCryptPasswordEncoder类型的对象:

package cn.tedu.straw.portal.security;
​
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
​
@Configuration
public class SecurityConfig {
​@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
​
}

然后,在src/test/java下创建cn.tedu.straw.portal.SecurityTests测试类,测试加密:

package cn.tedu.straw.portal;
​
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 org.springframework.security.crypto.password.PasswordEncoder;
​
@SpringBootTest
@Slf4j
public class SecurityTests {
​@AutowiredPasswordEncoder passwordEncoder;
​@Testvoid encode() {String rawPassword = "123456";String encodePassword = passwordEncoder.encode(rawPassword);log.debug("raw password={}, encode password={}", rawPassword, encodePassword);}
​
}

稻草人项目--项目前期准备( day02 )相关推荐

  1. 数据分析项目-合集-day02

    数据分析项目-合集-day02 需求: - 导入文件,查看原始数据 - 将人口数据和各州的简称数据进行合并 - 将合并的数据中重复的abbreviation进行删除 - 查看存在缺失数据的列 - 找到 ...

  2. 稻草人项目--项目的数据处理流程-- ( day03 )

    目录 稻草人项目 项目的数据处理流程 - - -了解项目的数据处理流程 用户界面---->控制器层---->业务层---->持久层 学生注册---持久层 学生注册--业务层 在执行 ...

  3. 正在使用的项目,项目名那里出现了红色感叹号?怎么去除?

    正在使用的项目,项目名那里出现了红色感叹号?怎么去除? 今天删除了几个jar文件,出现了如下的问题, [问题原因]:工程中classpath中指向的包路径错误 [解决办法]:右键项目名称 BuildP ...

  4. arm电子相册项目——项目要求篇(描述功能)

    <arm电子相册项目--项目要求篇(描述功能)> 工具:keil4 , arm开发板(Mini2451)(s3c2451) , 串口线 功能:显示照片(自动切换 / 手动切换 / 暂停切换 ...

  5. 2 大数据电商数仓项目——项目需求及架构设计

    2 大数据电商数仓项目--项目需求及架构设计 2.1 项目需求分析 用户行为数据采集平台搭建. 业务数据采集平台搭建. 数据仓库维度建模(核心):主要设计ODS.DWD.DWS.AWT.ADS等各个层 ...

  6. C++文件服务器项目—项目总结与反向代理—7

    C++文件服务器项目-项目总结与反向代理-7 1. 项目总结 2. 项目提炼 3. web服务器的反向代理 4. 存储节点的反向代理   组件介绍基本写完了,后续进行深入.   本专栏知识点是通过零声 ...

  7. maven聚合项目项目间依赖时,出现错误的解决办法

    纯手打,转载请附上本文网址!!! 例如自己的项目taotao maven聚合项目项目间依赖时 打包时候要先在聚合工程里面(从外向里)整体install,再到子工程里install mvn clean ...

  8. java 源码哪个文件夹_JAVA项目——项目编译后的类路径和源码文件夹图解

    JAVA项目--项目编译后的类路径和源码文件夹图解 前言: 一定要很清楚哪个是源码文件夹,哪个是类路径以及类路径的形成机制. 项目编译后不同的源码文件夹会被合并到bin目录下,形成类路径.不同的源码文 ...

  9. Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig)

    Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql ...

最新文章

  1. vsftpd实现的FTP服务
  2. mysql+永久+关闭提交,MySQL学习【第十一篇存储引擎之事务解释】
  3. 桌面时钟代码_iOS 14 制作自己的桌面 Widget
  4. python怎么让按钮透明_python – 如何创建一个响应Tkinter中的click事件的透明矩形...
  5. c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc
  6. 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
  7. 草莓甜品海报设计,甜出画面,受得住诱惑么?
  8. static 结构体_C++基础-static
  9. Pivotal Cloud Foundry安全原理解析
  10. sql 查询字段是中文/英文/数字 正则表达式
  11. HTML图片热点及表单
  12. VS2010+VAX+CUDA6.0配置语法高亮和自动补充
  13. 怎么用dos命令打开计算机,如何使用DOS命令打开C盘下的文件夹dos如何打开文件夹...
  14. Flutter应用在夜神模拟器启动白屏问题
  15. opencv之c++环境搭建linux、windows
  16. Java编程笔记6:接口
  17. PPT画图如何保存600dpi以及消除白边问题
  18. android/iphone/windows/linux声波通讯库
  19. 【工业机器人】工业机器人最全面基础知识科普,一篇文章彻底搞透
  20. 小linux软件下载,超小的Linux发行版Puppy Linux 8.0发布下载

热门文章

  1. Qt for python 的属性系统使用,并注册python到qml使用
  2. 云效携手SAE助力「石家庄掌讯 」持续交付、降本提效
  3. Android开机logo修改方法 【转】
  4. ieee下载文献的方法
  5. Fedora20视频播放器安装
  6. Android扫描识别身份证识别SDK
  7. 计算机研究生生课题物信息学,华中农业大学信息学院研究生导师简介-李国亮...
  8. 心疼!内蒙古一4岁男孩在幼儿园被老师打,园方不承认施暴
  9. 用python写了个算命脚本
  10. 五年平均增速用计算机怎么算,行测重要知识点:年均增长率的计算