SpringBoot之MyBatisPlus插件的入门使用(一个简化开发的插件)

1.声明

最近有人问我用过MyBatis-Plus吗,我果断回答了解过!

但是本人的博客中有一个自定义的分页插件SpringBoot整合MyBatis中的技巧(基本的AOP配置以及创建自己的分页拦截器),自己通过debug实现的,因为插件好写(就按照官方的写基本就可以实现了)

但是别人又问到了,于是就去了解写了几个demo,官方地址:MyBatis-plus

结果发现这个东西就是一个半hibernate和半mybatis,感觉这个东西的立场不坚定啊!

现在通过官方的demo发现这个插件的用处

2.添加pom依赖

<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">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>springboot-mybatisplus</groupId>
	<artifactId>springboot-mybatisplus</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot-mybatisplus</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>RELEASE</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.46</version>
			<!-- <scope>runtime</scope> -->
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
		<!-- <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> 
			<version>1.1.21</version> </dependency> <dependency> <groupId>com.alibaba</groupId> 
			<artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> -->
		<!-- mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.3.1.tmp</version>
		</dependency>
		<!-- h2database -->
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!-- 代码生成器 -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
			<version>3.3.1.tmp</version>
		</dependency>
		<!-- 默认的模板引擎 -->
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity</artifactId>
			<version>1.7</version>
		</dependency>
	</dependencies>

3.准备sql文件和application文件

在这里插入图片描述
在这里插入图片描述
这里和官方的demo持一致,使用内存h2数据库,并输出sql

4.创建配置类MyBatisPlusConfig

@Configuration
public class MyBatisPlusConfig {

	@Bean
	SqlSessionFactory sqlSessionFactory(@Autowired DataSource dataSource) throws Exception {
		MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
		factory.setPlugins(paginationInterceptor());
		factory.setDataSource(dataSource);
		return factory.getObject();
	}

	PaginationInterceptor paginationInterceptor() {
		PaginationInterceptor pagePlugin = new PaginationInterceptor();
		pagePlugin.setDialectType("h2");
		Properties properties = new Properties();
		properties.setProperty("format", "true");
		pagePlugin.setProperties(properties);
		return pagePlugin;
	}
}

我们使用spring默认提供的源

5.创建实体类User和UserMapper

@Data
public class User {
	private Long id;
	private String name;
	private Integer age;
	private String email;
}

// 感觉就像spring data 一样
public interface UserMapper extends BaseMapper<User> {

}

发现这货好像吸收了Springdata中的部分思想,感觉没有SpringData好用!

6.创建Controller层

/**
 * @description 用户的增删改查分页等操作
 * @author hy
 * @date 2020-04-06
 */
@RestController
public class UserController {
	@Autowired
	UserMapper userMapper;

	@RequestMapping("/findAllUser")
	public ResponseEntity<?> findAllUser() {
		List<User> selectList = userMapper.selectList(new QueryWrapper<User>());
		return ResponseEntity.ok(selectList);
	}

	@RequestMapping("/findUserPage") // 使用分页的时候需要配置分页插件
	public ResponseEntity<?> findUserPage(Integer currentPageNo, Integer pageSize) {
		Page<User> userPage = new Page<User>(currentPageNo, pageSize);
		
		IPage<User> selectPage = userMapper.selectPage(userPage, null);
		System.out.println("总页数" + userPage.getPages());
		System.out.println("总记录数" + userPage.getTotal());
		System.out.println("总页数" + selectPage.getPages());
		System.out.println("总记录数" + selectPage.getTotal());
		return ResponseEntity.ok(selectPage);
	}

	@RequestMapping("/insertUser")
	public ResponseEntity<?> insertUser(User user) {
		int insert = userMapper.insert(user);
		return ResponseEntity.ok("添加用户成功,当前添加的数量为:" + insert);
	}

	@RequestMapping("/deleteUserById/{id}")
	public ResponseEntity<?> deleteUserById(@PathVariable("id") Integer id) {
		int deleteById = userMapper.deleteById(id);
		return ResponseEntity.ok("删除用户成功,当前删除的条数为:" + deleteById);
	}

	@RequestMapping("/updateUser")
	public ResponseEntity<?> updateUser(User user) {
		int updateById = userMapper.updateById(user);
		return ResponseEntity.ok("更新用户成功,当前更新的条数为:" + updateById);
	}
}

7.创建入口类

/**
 * @description 当前的内容用于本人测试和学习mybatis-plus
 * @author hy
 * @date 2020-04-06
 */
@EnableTransactionManagement
@SpringBootApplication()
@MapperScan("com.hy.springboot.mybatisplus.mapper")
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

测试:结果成功!

8.评点

本人感觉矛盾的地方

  1. 第一点,没有findAll方法,只提供findList,居然可以提供null或者空QueryWrapper
  2. 第二点,我放进去的userPage和返回来的selectPage里面的结果都是一致的,说明其实就是将放入的Page又返回过来的,这里我觉得应该直接传递一个PageParam只放入两个参数即可,然后返回Page就可以了,有点多此一举的感觉!
  3. 第三点,这里的QueryWrapper感觉很像Query.query(Criteria.where("name").is(name),感觉和Hibernate以及Spring中提供的templatem模板差不多,但是本人觉得spring提供的template更加好用
  4. 第四点,当前BasicMapper提供的功能太少了,就几个方法
  5. 第五点,这个框架中融入了很多的东西,看起来很杂乱,可能还需要改进,对于一般的执行单表操作还是可以的(一般开发过程中,不可能只有单表操作,一般最少几张表或者几十个表查询,所以提供的方法无法实现,最后还是要自己写mapper方法和sql,这里的BasicMapper就没什么作用了)
  6. 第六点,开发中还是要使用原生的MyBatis才能实现操作,其他的问题暂时还没想到。。。

本人理解的地方

  1. 由于这是一个以Mybatis为主的东西,所以要完全实现自动化还是要以hibernate为主
  2. 这个只能作为插件使用,如果认真你就输了,这也是为什么mybatis没有开发其他的插件的原因(sql映射永远是第一位,sql才是最终的目的)

9.总结

1.MyBatisPlus只能作为简化单个表的操作(本人利用反射一样可以实现),只能作为插件使用,有的时候自己封装一套可能更好(MyBatisPlus并不是非常好用(至少在实际开发中))

2.MyBatisPlus本身就是对MyBatis的部分扩充,所以如果想要更加理解原理,还是要以MyBatis的源码为主

3.MyBatisPlus并不是那么好用,只能说还可以,比自己写的强一点

4.其实学习任何框架都是这样的,当我们知道原理的时候,自己就可以写出一套自己的插件,和需要的东西(编程就多看多模仿多学习),所以学习任何东西的时候,都需要自己本事过硬,了解原理最重要

以上纯属本人见解,如有问题请联系本人!

发布了242 篇原创文章 · 获赞 44 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/105360326