通用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> {
}
1.6引入相关注解
入口类
@MapperScan("com.baizhi.dao")
注意:一定不要倒错包
import tk.mybatis.spring.annotation.MapperScan;
(红框中的两个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");