目录
2:创建Iservice的实现类继承ServiceImpl接口
MyBatisPlus是基于MyBatis的基础上增强的,简化单表的增删查改的代码。
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.5.2version>
- dependency>
自定义的Mapper接口继承BaseMapper
不用写基础的增删改查代码。
- "1.0" encoding="UTF-8"?>
- 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通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
@TableName(value值) | 用来指定表名 |
@TableId(value值) | 用来指定表中的主键字段信息 |
@TableField(value值) | 用来指定表中的普通字段信息 |
当表中的字段名或者表明与类名或者属性名不一致时,需要设置value属性,value属性为表名或者表的字段名。
AUTO | 数据库自增长 |
INPUT | 通过set方法自行注入 |
ASSIGN_ID | 分配ID,接口identifierGenerator的方法nextId来生成Id |
当我们在数据库当中设置Id为自增长,但在类中的id未设置自增长时,默认的是ASSIGN_ID。
1:成员变量与数据库字段名不一致
2:成员变量名以is开头,且是布尔值
3:成员变量名与数据库关键字冲突(@TableField("`order`")
4:成员变量不是数据库字段@TableField(exist=false),用来标记成员变量不是数据库字段
案例演示1: 当数据库表名和类名不一致时。在类的前面加上其底下的注解
@TableName("tb_user")
案例演示2:当我们设置数据库的id是自增的,此时,需要我们对于@TableId(type=IdType.Auto)
- @TableId(type= IdType.AUTO)
- private Long id;
条件构造器关系:
需求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:
void testQueryWrapper(){ QueryWrapperqueryWrapper=new QueryWrapper () .select("id","username","info","balance") .ge("balance",1000) .like("username","o"); Listusers = userMapper.selectList(queryWrapper); System.out.println(users); }查询结果:
利用QueryWrapper查询需求2:
@Test void testQueryWrapper1(){ //更新查询的结果 User user=new User(); user.setBalance(2000); //更新的条件 QueryWrapperqueryWrapper=new QueryWrapper ().eq("username","jack"); //执行更新 userMapper.update(user,queryWrapper); }更新的结果:
需求1:更新id为1,2,4的用户的余额,扣200
SQL语句:update user set balance=balance-200 where id in(1,2,4)
- @Test
- void testUpdateWrapper(){
- //由于是多个用户,所以我们不能使用上一个方式的更新,且balance-200,所以要使用UpdateWrapper
- List
ids=List.of(1L,2L,4L); - UpdateWrapper
userUpdateWrapper=new UpdateWrapper() - .setSql("balance=balance-200")
- .in("id",ids);
- userMapper.update(null,userUpdateWrapper);
- }
运行结果:
我们可以利用Mybatis的wrapper来构造复杂的where条件,剩下的我们自己写。MybatisPlus适用于where条件的设置,剩下我们自己来写。
- //1:更新条件
- List
ids=List.of(1l,2l,3l); - int amout=200;
- QueryWrapper
queryWrapper=new QueryWrapper().in("id",ids);
- //调用自定义方法
- userMapper.updateBalanceByIds(queryWrapper,amout);
在mapper中的方法不要忘了对于QueryWrapper添加起别名@Param("ew")
- @Mapper
- public interface UserMapper extends BaseMapper
{ -
-
- void updateBalanceByIds(@Param("ew") QueryWrapper
queryWrapper,@Param("amout") int amout) ; - }
- "1.0" encoding="UTF-8"?>
- 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>
用法:自定义service接口继承Iservice接口,实现类继承ServiceImpl.
- public interface IUserService extends IService
{ -
- }
- @Service
- public class UserServiceImpl extends ServiceImpl
implements IUserService { -
-
- }
- @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
ids=List.of(1l,2l,3l); - List
users = iUserService.listByIds(ids); - for (User user : users) {
- System.out.println(user);
- }
-
- }
-
-
- }
未完待续.....