增强Mybatis常用方案
我们在使用MyBatis时,通常不会去直接使用MyBatis持久层框架。大部分情况是使用MybatisGenenrator和MybatisPlus这两种方案。这两种方案属于Mybatis的增强方案,能够增加起功能性和易用性。
MybatisGenenrator
首先我们在pom.xml文件中引入maven相关依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>12345复制代码类型:[java]
再修改一下application.yml文件:
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/Family?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456mybatis: # 扫描.xml文件的路径 mapper-locations: classpath:generator/*.xml logging: level: com.javafamily.familydemo: debug1234567891011121314151617复制代码类型:[java]
在FamilyDemoApplication中配置Mapper类文件的包扫描路径。
package com.javafamily.familydemo;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan(basePackages = {"com.javafamily.familydemo.generator"})public class FamilyDemoApplication { public static void main(String[] args) { SpringApplication.run(FamilyDemoApplication.class, args); } }12345678910111213复制代码类型:[java]
Mybatis代码很大一部分不需要我们自己手动编写。而是采用Mybatisgenerator等方式通过数据库结构帮助我们自动生成持久层代码从而提高开发效率。
Mybatisgenerator的主流实现方法有三种:
xml配置文件方式
编码实现MybatisGenerator代码生成配置方式
IDEA插件实现Mybatisgenerator代码生成配置方式
其中最方便的是第三种方法。
我们采用第三种方法来实现Mybatisgenerator代码,首先在IDEA中安装Mybatisgenerator插件。
在Plugins中搜索插件,点击install进行插件安装。
安装完成后,我们就可以开始使用了。
点击右侧Database,添加MySQL数据库:
连接数据库:
如果我们想生成表pets的持久层代码,双击pets表选择mybatis-generator:
我们需要进行简单的调整,将modelpackage和daopackage的路径修改一下:
路径修改完成后,点击ok。如果是第一次使用better-mybatis-generator插件,会要求输入数据库的账号和密码:
输入完成后,javafamily.familydemo下的generator文件会生成代码:
完成所有配置后我们来编写增删改查代码
PetsService接口中的代码不变,只需要修改PetsServiceImpl.java中的代码:
package com.javafamily.familydemo.service;import com.javafamily.familydemo.generator.Pets;import com.javafamily.familydemo.generator.PetsDao;import com.javafamily.familydemo.model.PetsVO;import com.javafamily.familydemo.utils.DozerUtils;import org.springframework.stereotype.Service;import org.dozer.Mapper;import javax.annotation.Resource;import java.util.List;@Servicepublic class PetsServiceImpl implements PetsService { @Resource protected Mapper dozerMapper; @Resource // mybatis generator会自动生成代码 private PetsDao petsDao; @Override public void savePets(PetsVO pets) { Pets petsPO = dozerMapper.map(pets, Pets.class); petsDao.insert(petsPO); } @Override public void deletePets(long id) { petsDao.deleteByPrimaryKey(id); } @Override public void updatePets(PetsVO pets) { Pets petsPO = dozerMapper.map(pets, Pets.class); petsDao.updateByPrimaryKeySelective(petsPO); } @Override public PetsVO getPets(Long id) { return dozerMapper.map(petsDao.selectByPrimaryKey(id), PetsVO.class); } @Override public List<PetsVO> getAll() { List<Pets> pets = petsDao.selectByExample(null); return DozerUtils.mapList(pets, PetsVO.class); } }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051复制代码类型:[java]
执行代码,在postman中进行测试(注:执行代码之前先将上节编写的配置文件注释掉,否则会影响执行)
添加数据:
查询数据:
修改数据:
删除数据:
MybatisPlus
MybatisPlus相对于MybatisGenenrator功能更多、更强大。MybatisPlus是Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。
首先我们在pom.xml文件中引入maven依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>12345复制代码类型:[java]
有了mybatis-plus-boot-starter依赖后就不需要mybatis-spring-boot-starter依赖了。
application.yml文件不需要改动。
在familydemo文件下创建mapper文件夹,并修改FamilyDemoApplication中@MapperScan的扫描路径:
package com.javafamily.familydemo;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan(basePackages = {"com.javafamily.familydemo.mapper"})public class FamilyDemoApplication { public static void main(String[] args) { SpringApplication.run(FamilyDemoApplication.class, args); } }12345678910111213复制代码类型:[java]
model文件下的pets:
package com.javafamily.familydemo.model;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Date;import java.util.List;@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class Pets { private long id; private String name; private String varieties; private Date createTime; }1234567891011121314151617181920复制代码类型:[java]
在新建的mapper文件下创建petsMapper接口:
package com.javafamily.familydemo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.javafamily.familydemo.model.Pets;public interface PetsMapper extends BaseMapper<Pets> { }123456789复制代码类型:[java]
BaseMapper中提供了若干关于增删改查的实现代码。继承BaseMapper之后就可以直接使用这些方法来操控表。
实现增删改查
再次改写PetsServiceImpl.java:
package com.javafamily.familydemo.service;import com.javafamily.familydemo.mapper.PetsMapper;import com.javafamily.familydemo.model.Pets;import com.javafamily.familydemo.utils.DozerUtils;import org.springframework.stereotype.Service;import javax.annotation.Resource;import org.dozer.Mapper;import java.util.List;@Servicepublic class PetsServiceImpl implements PetsService { @Resource protected Mapper dozerMapper; @Resource private PetsMapper petsMapper; @Override public void savePets(Pets pets) { Pets petsPO = dozerMapper.map(pets, Pets.class); petsMapper.insert(petsPO); } @Override public void deletePets(long id) { petsMapper.deleteById(id); } @Override public void updatePets(Pets pets) { Pets petsPO = dozerMapper.map(pets, Pets.class); petsMapper.updateById(petsPO); } @Override public Pets getPets(Long id) { return dozerMapper.map(petsMapper.selectById(id), Pets.class); } @Override public List<Pets> getAll() { List<Pets> pets = petsMapper.selectList(null); return DozerUtils.mapList(pets, Pets.class); } }12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849复制代码类型:[java]
执行代码,使用postman进行测试,增删改查功能全部正常。
注意事项
mybatisgenerator和MybatisPlus只适用于单表的操作。如果涉及关联查询、继承等。Mybatis文件和MySQL还是需要自己编写,而不是生成的代码基础上面改。