目录
1、mybatisPlus的简介
mybatisplus的文档地址:简介 | MyBatis-Plus
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
2、特点:
- 简化开发:MyBatis Plus提供了一套简化的CRUD接口,使开发人员无需编写大量的重复的SQL代码。
- 高度可定制:MyBatis Plus支持自定义的SQL语句和映射,开发人员可以根据自己的需求进行定制化开发。
- 强大的代码生成器:MyBatis Plus提供了一套强大的代码生成器,可以根据数据库表自动生成对应的实体类、Mapper接口、Service接口和Controller等代码,大大提高了开发效率。
- 支持多种数据库:MyBatis Plus不仅支持MySQL、Oracle等常见数据库,还支持一些非关系型数据库,如MongoDB、Redis等。
3、开发步骤:
(1)导入依赖:
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- Druid依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
(2)编写配置文件:(application.yml)
spring:
#数据源
datasource:
#1.JDBC
type: com.alibaba.druid.pool.DruidDataSource
#驱动类
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/myschool?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
druid:
#2.连接池配置
#初始化连接池的连接数量 大小,最小,最大
initial-size: 20
min-idle: 20
max-active: 100
#配置获取连接等待超时的时间
max-wait: 10000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 30000
# SQL 心跳指令
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: false
mybatis-plus:
configuration:
#与小驼峰命名相互转换
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志配置
type-aliases-package: com.yzch.domain
#映射文件的配置
mapper-locations: classpath:/mapper/*Mapper.xml
(3)编写实体类:
package com.yzch.domain;
import java.io.Serializable;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* @TableName t_user
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName(value ="t_user")
public class TUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private Integer userId;
/**
*
*/
@ExcelProperty("用户名")
private String userName;
/**
*
*/
@ExcelProperty("年龄")
private Integer userAge;
/**
*
*/
@ExcelProperty("性别")
private String userSex;
/**
*
*/
@ExcelProperty("收入")
private Integer userIncome;
/**
*
*/
@ExcelProperty("省份")
private String province;
/**
*
*/
@ExcelProperty("城市")
private String city;
/**
* 职业
*/
@ExcelProperty("职业")
private String userOccupation;
/**
* 是否有车,0是没有,1是有
*/
@ExcelProperty("车")
private Integer userIsCar;
}
(4)编写mapper文件:
package com.yzch.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yzch.domain.TUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public interface TUserMapper extends BaseMapper<TUser> {
}
(5)编写service文件:
package com.yzch.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yzch.domain.TUser;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface TUserService extends IService<TUser> {
}
package com.yzch.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yzch.domain.TUser;
import com.yzch.mapper.TUserMapper;
import com.yzch.service.TUserService;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserService {
}
注:到目前为止,我们就搭建完成了,可以试试写代码了。
(6)测试:
@Autowired
private TUserService tUserService;
@Autowired
private TUserMapper tUserMapper;
public void test(){
List<TUser> tUsers = tUserService.list();
List<TUser> tUsers1 = tUserMapper.selectList(null);
}
4、service层的相关方法:
//新增
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量) batchSize 插入批次数
boolean saveBatch(Collection<T> entityList, int batchSize);
//新增或保存
// TableId 注解属性值存在则更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入 batchSize 插入批次数
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
//删除
// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
//更新
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);
//查询单条记录
// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
//list
// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
//page分页查询
// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);
5、mapper层的相关方法:
@Test
void selectUsers(){
List<User> list = userMapper.selectList(null);
list.forEach(System.out::print);
}
@Test
void insertUser(){
User u1=new User();
u1.setName("郭小嘉六号");
u1.setEmail("877224@qq.com");
u1.setAge(88);
int insert = userMapper.insert(u1);
System.out.println(insert);
}
@Test
void updateUser(){
User u1=new User();
u1.setId("100");
u1.setName("张三");
u1.setEmail("877224@qq.com");
u1.setAge(20);
userMapper.updateById(u1);
}
//执行此方法的时候,需要在实体类的Id属性上添加@TableId(value = "user_id")注解
@Test
void deleteUserById(){
QueryWrapper<User> wrapper=new QueryWrapper<User>();
wrapper.eq("id","100");
int delete = userMapper.delete(wrapper);
System.out.println(delete);
}
//批量删除
Collection<Long> idList=new ArrayList<Long>();
idList.add(1L);
idList.add(2L);
idList.add(3L);
int i = userMapper.deleteBatchIds(idList);
System.out.println(i);
6、自定义方法:
//自定义方法
@Select("SELECT t1.*,t2.`address_name` FROM USER t1\n" +
" INNER JOIN address t2\n" +
" ON t1.`id`=t2.`id`")
List<UserAddressVO> selectUserAddress();