- mybatisplus
使用mybatis对单表curd的操作都是在mapper.xml中进行代码的书写,比较麻烦,在对数据库中的表进行封装实体时,书写比较麻烦,
mybatisplus是对mybatis的进一步封装,简称是mp 是加强版工具,提高了开发效率,可以自动生成简单的操作方法
架构原理就是通过实体类 推测是数据表结构,在自动生成对应curd的操作方法
特点是
无侵入:只做增强不做修改,不会对现有工程产生影响,
效率高:自动生成curd基本操作,直接面向对象操作 BaseMapper
内置了分页插件 支持多种数据库
搭建环境springboot+mybatisplus
创建表 添加数据
初始化项目 创建boot,导入依赖,
注意:不用同时导入mybatis依赖和mybatis-plus依赖,导入一个就可以了
连接数据库方式是一样的
注意数据库的版本不一样连接的driver是不一样的先查看自己的数据库版本号是多少 右击localhsot 主机查看连接信息
完整路径:jdbc:mysql://localhsot:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8
如果是8的话是jdbc:mysql://localhsot:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
先用idea来测试连接数据库
在idea中可以设置连接的库
注意在mapper包下的写接口的时候尽量使用@mapper注解来代表是一个持久层,建议不要使用@repository注解不然还需要在启动类上写@MapperScan(“mapper路径”)有时候还会报错,
传统连接方式:dao(l连接数据库,配置mapper.xml文件)-pojo-service-controller
mybatis-plus是自动生成dao层,也就是说mapper接口只需要继承一个BaseMapper类,就可以了,实体类可以使用lombok工具,实体类和接口都是自定义的,但是里面的方法是自动生成的,也就是mybatisplus是通过实体类来创建自动生成curd方法,
-
配置日志输出
想要看sql语句执行必须要看日志啊
配置日志在配置文件中在application.yml中mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.stdOutImpl
主键生成策略
在实体类上主键上写上@TableId(type=idtype.auto) 数据库的字段上一定要是自增,
做分页处理
1先配置分页插件在一个配置类中
自己写一个多表查询 在接口中创建方法
在测试中调用实现
-
总结一下
mybatis简化了jdbc mybatis-plus简化了mybatis,有没有发现框架正在机械化,也就是说可以偷懒,简单的业务逻辑可以自动化生成,
mybatis-plus只是对mybatis框架进行了增强,不做改变,
启动后自动注入curd操作,只需要手动创建实体类,在写一个mapper接口继承BaseMapper就可以生成简单的单表curd操作方法,
支持主键自动生成,可选生成器,
内置了分页插件,相当于是limit函数使用
支持多种数据库类型,
支持日志输出
内置拦截器
导入相关依赖 数据库启动依赖 lombok依赖 mybatisplus依赖
连接数据库的方式主要一下
mysql 5 驱动不同 com.mysql.jdbc.Driver
mysql 8 驱动不同com.mysql.cj.jdbc.Driver、需要增加时区的配置serverTimezone=GMT%2B8
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?
useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
注意数据访问层dao接口注解可以使用@mapper或是@repository这两种但是使用了@repository注解后需要在启动类上添加一个MapperScan()来扫描mapper层注解,还不如直接加上@mapper方便
配置打印日志
在配置文件中配置,建议使用yml配置文件
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.stdOutImpl
这样就会控制台中输出日志
主键生成
在实体类上字段上添加@TableId(type=IdType.Auto)
数据库上表字段也设置成自增
配置分页插件 不使用原始的limit函数分页
在配置类中实例化一个对象
直接调用这个对象就可以了
条件构造器wrapper对象 -
支持自定义sql查询
-在mapper层中可以自定义方法使用注解来写sql,参数传递同样是使用#{}和${}
@Repository
@Mapper
public interface UserMapper extends BaseMapper<SysUser> {
/**https://www.cnblogs.com/zimug/p/13277392.html
*
*/
@Select("select password from sys_user where user_id = #{id} ")
SysUser querypassword(long id);
@Update("update sys_user set password = #{password} where user_id = #{id}")
Integer updatepassword (String password,long id);
//多表查询
@Select("select t.dept_name,r.user_name,r.phone,r.create_time from sys_dept t inner join sys_user r on t.dept_id = r.dept_id ")
List<SysUsermin> queryfield();
}
- 注意contorller中参数的传递
/**http://localhost:8888/updateuserinfo/0?&userName=EEE&phone=123456&userId=10
* {}格式就是不用?来隔离 用/来隔离
* 如果是一个对象,就用?之后来传递
* */
@GetMapping("/updateuserinfo/{flag}")
public Map<String,SysUser> updateuserinfo(/*@PathVariable("userid") long userId,*/ SysUser sysUser,@PathVariable("flag")String flag){
System.out.println(sysUser);
注意用指定花括号符号来接收参数和用实体类来接收参数是有一点区别
1花括号符号接收参数可以写在/之后
2 对象参数必须写在?之后