一、导入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<!-- 建议使用最新版本,最新版本请从项目首页查找 -->
<version>4.1.5</version>
</dependency>
二、表结构以及代码
1、GenerationType知识
一:GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型)。
@ApiModelProperty(value = "ID", hidden = true)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
二:GenerationType.AUTO:主键由程序控制。
@ApiModelProperty(value = "ID", hidden = true)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
2、表结构
CREATE TABLE `op_user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `test_yjdsns`.`op_user_info`(`id`, `name`, `sex`) VALUES (1, '卢本伟', '女');
三、增删改查
1、基本结构
2、增
2.1、insert into table (所有字段) values (?,?..,?)
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
// opUserInfo.setSex("女");
int insert = opUserInfoMapper.insert(opUserInfo);
2.2、insert into table (部分字段) values (?,…?)
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
// opUserInfo.setSex("女");
int insert = opUserInfoMapper.insertSelective(opUserInfo);
3、删
3.1、delete自定义删除
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
int delete = opUserInfoMapper.delete(opUserInfo);
3.2、deleteByPrimaryKey根据主键删除其他条件忽略
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setId(2);
opUserInfo.setName("卢本伟");
int delete = opUserInfoMapper.deleteByPrimaryKey(opUserInfo);
4、改
4.1、UpdateByPrimaryKeyMapper根据主键修改所有字段
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setId(1);
opUserInfo.setName("卢本伟");
int update = opUserInfoMapper.updateByPrimaryKey(opUserInfo);
4.2、updateByPrimaryKeySelective根据主键修改不为null字段
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setId(1);
opUserInfo.setName("卢本伟");
int update = opUserInfoMapper.updateByPrimaryKeySelective(opUserInfo);
5、查
5.1、select不为null的为判断条件
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
List<OpUserInfo> opUserInfoList = opUserInfoMapper.select(opUserInfo);
5.2、selectOne查找一条记录多条则报错
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
OpUserInfo resultOpUserInfo = opUserInfoMapper.selectOne(opUserInfo);
5.3、selectCount查找数量
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setName("卢本伟");
int row = opUserInfoMapper.selectCount(opUserInfo);
5.4、selectAll查找全部
List<OpUserInfo> opUserInfoList = opUserInfoMapper.selectAll();
5.5、selectByPrimaryKey通过主键查找
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setId(1);
opUserInfo.setName("卢本伟");
OpUserInfo resultOpUserInfo = opUserInfoMapper.selectByPrimaryKey(opUserInfo);
5.6、existsWithPrimaryKey通过主键判断记录是否存在
OpUserInfo opUserInfo = new OpUserInfo();
opUserInfo.setId(1);
opUserInfo.setName("卢本伟");
Boolean existsWithPrimaryKey = opUserInfoMapper.existsWithPrimaryKey(opUserInfo);
四、基础方法
1、批量插入insertList
这两个功能有一个要求,那就是操作的数据库表必须有一个自增主键,因为它要求主键必须要有一个默认值,否则就抛出异常。
这两个接口是集成到 MySqlMapper 接口中了,所以 dao 层的 mapper 接口还要继承 MySqlMapper 接口才能使用批量插入功能。
public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo> {
}
ArrayList<OpUserInfo> objectArrayList = Lists.newArrayList();
objectArrayList.add(new OpUserInfo(null, "李伟雄", "女"));
objectArrayList.add(new OpUserInfo(null, "易拉罐", null));
int i = opUserInfoMapper.insertList(objectArrayList);
2、selectByIds批量查询
SelectByIdsMapper 接口有一个方法 selectByIds,按照多个主键 id 值进行查询,但是方法的参数是 String,那么主键id之间用逗号隔开就行。
public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo>, SelectByIdsMapper<OpUserInfo> {
}
String sb = "6,7,8";
List<OpUserInfo> opUserInfoList = opUserInfoMapper.selectByIds(sb);
3、deleteByIds批量删除
DeleteByIdsMapper 接口有一个方法 deleteByIds,按照多个主键 id 值进行删除。
public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo>, SelectByIdsMapper<OpUserInfo>, DeleteByIdsMapper<OpUserInfo> {
}
String sb = "6,7,8";
int i = opUserInfoMapper.deleteByIds(sb);
五、Example条件设置器
1、Example 条件设置举例代码
@Data
@Table(name = "op_user_info")
public class OpUserInfo implements Serializable {
private static final long serialVersionUID = 6606590853013684198L;
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String sex;
}
Condition condition = new Condition(OpUserInfo.class);
Example.Criteria criteria = condition.createCriteria();
criteria.andEqualTo("name","卢本伟");
List<OpUserInfo> opUserInfos = opUserInfoMapper.selectByExample(condition);
log.info(opUserInfos.toString());
方法 | 功能描述 |
---|---|
andAllEqualTo(Object param) | 所有字段都作为 where 后面的判断条件,判断值就是参数实体对象 |
andBetween(String property, Object value1, Object value2) | where property between value1 and value2 ,范围条件,包含两端 |
andEqualTo(Object param) | 实体对象中不为 null 的字段作为 where 后面的判断条件 |
andEqualTo(String property, Object value) | 某一个<字段,值>作为 where 后面的判等条件 |
andGreaterThan(String property, Object value) | 大于条件,某个字段大于某个值 |
andGreaterThanOrEqualTo(String property, Object value) | 大于等于条件,某个字段大于等于某个值 |
andIn(String property, Iterable values) | where property in (),范围条件 |
andIsNotNull(String property) | where property is not null,判空条件 |
andIsNull(String property) | where property is null,判空条件 |
andLessThan(String property, Object value) | 小于条件 |
andLessThanOrEqualTo(String property, Object value) | 小于等于条件 |
andLike(String property, String value) | where property like value,注意 value 应该是一个匹配表达式 |
andNotBetween(String property, Object value1, Object value2) | 范围条件,不包含两端 |
andNotEqualTo(String property, Object value) | 要求字段不等于某个值 |
andNotIn(String property, Iterable values) | 要求字段不在某个范围内 |
andNotLike(String property, String value) | 模糊查询,要求不 like。 |
void setAndOr(String andOr) | 意思相当于在括号前面加上 and 还是 or,比如执行了方法 setAndOr(“and”),那么 criteria 相当于 and (id = 5),而 example 就把这些 criteria 拼凑起了,比如 example 包含了 2 个 criteria,分别是 (id = 5) 和 and (name = “张三”),那么此 example 的效果就是 (id = 5) and (name = “张三”)。 |
六、其他
1、@MapperScan使用注意点
@MapperScan路径
tk.mybatis.spring.annotation.MapperScan