Entity Dao Mapper Service
+、MyBatis的优势
SQL语句可以自由控制、灵活、性能高
SQL 与 代码分离
XML标签,支持编写动态SQL
+、MyBatis的劣势
简单的CRUD操作还得写SQL
XML中有大量的SQL要维护
Mybatis自身功能很有限,但支持Plugin
+、MyBatis-Plus
是MyBatis的增强工具,只做增强不做改变
baomidou 苞米豆 由中国团队开发
无侵入、启动时注入损耗小、强大的CRUD操作
支持 Lambda 形式调用、支持多种数据库
+、Lombok 插件
是MyBatis的增强工具,只做增强不做改变
+、pom.xml
<!-- lombok 简化java代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optinal>true</optional>
</dependency>
<!-- Mybatis-Plus 启动器 -->
<dependency>
<groupId>org.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- mysql jdbc 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
+、Entity
@Data
@TableName("mp_user")
class User {
@TableId(value="id", type=IdType.Auto)
private Long userId;
/**
*
* bigint
**/
@TableFiled(value="parent_id", Exist=false)
private Long parentId;
/**
*
* varchar
**/
private String name;
/**
*
* int
**/
private Integer age;
/**
*
* datetime
**/
@JsonFormat(pattern="yyyyMMddHHmmssSSS", timezone="GMT+8")
private LocalDateTime createTime;
}
+、*.Java
package com.baomidou.mybatisplus.core.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
/**
* interface BaseMapper
**/
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> wrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}
/**
* interface ProjectMapper
**/
public interface ProjectMapper extends BaseMapper<Project> {
/**
* 获取列表
*
* @author 简传宝
* @Date 2020-10-28
*/
List<ProjectResult> customList(@Param("paramCondition") ProjectParam paramCondition);
/**
* 获取map列表
*
* @author 简传宝
* @Date 2020-10-28
*/
List<Map<String, Object>> customMapList(@Param("paramCondition") ProjectParam paramCondition);
/**
* 获取分页实体列表
*
* @author 简传宝
* @Date 2020-10-28
*/
Page<ProjectResult> customPageList(@Param("page") Page page, @Param("paramCondition") ProjectParam paramCondition);
/**
* 获取分页map列表
*
* @author 简传宝
* @Date 2020-10-28
*/
Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") ProjectParam paramCondition);
}
/**
* service SampleService
**/
class SampleService {
// lambda 查询
function query() {
/**
* 直接拼接到 sql 的最后
*
**/
QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Project::getProjectId(), 1).last("limit 10");
List<Project> projectList = this.baseMapper.selectList(queryWrapper);
for (Project project : projectList) {
Console.info(project);
}
}
/**
* 搜索物资
* @param param
* @return
*/
@Override
public LayuiPageInfo search(ProductionParam param){
QueryWrapper<Production> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(ToolUtil.isNotEmpty(param.getBn()), Production::getBn, param.getBn())
.eq(ToolUtil.isNotEmpty(param.getMateMroCode()), Production::getMateMroCode, param.getMateMroCode())
.like(ToolUtil.isNotEmpty(param.getProductName()), Production::getProductName, param.getProductName())
.like(ToolUtil.isNotEmpty(param.getBrandName()), Production::getBrandName, param.getBrandName())
.like(ToolUtil.isNotEmpty(param.getModel()), Production::getModel, param.getModel());
Page<Production> pageContext = getPageContext();
IPage<Production> page = page(pageContext, queryWrapper);
return LayuiPageFactory.createPageInfo(page);
}
// 查询所有
public void findAll() {
List<User> list = userMapper.selectList(null);
for (User user : list) {
System.out.println(user.getEmail());
}
}
// 删除
public void delete() {
try {
Integer id = userMapper.deleteById(1L);
System.out.println(id);
} catch (Exception e) {
e.printStackTrace();
}
}
// 更新
public void update() {
try {
Project project = new Project();
project.setProjectName("千年");
project.setProjectId(1);
this.baseMapper.updateById(project);
} catch (Exception e) {
e.printStackTrace();
}
}
// 查询指定字段
public List<Brand> searchByKeyword(BrandSearchParam brandSearchParam) {
QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.select(Brand::getBrandId, Brand::getBrandCode, Brand::getBrandNameEn, Brand::getBrandNameCn)
.like(ToolUtil.isNotEmpty(brandSearchParam.getKeyword()), Brand::getBrandNameCn, brandSearchParam.getKeyword())
.or()
.like(ToolUtil.isNotEmpty(brandSearchParam.getKeyword()), Brand::getBrandNameEn, brandSearchParam.getKeyword())
.last("limit 15");
return this.list(queryWrapper);
}
}