1.持久层接口—BaseMapper
创建的接口继承自BaseMapper<T>,那么基本的操作就都有了。
insert 、deleteById、updateById、selectById。
package com.example.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.Employee;
public interface EmployeeMapper extends BaseMapper<Employee> {
}
测试:
@SpringBootTest
class SpringbootMybatisplus1ApplicationTests {
@Autowired
private EmployeeMapper employeeMapper;
@Test
void findAllEmps() {
List<Employee> employees = employeeMapper.selectList(null);
employees.forEach(System.out::println);
}
@Test
void testInsert1(){
Employee e1 = new Employee(1L,"蒋瑞","男",20,"zjy@offcn.com");
int num = employeeMapper.insert(e1);
System.out.println("返回值:"+num);
}
@Test
void testInsert(){
Employee e1 = new Employee(2L,"张继雨","男",20,"zjy@offcn.com");
int num = employeeMapper.insert(e1);
System.out.println("返回值:"+num);
}
@Test
void testDeleteById(){
int num = employeeMapper.deleteById(2L);
System.out.println("返回值:"+num);
}
//按照指定的条件删除对象:名字叫蒋瑞,并且性别是男的
@Test
void testDeleteByMap(){
Map<String,Object> map = new HashMap<>();
map.put("emp_name","蒋瑞");
map.put("emp_gender","男");
int num = employeeMapper.deleteByMap(map);
System.out.println("返回值:"+num);
}
@Test
void testdeleteBatchIds(){
List<Long> ids = new ArrayList<>();
ids.add(1L);
ids.add(2L);
int num = employeeMapper.deleteBatchIds(ids);
System.out.println("返回值:"+num);
}
@Test
void updateById(){
Employee e1 = new Employee(2L,"张雨雨",null,20,"zjy@offcn.com");
int num = employeeMapper.updateById(e1);
System.out.println("返回值:"+num);
}
@Test
void selectById(){
Employee employee = employeeMapper.selectById(2L);
System.out.println(employee);
employee = employeeMapper.selectById(3L);
System.out.println(employee);
}
@Test
void selectBatchIds(){
List<Long> ids = new ArrayList<>();
ids.add(2L);
ids.add(1367686308726788098L);
List<Employee> employees = employeeMapper.selectBatchIds(ids);
employees.forEach(System.out::println);
}
@Test
void selectByMap(){
Map<String,Object> map = new HashMap<>();
map.put("emp_name","张雨雨");
map.put("emp_gender","男");
List<Employee> employees = employeeMapper.selectByMap(map);
employees.forEach(System.out::println);
}

2.Wrapper
Wrapper:类似对象操作的方式封装条件,一般使用他的子类QueryWrapper进行操作。
支持编程链的书写结构。qr.eq(name,aaa).and().eq(age,12);
delete update selectOne\count\list\maps\ojbs\page\mapspage
@Test
void delete(){
//张雨雨 且 男
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_name","张雨雨").eq("emp_gender","男");
int num = employeeMapper.delete(queryWrapper);
}
测试:
@Test
void delete(){
//张雨雨 且 男
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_name","张雨雨").eq("emp_gender","男");
int num = employeeMapper.delete(queryWrapper);
}
@Test
//修改名字是张春雨 或 性别为男 年龄为30
void update(){
Employee entity = new Employee();
entity.setAge(30);//要修改的数据
//组织条件
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_name","张春雨")
.or()
.eq("emp_gender","男");
int num = employeeMapper.update(entity, queryWrapper);
System.out.println(num);
}
//查询性别为男的
@Test
void selectOne(){
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_gender","女");
Employee employee = employeeMapper.selectOne(queryWrapper);
System.out.println(employee);
}
//几个男性
@Test
void selectCount(){
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_gender","男");
Integer num = employeeMapper.selectCount(queryWrapper);
System.out.println("结果集:"+num);
}
@Test
void selectList(){
//查询所有男性,且按照年龄降序排序
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_gender","男").orderByDesc("age");
List<Employee> employees = employeeMapper.selectList(queryWrapper);
employees.forEach(System.out::println);
}
@Test
void selectMaps(){
//查询所有男性,且按照年龄降序排序
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_gender","男").orderByDesc("age");
List<Map<String,Object>> employees = employeeMapper.selectMaps(queryWrapper);
for(Map<String,Object> map:employees){
System.out.println("-----------------------");
for(Map.Entry<String,Object> me:map.entrySet()){
System.out.println(me.getKey()+"="+me.getValue());
}
}
}
@Test
void selectObjs(){
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("emp_gender","男").orderByDesc("age");
List<Object> objects = employeeMapper.selectObjs(queryWrapper);
for(Object obj:objects)
System.out.println(obj);
}
@Test
void selectList1(){
//模糊查询
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
// queryWrapper.like("emp_name","雨");//模糊
queryWrapper.likeRight("emp_name","张");//姓张
List<Employee> employees = employeeMapper.selectList(queryWrapper);
employees.forEach(System.out::println);
}
@Test
//分页查询:IPage接口,Page是IPage的实现类
void selectPage(){
Page<Employee> page = new Page<>(2,3);//查看第1页,每页显示3条
Page<Employee> page1 = employeeMapper.selectPage(page, null);
System.out.println("每页条数:"+page1.getSize());
System.out.println("总条数:"+page1.getTotal());
System.out.println("分页记录:"+page1.getRecords());
}
3.字段映射
@TableId注解 主键映射
@TableName 类名和表名映射
@TableField注解 类字段名和表中字段名映射
```java
```java
// @TableId //单独使用:表明empId是主键字段(对应数据库empId或emp_id)。自动映射
// private Long empId;// empId emp_id
// @TableId(value="emp_id") //实体类属性名和表字段名映射
// private Long eid;
//type指定主键生成策略。IdType.ASSIGN_ID,采用雪花算法由MP生成的唯一的ID
// IdType.AUTO。由数据库生成主键
@TableId(type = IdType.AUTO)
4.业务层接口—IService
public interface EmployeeService extends IService<Employee> {
}
@Service
public class EmployeeServiceImpl
extends ServiceImpl<EmployeeMapper, Employee>
implements EmployeeService {
}
测试:
@Autowired
private EmployeeService employeeService;
@Test
void testSave(){
Employee employee = new Employee();
employee.setEmpName("东方不败");
employee.setEmail("dfbb@example.org");
employeeService.save(employee);
}
@Test
void testSaveOrUpdate(){
Employee employee = new Employee();
employee.setEmpId(1410231010219208706L);
employee.setEmpName("任你行");
employee.setEmail("rwx@example.org");
employeeService.saveOrUpdate(employee);
}
@Test
void testGetOne(){
QueryWrapper<Employee> qw1 = new QueryWrapper<>();
qw1.like("emp_name","任");
// Employee one = employeeService.getOne(qw1);//存在多条记录会抛出异常
Employee one = employeeService.getOne(qw1,false);//存在多条记录会不抛出异常,取第一条
System.out.println(one);
}
5.代码生成器
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
<dependency><!--mybatis plus的启动器-->
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</arti在这里插入代码片factId>
<version>3.4.2</version>
</dependency>
<dependency><!--mybatis plus的生成器-->
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency><!--mybatis plus生成器使用的模板技术velocity-->
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
@Test
void contextLoads() {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("author");//设置作者
gc.setOpen(false);//生成是后是否打开资源管理器
gc.setFileOverride(false);//重新生成文件时是否覆盖
gc.setServiceName("%sService");
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("sorry");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent("com.example");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("employee");//对那一张表生成代码
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
MP总结
mapper和service基础接口,字段映射、查询分页、代码生成器
版权声明:本文为qq_45411727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。