⼀看就会⼀学就废之SpringBoot整合通⽤Mapper以及常⽤⽅
本⽂适合初次学习通⽤Mapper新鸟阅览,⽼⽣常谈,从三个⼤⽅向⼊⼿----是什么?能⼲什么?怎么⽤?
⽬录
⼀、通⽤Mapper是什么?
简单来说,它就是个辅助mybatis极简单表开发的组件,只能算插件,还算不上框架。它不是为了替代mybatis,⽽是让mybatis的开发更⽅便----可以⾃动⽣成sql语句,⽅便开发⼈员进⾏ORM,提供极其⽅便的单表(不⽀持通⽤的多表联合查询)增删改查。
⼆、通⽤Mapper能⼲什么?
说到这⾥就不得不提⼀提为什么会产⽣通⽤Mapper----使⽤原⽣Mybatis遇到的问题:
l⽂件⾥有⼤量的sql,当数据库表字段变动,配置⽂件就要修改
2.分页⿇烦,除了传参page、pageSize,还需要返回条⽬总数count
3.数据库可移植性差:如果项⽬更换数据库,⽐如oracle-->mysql,l中的sql要重新写
4.批量操作,批量插⼊,批量更新,需要⾃写动态SQL使⽤,⿇烦
也正是因为要解决这些问题,通⽤Mapper就出现了----主要就⽤于解决单表的增删改查,不需要编写SQL,不需要在DAO中增加⽅法,只要写好实体类,就能⽀持相应的增删改查⽅法,逻辑更清晰,结构整洁,可以按照模板化编程。也⼀⼀对应的解决了原⽣mybatis所存在的以上问题,具体怎么解决见下⽂。
缺点:  不灵活,有些SQL难以实现
需要在Java代码中加⼊⼤量逻辑判断,确定模板⽅法的准确性
需要⼤量条件判断,如⾮空,或者需要⼿动置空,才能避免覆盖
三、怎么使⽤通⽤Mapper?这⾥基于SpringBoot实现
整合步骤:
1.创建项⽬,添加依赖
2.创建公⽤Mapper接⼝继承通⽤Mapper和MySqlMapper
3.在配置⽂件l中配置数据库,MyBatis等
4.在启动类上别忘了加扫描Mapper包
5.使⽤通⽤Mapper
1.创建项⽬,添加相关依赖
<!--Mybatis(必须)-->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--分页插件(需要分页时使⽤) -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>1.2.5</version>
</dependency>
<!--通⽤Mapper插件依赖(必须)-->
<dependency>
<groupId&batis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<!--lombok,简化实体类代码,需要时写-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--数据库连接依赖(必须)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
<scope>runtime</scope>
</dependency>
<!--web依赖(必须)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.创建公⽤创建公⽤Mapper接⼝继承通⽤Mapper和MySqlMapper
package com.cloudsw.base;
batis.mappermon.Mapper;
batis.mappermon.MySqlMapper;
/**
* @Description: 公⽤Mapper接⼝
* @Date: 2021/3/29
* @Author lijintao
*/
@component
public interface IBaseMapper<T>  extends Mapper<T>,MySqlMapper<T> {
}
注意:mappers 是指向⾃定以的基础通⽤mapper接⼝,该接⼝不能和普通接⼝放在⼀起(不然扫描⾃定义mapper时会报错),推荐
放在⼯具包⾥,这⾥要注意Mapper<T>,MySqlMapper<T>都是tk包下的,Mapper<T>提供了基础的增删改查功
能,MySqlMapper<T>提供了批量新增的功能,然后使⽤我们去继承这个mapper就有CRUD的功能
3.在配置⽂件l中配置数据库,MyBatis等
#端⼝配置
server:
port: 8088
#jdbc配置
spring:
datasource:
name: clodsw-portal-dev
url: jdbc:mysql://localhost:3306/cloudsw_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&autoReconnect=true&allo    username: 123456
password: 123456
driver-class-name: sql.cj.jdbc.Driver
#mybatis配置
mybatis:
#定义xml⽂件位置,不是必须的,如果需要在xml写sql请配置此选项
mapper-locations: classpath:mapper/*.xml
#实体类所在包名
type-aliases-package: com.cloudsw.dto
#通⽤mapper配置
mapper:
#公⽤接⼝类路径
mappers: com.cloudsw.base.IBaseMapper
identity: MYSQL
4.在启动类上别忘了加扫描Mapper包
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
batis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.cloudsw.mapper")  // 需要将继承的Mapper接⼝添加到Mybatis配置中
public class MapperApplication {
public static void main(String[] args) {
SpringApplication.run(MapperApplication.class, args);
}
}
注:此处MapperScan为tk.mybatis.spring.annotation.MapperScan,⾮batis.spring.annotation.MapperScan;
5.使⽤通⽤Mapper
5.1  定义实体类
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Repository;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Data //使⽤lombok注解,可以免写getter,setter⽅法
@Repository //为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作⽤不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为@Table(name = "msg_todo")//mybatis通⽤接⼝mapper依赖JPA实体类采⽤JPA
public class MsgTodo implements Serializable {
private static final long serialVersionUID=1L;
@Id  //代表主键,如果⼀个类中有多个这个注解代表联合主键
@GeneratedValue(strategy = GenerationType.IDENTITY)  //主键策略
private Long id;
@Column(name="name")
private String name;
@Column(name="receive_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date receiveTime;
@Column(name="create_code")
private String createCode;
@Column(name="create_name")
private String createName;
@Column(name="create_time")
springboot结构
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Column(name="content")
private String content;
@Column(name="send_type")
private Integer sendType;
@Transient  //代表不是数据表中的字段,只是普通属性
private String haha;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。