1、springboot是什么?
springboot是spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。在以往我们通过SpringMVC+Spring+Mybatis框架进行开发的时候,我们需要配置web.xml,spring配置,mybatis配置,然后整合在一起,而springboot抛弃了繁琐的xml配置过程,采用大量默认的配置来简化我们的spring开发过程。
SpringBoot化繁为简,使开发变得更加的简单迅速。
2、Spring Boot 具有以下特点:
1)独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java –jar xx.jar” 即可运行。
2)内嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。
3)提供 starter 简化 Maven 配置
Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。
4)提供了大量的自动配置
Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
5)自带应用监控
Spring Boot 可以对正在运行的项目提供监控。
7)无代码生成和 xml 配置
Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
3、如何学习SpringBoot
SpringBoot官方文档
Spring Boot Reference Documentation
4、MyBatisPlus简介
MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
5、MyBatisPlus特性
1)无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
2)损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
3)强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
4)支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
5)支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
6)支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
7)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
8)内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
9)内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
10)分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
11)内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
12)内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
6、Mybatis-plus核心注解
1)@TableName
-
描述:表名注解,标识实体类对应的表
-
使用位置:实体类
属性 | 描述 |
---|---|
value | 表名 |
keepGlobalPrefix | 是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时) |
resultMap | xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定) |
2)@TableId
-
描述:主键注解
-
使用位置:实体类主键字段
属性 | 默认值 | 描述 |
---|---|---|
value | "" | 主键字段名 |
type | IdType.NONE | 制定主键类型 |
-
描述:字段注解(非主键)
属性 | 默认值 | 描述 |
---|---|---|
value | "" | 主键字段名 |
exist | true | 是否为数据库表字段 |
condition | "" | 字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s} |
update | "" | 字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性) |
-
描述:序列主键策略
oracle
-
属性:value、dbType
属性 | 默认值 | 描述 |
---|---|---|
value | "" | 序列名 |
dbType | DbType | 数据库类型,未配置默认使用注入 IKeyGenerator 实现,多个实现必须指定 |
7、Mybatis-plus增删改查
1)插入
@Test public void testInsert() { User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); int insert = userMapper.insert(user); System.out.println("受影响的行数:" + insert); System.out.println("id自动获取的值:" + user.getId()); }
2)删除
2.1通过id删除
@Test public void testDelete() { // User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); int deleteById = userMapper.deleteById(1684852328060022785L); System.out.println("受影响的行数:" + deleteById); }
2.2通过id批量删除
@Test public void testDeleteBatchIds() { // User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); List<Long> asList = Arrays.asList(1L, 2L, 3L); int deleteById = userMapper.deleteBatchIds(asList); System.out.println("受影响的行数:" + deleteById); }
3)修改
@Test public void testUpdateById() { User user = new User(4L, "admin", 22, null); // HashMap<String, Object> map = new HashMap<>(); int deleteById = userMapper.updateById(user); System.out.println("受影响的行数:" + deleteById); }
4)查询
4.1查询所有数据
@Test public void testSelectList() {userMapper.selectList(null).forEach(System.out::println);}
4.2通过id查询
@Test public void testSelectById() { // User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); User user = userMapper.selectById(4L); System.out.println("user = " + user); }
4.3通过map条件查询
@Test public void testSelectByMap() { // User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); HashMap<String, Object> map = new HashMap<>(); map.put("name", "admin"); map.put("age",23); List<User> users = userMapper.selectByMap(map); for (User user : users) { System.out.println("user = " + user); } }
4.4通过多个id进行条件查询
@Test public void testSelectBatchIds() { // User user = new User(null, "张三", 23, "zhangsan@atguigu.com"); List<Long> asList = Arrays.asList(2L, 3L, 4L); List<User> users = userMapper.selectBatchIds(asList); for (User user : users) { System.out.println("user = " + user); } }
4.5通用Service
创建Service接口和实现类
public interface UserService extends IService<User> {} @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {} -------------------------------------- @Autowired private UserService userService; @Test public void testGetCount() { long count = userService.count(); System.out.println("总记录数为:" + count); }
4.6批量插入
@Test public void testSaveBatch() { ArrayList<User> users = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setName("abc" + i); user.setAge(21 + i); users.add(user); } userService.saveBatch(users); }