MyBatis-Plus(第一篇开山篇)
目录
- MyBatis-Plus(第一篇开山篇)
- 结论:
- 使用mybatis plus步骤
- 1.导包
- 2.整合(修改spring-dao配置文件)
- 3.使用
- 3.1 javaBean
- 3.2 mapper层
- 3.3 service层
- 3.3.1 service接口
- 3.3.2 service实现类
- 3.4 测试类
官网: https://baomidou.com/
是基于mybatis的一个框架
特点:在项目启动的时候,帮我们生成指定数据库表对应的service层以及mapper层的crud功能
注意:mybatis plus不能实现连表查询
结论:
1.项目中单表的所有crud交给mybatis plus完成
2.复杂的连表查询功能自己实现
使用mybatis plus步骤
1.导包
2.整合
3.使用
1.导包
<!-- <dependency>-->
<!-- <groupId>org.mybatis</groupId>-->
<!-- <artifactId>mybatis-spring</artifactId>-->
<!-- <version>2.0.4</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis</groupId>-->
<!-- <artifactId>mybatis</artifactId>-->
<!-- <version>3.5.6</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.1</version>
</dependency>
2.整合(修改spring-dao配置文件)
spring-dao.xml
修改为mybatis-plus提供的SqlSessionFactoryBean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
...
<!-- 修改为mybatis-plus提供的SqlSessionFactoryBean-->
<bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean" id="factoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
</beans>
3.使用
3.1 javaBean
点击DataSource->点击“+”
点击DataSource->点击MySQL
驱动选择MySQL for 5.1
输入主机IP、端口号、数据库的用户名和密码->点击Test Connection
点击Download Driver Files
测试成功->点击OK
点击1 of 6 选择数据库
使用MybatisX
插件,详细可参考我的另一篇博客——《MybatisX插件 逆向工程》https://huanghaoheng.blog.csdn.net/article/details/127955285
选择你想要逆向生成的表->右击->点击MybatisX-Generator
annotation 选择 Mybatis-Plus 3
options 勾选 Lombok
template 选择 mybatis-plus
//声明当前Javabean对应的数据库表的名称
@TableName(value =“数据库表名”)
//TableId注解声明当前属性对应的数据库表中的字段为主键
@TableId(type = IdType.AUTO)
//TableField 声明当前属性对应的数据库表中的字段为普通字段
//exist = false 声明告诉mybatis-plus 这个属性在对应的数据库表中没有匹配的字段
@TableField(exist = false)
package com.bjpowernode.mybatisPlusDemo.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.experimental.Accessors;
/**
*
* @TableName course
*/
//声明当前Javabean对应的数据库表的名称
@TableName(value ="course")
@Data
@Accessors(chain = true)
public class Course implements Serializable {
/**
* id
*/
//TableId注解声明当前属性对应的数据库表中的字段为主键
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 课程名
*/
private String courseName;
/**
* 课程一句话简介
*/
private String brief;
/**
* 原价
*/
private Double price;
/**
* 原价标签
*/
private String priceTag;
/**
* 优惠价
*/
private Double discounts;
/**
* 优惠标签
*/
private String discountsTag;
/**
* 描述markdown
*/
private String courseDescriptionMarkDown;
/**
* 课程描述
*/
private String courseDescription;
/**
* 课程分享图片url
*/
private String courseImgUrl;
/**
* 是否新品
*/
private Boolean isNew;
/**
* 广告语
*/
private String isNewDes;
/**
* 最后操作者
*/
private Integer lastOperatorId;
/**
* 自动上架时间
*/
private Date autoOnlineTime;
/**
* 记录创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
private Boolean isDel;
/**
* 总时长(分钟)
*/
private Integer totalDuration;
/**
* 课程列表展示图片
*/
private String courseListImg;
/**
* 课程状态,0-草稿,1-上架
*/
private Integer status;
/**
* 课程排序,用于后台保存草稿时用到
*/
private Integer sortNum;
/**
* 课程预览第一个字段
*/
private String previewFirstField;
/**
* 课程预览第二个字段
*/
private String previewSecondField;
/**
* 销量
*/
private Integer sales;
//TableField 声明当前属性对应的数据库表中的字段为普通字段
//exist = false 声明告诉mybatis-plus 这个属性在对应的数据库表中没有匹配的字段
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
3.2 mapper层
package com.bjpowernode.mybatisPlusDemo.mapper;
import com.bjpowernode.mybatisPlusDemo.domain.Course;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Entity com.bjpowernode.mybatisPlusDemo.domain.Course
* mybatis plus的dao接口 继承另一个接口:BaseMapper
* 这个接口中帮我们定义好了dao层的基本的crud的所有的抽象方法
* 我们启动项目的时候,会生成CourseMapper接口的实现类对象,mybatis-plus会帮我们将该实现对象实现此接口的所有方法
*/
public interface CourseMapper extends BaseMapper<Course> {
3.3 service层
3.3.1 service接口
package com.bjpowernode.mybatisPlusDemo.service;
import com.bjpowernode.mybatisPlusDemo.domain.Course;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* mybais-plus的servici接口
* 继承了另一个接口:IService
* 此接口帮我们将业务层的curd方法都声明好了
*/
public interface CourseService extends IService<Course> {
}
3.3.2 service实现类
package com.bjpowernode.mybatisPlusDemo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bjpowernode.mybatisPlusDemo.domain.Course;
import com.bjpowernode.mybatisPlusDemo.service.CourseService;
import com.bjpowernode.mybatisPlusDemo.mapper.CourseMapper;
import org.springframework.stereotype.Service;
/**
* mybatis-plus的service层的实现类
* 继承了另一个类ServiceImpl
* 这个类自动的帮我们依赖了对应的mapper实现,然后通过调用该mapper实现的方式实现了service接口的每一个抽象方法
*/
@Service
public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course>
implements CourseService{
}
3.4 测试类
package com.bjpowernode.TestMybatisPlus;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bjpowernode.mybatisPlusDemo.domain.Course;
import com.bjpowernode.mybatisPlusDemo.service.CourseService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
import java.util.function.Consumer;
public class MyTest {
private CourseService courseService = null;
/*
*执行任何一个@Test方法之前 都一定会先执行当前被@Before标注的方法
*/
@Before
public void before(){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-service.xml");
courseService = context.getBean("courseServiceImpl", CourseService.class);
}
@Test
public void testAdd(){
Course course = new Course();
course.setCourseName("haha");
courseService.save(course);
}
@Test
public void testDelete(){
courseService.removeById(33);
}
@Test
public void testUpdate(){
Course course = new Course();
course.setId(32).setCourseName("动力节点Java培训班");
courseService.updateById(course);
}
@Test
public void testFindOne(){
Course course = courseService.getById(31);
System.out.println("course = " + course);
}
@Test
public void testFindAll(){
List<Course> courseList = courseService.list();
System.out.println("courseList = " + courseList);
}
/**
*测试自定义查询条件
* 1.创建条件装饰器
* 2.调用查询的方法 将条件装饰器作为参数
*/
@Test
public void testFind() {
//1.创建条件装饰器
QueryWrapper<Course> qw = new QueryWrapper<>();
/*封装自定义的条件
* eq:表示条件 是 判断是否相等
* status:参与判断的字段名称
* 1:判断是否相等的具体的值
*
* 最终的效果:where course_name = '大数据'
* */
qw.eq("status", 1);
List<Course> courseList = courseService.list(qw);
System.out.println("courseList = " + courseList);
}
/**
*测试自定义查询条件
* 1.创建条件装饰器
* 2.调用查询的方法 将条件装饰器作为参数
*/
@Test
public void testFind2() {
QueryWrapper<Course> qw = new QueryWrapper<>();
/*
* 相当于 where course_name like "%全栈%"
*/
qw.like("course_name","全栈");
List<Course> courseList = courseService.list(qw);
System.out.println("courseList = " + courseList);
}
/**
*测试自定义查询条件
* 1.创建条件装饰器
* 2.调用查询的方法 将条件装饰器作为参数
*/
@Test
public void testFind3() {
QueryWrapper<Course> qw = new QueryWrapper<>();
// qw.like("course_name","全栈");
// qw.eq("status",0);
// qw.like("course_name","全栈").eq("status",0);
// qw.like("course_name","全栈").and(new Consumer<QueryWrapper<Course>>() {
// @Override
// public void accept(QueryWrapper<Course> courseQueryWrapper) {
// courseQueryWrapper.eq("status",0);
// }
// });
qw.like("course_name","全栈").and((x)->{
x.eq("status",0);
});
List<Course> courseList = courseService.list(qw);
System.out.println("courseList = " + courseList);
}
}