目录
[二: 常见注解](#二: 常见注解)
2:创建Iservice的实现类继承ServiceImpl接口
MyBatisPlus是基于MyBatis的基础上增强的,简化单表的增删查改的代码。
一:MyBatisPlus的快速入门
1.1:引入Mybatisplus的依赖
XML
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
1.2:定义Mapper
自定义的Mapper接口继承BaseMapper<T>.T为操作的实体类的代码。
1.3:UserMapper.xml中的配置
不用写基础的增删改查代码。
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">
</mapper>
二: 常见注解
MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
2.1:常见的注解
|-------------------------|---------------|
| @TableName(value值) | 用来指定表名 |
| @TableId(value值) | 用来指定表中的主键字段信息 |
| @TableField(value值) | 用来指定表中的普通字段信息 |
当表中的字段名或者表明与类名或者属性名不一致时,需要设置value属性,value属性为表名或者表的字段名。
2.1.1:表中IdType的枚举
|---------------|------------------------------------------|
| AUTO | 数据库自增长 |
| INPUT | 通过set方法自行注入 |
| ASSIGN_ID | 分配ID,接口identifierGenerator的方法nextId来生成Id |
当我们在数据库当中设置Id为自增长,但在类中的id未设置自增长时,默认的是ASSIGN_ID。
2.1.2:使用@TableField的常见场景
**1:**成员变量与数据库字段名不一致
**2:**成员变量名以is开头,且是布尔值
**3:**成员变量名与数据库关键字冲突(@TableField("`order`")
**4:**成员变量不是数据库字段@TableField(exist=false),用来标记成员变量不是数据库字段
案例演示1: 当数据库表名和类名不一致时。在类的前面加上其底下的注解
java
@TableName("tb_user")
案例演示2:当我们设置数据库的id是自增的,此时,需要我们对于@TableId(type=IdType.Auto)
java
@TableId(type= IdType.AUTO)
private Long id;
三:核心功能
3.1:条件构造器
条件构造器关系:
3.1.1:基于QueryWrapper的查询
需求1:查询名字中带o的,存款大于等于1000的人的id,username,info,balance字段
SQL语句:select id ,username,info,balance from user where username like "%O%"and balance>1000;
需求2:更新用户为jack的用户的余额为2000
SQL语句:update user set balance=2000 where username='jack'.
利用QueryWrapper进行实现需求1:
javavoid testQueryWrapper(){ QueryWrapper<User> queryWrapper=new QueryWrapper<User>() .select("id","username","info","balance") .ge("balance",1000) .like("username","o"); List<User> users = userMapper.selectList(queryWrapper); System.out.println(users); }
查询结果:
利用QueryWrapper查询需求2:
java@Test void testQueryWrapper1(){ //更新查询的结果 User user=new User(); user.setBalance(2000); //更新的条件 QueryWrapper<User> queryWrapper=new QueryWrapper<User>().eq("username","jack"); //执行更新 userMapper.update(user,queryWrapper); }
更新的结果:
3.1.2:基于UpdateWrapper的更新
需求1:更新id为1,2,4的用户的余额,扣200
SQL语句:update user set balance=balance-200 where id in(1,2,4)
java
@Test
void testUpdateWrapper(){
//由于是多个用户,所以我们不能使用上一个方式的更新,且balance-200,所以要使用UpdateWrapper
List<Long> ids=List.of(1L,2L,4L);
UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<User>()
.setSql("balance=balance-200")
.in("id",ids);
userMapper.update(null,userUpdateWrapper);
}
运行结果:
3.2:自定义SQL
我们可以利用Mybatis的wrapper来构造复杂的where条件,剩下的我们自己写。MybatisPlus适用于where条件的设置,剩下我们自己来写。
3.2.1:利用MP构造where条件
java
//1:更新条件
List<Long> ids=List.of(1l,2l,3l);
int amout=200;
QueryWrapper<User> queryWrapper=new QueryWrapper<User>().in("id",ids);
3.2.2:自定义SQL方法调用
java
//调用自定义方法
userMapper.updateBalanceByIds(queryWrapper,amout);
在mapper中的方法不要忘了对于QueryWrapper添加起别名@Param("ew")
java
@Mapper
public interface UserMapper extends BaseMapper<User> {
void updateBalanceByIds(@Param("ew") QueryWrapper<User> queryWrapper,@Param("amout") int amout);
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">
<update id="updateBalanceByIds">
update tb_user set balance=balance-#{amout} ${ew.customSqlSegment}
</update>
</mapper>
3.3:IService接口基本用法
用法:自定义service接口继承Iservice接口,实现类继承ServiceImpl.
1:创建一个service的接口继承IService接口
java
public interface IUserService extends IService<User> {
}
2:创建Iservice的实现类继承ServiceImpl接口
java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
3:测试类来进行使用
java
@SpringBootTest
class UserServiceImplTest {
@Autowired
private IUserService iUserService;
@Test
void testSaverUser(){
User user=new User();
user.setUsername("李磊");
user.setPassword("123");
user.setPhone("18688990011");
user.setBalance(200);
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
iUserService.save(user);
}
@Test
public void Query(){
List<Long> ids=List.of(1l,2l,3l);
List<User> users = iUserService.listByIds(ids);
for (User user : users) {
System.out.println(user);
}
}
}
未完待续.....