Mybatis-plus只是一个Mybatis的增强工具,只是简化了开发,提高了效率
一、导入Mybatis-plus依赖
com.baomidou
mybatis-plus-boot-starter
3.4.3.4
注:导入后不必再导入Mybatis的依赖
其底层自动配置好了SqlSessionFactory,数据源是自定义的数据源(druid)
二、编写Mapper接口 所有Mapper接口所对应的*Mapper.xml文件都必须在classpath*:/mapper/ 下,
因为底层自动配置好了mapperLocations
容器中也自动配置好了 SqlSessionTemplate
附:Mybatis:了解SqlSessionTemplate_Java程序员的进阶之路-CSDN博客_sqlsessiontemplate
编写好的接口标注@Mapper
与Mybatis不同的是,我们只需要让接口继承基类BaseMapper<>便可以使用封装好的CRUD
package com.teen.review.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teen.review.Bean.tUser;
import org.apache.ibatis.annotations.Mapper;
/**
* @author teen
* @create 2021/10/17 11:11
*/
//不要导错类
@Mapper
public interface UserMapper extends BaseMapper{
}
三、编写三层架构 编写serveic层接口
只需要继承 IService<>即可
package com.teen.review.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teen.review.Bean.tUser;
/**
* Mybatis-plus的curd
* @author teen
* @create 2021/10/17 11:14
*/public interface UserService extends IService {
}
编写ServiceImpl实现Service接口
此类可以继承ServiceImpl
将实现类注册到容器中@Service
package com.teen.review.service.serviceImpl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teen.review.Bean.tUser;
import com.teen.review.Mapper.UserMapper;
import com.teen.review.service.UserService;
import org.springframework.stereotype.Service;
/**
* @author teen
* @create 2021/10/17 11:23*/@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
}
四、测试 测试类中
使用@Autowried 自动注入Service接口
@Autowired
UserService userService;
@Test
void SelectByUserNameTest(){
String username = "123456";
//创建条件构造器Warpper
QueryWrapper wrapper = new QueryWrapper();
//附加条件 .eq 字段相等
wrapper.eq("username",username);
Map map = userService.getMap(wrapper);
if( map==null){
System.out.println("没查到");
}
}
五、自定义查询 1) 在UserMapper中编写自定义方法
package com.teen.review.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teen.review.Bean.tUser;
import org.apache.ibatis.annotations.Mapper;
/**
* @author teen
* @create 2021/10/17 11:11
*/
//不要导错类
@Mapper
public interface UserMapper extends BaseMapper{public tUser getUserById(Integer id);
//实现一对多 查出一个用户的所有书,返回类型为用户
public tUser getUserBookById(Integer id);
}
在mapper/UserMapper.xml(名字不一定需要相同)中实现sql映射
mapper标签中的namespace属性对应Mapper接口全类名
select标签的id属性对应接口方法名
parametType属性代表方法形参类型
resultType属性为结果集类型,此处返回pojo对象tUser,会被自动封装
select * from `t_user` where id = #{id}select u.id,username,name from `t_user` u ,`t_book` b where u.username = b.user and u.id = #{id}
一对多的复杂查询使用resultMap做结果集映射
resultMap 的id属性为select标签中resultMap的值
type属性为返回类型的真实映射的pojo类
标签体中简单类型用result ,集合类型用collection
collection标签的ofType属性为此字段所真实映射的pojo类
其内的result标签继续指定返回字段
2) 测试 数据库中不存在的字段没有值
@Test
void MybatisTest01()
{
System.out.println(userMapper.getUserById(1));
//查询结果
/* tUser{
id=1, username='admin',
password='admin',
email='admin@atguigu.com',
headerImgPath='null',
books=null
}
*/
}
结果集未返回的字段值也为null
@Test
void MybatisTest04(){
System.out.println(userMapper.getUserBookById(1));
/*
tUser{
id=1,
username='admin',
password='null',
email='null',
headerImgPath='null',
books=[
tBook{id=0, name='数据结构与算法', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='怎样拐跑别人的媳妇', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='木虚肉盖饭', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='C++编程思想', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='C语言程序设计', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='UNIX高级环境编程', author='null', price=0.0, sales=0, stock=0, imgPath='null'},
tBook{id=0, name='大话设计模式', author='null', price=0.0, sales=0, stock=0, imgPath='null'}
]}
* */
}
自定义查询的缺点: 【1024程序员节|SpringBoot整合Mybatis-plus及自定义多表查询】方法是定义在Mapper接口中的,所以调用方法只能将Mapper接口自动注入,通过调用userMapper来实现方法调用,这样就违背了三层架构的理念,作为初学者,暂时想不到如何调用service层来实现自定义查询
推荐阅读
- mybatis|mybatis-plus-自定义模板
- 开发工具的使用|微信小程序获取dom元素
- 数据安全|数据安全技术落地经验浅谈和分类分级实施
- spring|不懂SpringApplication生命周期事件(那就等于不会Spring Boot嘛)
- 初学者能学会的数据结构与算法|数算部分-----第一节----算法的时空复杂度
- 1024程序员节|如何下载历史版本的VMware Workstation Pro
- java项目精品实战案例|基于Java+SpringBoot+vue+element实现前后端分离蛋糕商城系统详细设计
- APIService|Spring2.5.2 经典在线教程—https://docs.spring.io/spring/docs/
- java|springBoot自动装配原理