Mybatis-plus
-
在Java中使用数据库,使用jdbc
-
在项目中直接使用jdbc,访问数据库。创建Connection,ResultSet
-
把jdbc的操作进行封装,创建工具类,DBUtil
-
持久层对象
-
hibernate:全自动框架,实现Java Object——表的映射。可以通过Java对象的方法,操作表中的数据。开发人员可以不了解或者少了解sql语言。
可以使用hibernate访问不同的数据库,不要改变代码,通用不同的数据库
-
jpa规范:定义了数据库的各种操作。定义了一致的方法操作数据库
jpa有各种实现:hibernate,open-jpa,link
-
mybatis:需要编写xml配置文件,在xml文件中编写sql语句,访问数据库。任何操作需要使用xml文件。对开发人员要求较高,需要熟悉SQL语言。单表的crud也需要xml文件,编写SQL语句
-
mybatis plus:简称MP。对mybatis的增强。在mybatis之外加入了一层。通过MP实现单表的CRUD,不使用xml文件。分页,性能统计,逻辑删除
-
-
一、第一个程序
实现步骤:
-
创建spring-boot项目
-
添加依赖
<!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
-
创建实体类
指定主键
value:主键字段的名称,如果与数据库相同可以不写
type:指定主键的类型,主键的值如何生成。IdType.AUTO 表示自动增长
@TableId(
value = "id",
type = IdType.AUTO
)
-
none没有主键
-
auto自动增长(mysql, sql server)
-
input手工输入
-
id_worker:实体类用Long id ,表的列用bigint , int类型大小不够
-
id_worker_str 实体类使用String id,表的列使用varchar 50
-
uuid 实体类使用String id,列使用varchar 50
- 创建mapper文件
自定义Mapper,就是dao接口
-
需要实现BaseMapper
-
指定实体类
StudentMapper extends BaseMapper<Student>
BaseMapper是MP框架中的对象,定义了17个操作方法(CRUD)
-
设置扫描器
在springboot启动类上
在***Application中添加标签@MapperScan(value = “mapper所在包名”)
@MapperScan:扫描器,指定Mapper类所在的包
-
测试使用
在测试类或Service注入到Dao接口,框架实现动态代理创建Dao的实现类对象
调用BaseMapper中的方法,完成CRUD
二、ActiveRecord
1.ActiveRecord是什么
- 每一个数据库对应创建一个类,类的每一给对象实例对应于数据库中表的一行记录,通常表的每个字段在类中都有相应的field
- ActiveRecord负责把自己持久化,在ActiveRecord中封装了对数据库的访问,通过对应自己实现crud
- ActiveRecord也封装了部分业务逻辑,可以作为业务对象使用
三、分页操作
-
创建config类,添加分页插件
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Configuration标注的类就相当于xml配置文件 */ @Configuration public class Config { /*** * 定义方法,返回的返回值是java 对象,这个对象是放入到spring容器中 * 使用@Bean修饰方法 * @Bean等同于<bean></bean> */ @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } }
-
测试代码
@Test public void testPage(){ QueryWrapper<Student> qw = new QueryWrapper<>(); qw.gt("age",22); IPage<Student> page = new Page<>(); //设置分页的数据 page.setCurrent(1);//第一页 page.setSize(3);// 每页的记录数 IPage<Student> result = studentDao.selectPage(page,qw); //获取分页后的记录 List<Student> students = result.getRecords(); System.out.println("students.size()="+students.size()); //分页的信息 long pages = result.getPages(); System.out.println("页数:"+pages); System.out.println("总记录数:"+result.getTotal()); System.out.println("当前页码:"+result.getCurrent()); System.out.println("每页的记录数:"+result.getSize()); }