通用Mapper

通用Mapper

通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。

只能解决单表操作,不能进行表连接

1.1MBG与通用Mapper

MBG通用mapper
根据数据库库表生成实体类,Dao,mapper根据实体类生成sql

1.2引入依赖

<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

1.3引入数据源及数据库的驱动

<!--数据源的jar包-->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

1.4配置链接相关参数

server:
  port: 8989
  context-path: /springboot
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cmfz
    username: root
    password: root
mybatis:
  type-aliases-package: com.baizhi.entity
  mapper-locations: classpath:com/baizhi/mapper/*Mapper.xml /*用了通用mapper后这一句其实是可以不要的,但以后可能会用到表连接,所以还是保留比较妥当*/

1.5继承Mapper

package com.baizhi.dao;
import com.baizhi.entity.User;
import tk.mybatis.mapper.common.Mapper;//此时就不需要注解了
public interface UserMapper extends Mapper<User> {
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4sPgJ6LR-1598404397213)(C:\Users\KK\AppData\Roaming\Typora\typora-user-images\1598316756299.png)]

1.6引入相关注解

入口类

@MapperScan("com.baizhi.dao")

注意:一定不要倒错包

import tk.mybatis.spring.annotation.MapperScan;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pR6Uqbh-1598404397219)(C:\Users\KK\AppData\Roaming\Typora\typora-user-images\1598317415842.png)]

(红框中的两个MapperScan注解的顺序不能互换。tk包的在前,org包的在后。)

2.7实体类加入相关注解

@Table(name = "t_user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    private Integer id;
    @Column(name="user_name")
    private String name;
    private Integer age;
    private Date  bir;
    @Transient
    private String sex;
}

注解解析

@Table(name = "t_user") //写在类上 指定实体类映射的数据库的表名
@Id    //写在属性上 表示这个属性对应的是数据库表的主键字段
@Column(name="user_name")  //写在属性上 如果实体属性名与数据库字段不一致,表示这个属性映射的数据库字段名
@Transient     //写在属性上  表示该属性在数据库不存在
@Table(name = "yx_admin")  //声明表名    即此类对应的表
@Data
@AllArgsConstructor  //有参构造
@NoArgsConstructor //无参构造
public class Admin {
    @Id    //声明主键   必须声明
    private String id;
    private String username;
    private String password;
    @Column(name = "create_date")  //当属性名和对应的表中的字段不一样时  需要这样写
    private Date createDate;
    @Transient      //表示此字段不在当前表中  (一般在表连接时会用)
    private Student student;
}

截止目前 通用mapper的配置已经完成。

2.8.使用详解

1.查询

1.查询所有

List<Admin> admins = adminDao.selectAll();

2.根据id查询

Admin admin = adminDao.selectByPrimaryKey("1");

3.条件查询

条件查询时创建条件对象 example,根据要查询的字段设置查询条件,查询返回集合数据,下面以id为例,每一个字段都有相对应的方法

//设置查询条件
AdminExample example = new AdminExample();
	example.createCriteria().andIdEqualTo("1");//id为1
	example.createCriteria().andIdNotEqualTo("1"); //id不为1
	example.createCriteria().andIdBetween("1","5");  //id在1到5之间
	example.createCriteria().andIdNotBetween("1","5"); //id不在1到5之间
	example.createCriteria().andIdIsNull();  //id为null
	example.createCriteria().andIdIsNotNull();  //id不为null
	example.createCriteria().andIdLike("%2%");  // 模糊条件
	example.createCriteria().andIdNotLike("%2%");  // 模糊条件
	example.createCriteria().andIdGreaterThan("1");  // >  id(大于) 多少
	example.createCriteria().andIdGreaterThanOrEqualTo("1"); //  >=  id(大于等于) 多少
	example.createCriteria().andIdLessThan("1"); //  <  id(小于) 多少
	example.createCriteria().andIdLessThanOrEqualTo("1"); //  <=  id(小于等于) 多少
	example.createCriteria().andIdIn(Arrays.asList("1","2","3")); //id满足集合数据的数据
	example.createCriteria().andIdNotIn(Arrays.asList("1","2","3"));//id不满足集合数据的数据
	example.setOrderByClause("upload_time desc" ); //排序查询
//查询数据
List<Admin> admins = adminDao.selectByExample(example);

4.查询一条数据

//设置查询条件对象
Admin admin = new Admin();
admin.setId("5556");
//查询数据
Admin admins = adminDao.selectOne(admin);

根据条件查询返回一条数据

//设置查询条件
AdminExample example = new AdminExample();
example.createCriteria().andIdEqualTo("555");
//查询数据
Admin admin = adminDao.selectOneByExample(example);

5.分页查询

跟据条件分页查询

//相当于是一个条件,没有条件对所有数据进行分页
AdminExample example = new AdminExample();
//分页查询: 参数:忽略几条,获取几条数据
RowBounds rowBounds = new RowBounds(0,5);

//查询
List<Admin> admins = adminMapper.selectByExampleAndRowBounds(example, rowBounds);

6.查询数量

根据传递对象内容进行查询,空对象表示所有数据,返回数量

Admin admin = new Admin();
admin.setPassword("111111");
int i = adminDao.selectCount(admin);

7.根据条件查询数量

在中example设置条件,返回数量

AdminExample example = new AdminExample();
example.createCriteria().andPasswordEqualTo("111111");
int i = adminDao.selectCountByExample(example);
2.插入

1.根据对象插入数据

没有设置的数据为null

//封装对象数据
Admin admin=new Admin("1","nanan","123456");
//修改数据
adminDao.insert(admin);

2.可选择插入数据

没有设置的数据为null

//封装对象数据
Admin admin=new Admin();
admin.setId("1");
admin.setUsername("nanan");
//修插入数据
adminDao.insertSelective(admin);
3.修改

1.根据主键修改数据

对象中没有赋值的字段数据会变为空

//设置要修改后的数据
Admin admin = new Admin();
admin.setId("5");
admin.setUsername("nanan");
//修改数据
adminDao.updateByPrimaryKey(admin);

2.根据主键可选择修改数据

对象中没有赋值的字段数据不会变为空

//设置要修改后的数据
Admin admin = new Admin();
admin.setId("5");
admin.setUsername("nanan");
//修改数据
adminDao.updateByPrimaryKeySelective(admin);

3.根据条件修改数据

对象中没有赋值的字段数据会变为空

//设置要修改后的数据
Admin admin = new Admin();
admin.setId("1");
admin.setUsername("nanan");
//添加修改条件
AdminExample example = new AdminExample();
example.createCriteria().andIdEqualTo("1");
//修改数据
adminMapper.updateByExample(admin,example);

4.根据条件可选择修改数据

对象中没有赋值的字段数据不会变为空

//设置要修改后的数据
Admin admin = new Admin();
admin.setId("1");
admin.setUsername("nanan");
//添加修改条件
AdminExample example = new AdminExample();
example.createCriteria().andIdEqualTo("1");
//修改数据
adminMapper.updateByExampleSelective(admin,example);
4.删除

1.根据id删除

adminDao.deleteByPrimaryKey("1");

2.根据条件删除

//添加删除条件
AdminExample example = new AdminExample();
example.createCriteria().andIdEqualTo("1");
//删除数据
adminMapper.deleteByExample(example);

3.根据对象数据删除

//添加删除条件对象
Admin admin = new Admin();
admin.setId("1");
//删除数据
adminDao.delete(admin);
5.其他api

根据id查询该数据是否存在,返回结果是布尔类型的 true|false

boolean b = adminDao.existsWithPrimaryKey("1");
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值