网站怎么做导航栏,网站开发常用工具,专家一对一免费咨询,滁州市大滁城建设网站文章目录 一、多表查询二、mybatis-plus条件查询三、分页查询 一、多表查询
可能会用到的注解 这里的场景是#xff0c;查询每个用户及其所有的订单。就是查询你的id号的同时#xff0c;把你所有的历史订单信息都拉出来。
表结构这样
CREATE TABLE User ( id INT PRIMARY… 文章目录 一、多表查询二、mybatis-plus条件查询三、分页查询 一、多表查询
可能会用到的注解 这里的场景是查询每个用户及其所有的订单。就是查询你的id号的同时把你所有的历史订单信息都拉出来。
表结构这样
CREATE TABLE User ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, birthday VARCHAR(10)
);INSERT INTO User (id, username, password, birthday) VALUES
(1, Alice, password123, 1990-01-01),
(2, Bob, pass456word, 1992-05-10),
(4, Bob, pass456word, 1992-05-10),
(3, Bob, pass456word, 1992-05-10),
(5, Bob, pass456word, 1992-05-10),
(6, Bob, pass456word, 1992-05-10);CREATE TABLE t_order ( id INT PRIMARY KEY AUTO_INCREMENT, order_time VARCHAR(255) NOT NULL, total double NOT NULL, uid INT NOT NULL );INSERT INTO t_order (order_time, total, uid) VALUES
(2023-04-01 00:00:00, 100.00, 1),
(2023-04-01 00:00:00, 100.00, 1),
(2023-04-01 00:00:00, 100.00, 2),
(2023-04-01 00:00:00, 100.00, 3);具体的流程呢是在User里面加一个ListOrder这个很好理解每个用户需要有多个订单嘛使用一个列表来接受很合理。 在UserMapper里面写一下方法很好理解id、username、password、birthday都需要映射到对应类的里的字段column代表表里面字段property代表类里面的字段.。主要是最后的那个many是要将表里面的id通过selectByUid的返回结果映射到orders中。这个selectById是要我们自己写的。路径不能写错哦。
Select(select * from User)//使用Results注解后所有字段都要手动映射Results({Result(column id,property id),Result(column username,property username),Result(column password,property password),Result(column birthday,property birthday),Result(columnid,property orders, javaType List.class,many Many(select com.example.hello.mapper.OrderMapper.selectByUid))//使用表里的字段id映射为orders:根据用户的id查找订单。将id传递给selectByUid。})ListUser selectAllUserAndOrders();Select(select * from t_order where uid#{uid})ListOrder selectByUid(int uid);然后在controller写调用selectAllUserAndOrders的接口即可。
GetMapping(/user/findall)public ListUser find(){return userMapper.selectAllUserAndOrders();}反过来说我如果希望查询所有订单及对应的用户其实直接在OrderMapper里面编写Results映射即可只不过一个订单只对应一个用户所以要使用one接收在将uid传入到UserMapper的selectById在OrderBean里面增加一个User成员变量存放即可。
GetMapping(/order/findall)public ListOrder findall(){ListOrder orders orderMapper.selectAllOrdersandUser();return orders;}Select(select * from t_order)Results({Result(column id,property id),Result(column ordertime,property ordertime),Result(column total,property total),Result(column uid,property user,javaType User.class,one One(selectcom.example.hello.mapper.UserMapper2.selectById))})ListOrder selectAllOrdersandUser();Select(select * from User where id #{id})User selectById(int id);注意如果中间遇到什么问题尝试一步一步找错误是不是数据库建立的有问题注解上面写好的执行语句能不能再sql里面正常执行
二、mybatis-plus条件查询
例如常见的字段等于、大于、小于。mybatis-plus提供了很多模板我这里举一个例子官网
我要查询username是我输入进来的所有行
GetMapping(/user/find/{username})public ListUser findByCond(PathVariable String username){System.out.println(username);System.out.println(*---------*);QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(username,username);return userMapper.selectList(queryWrapper);}三、分页查询
使用mybatisPlus实现分页查询很实用的一个东西。 首先配置好Config文件
Configuration
public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor paginationInterceptor(){MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor new PaginationInnerInterceptor(DbType.MYSQL);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}在controller中定义分页查询接口。其中current和size分别代表当前页数和每页是多少条数据。selectPage方法中第一个第二个参数需要通过构造QueryWrapper传入即可也可以直接传入null表示select *。
GetMapping(/user/findbypage/{current}/{size})public IPage findByPage(PathVariable int current,PathVariable int size){PageUser page new Page(current,size);QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(username,Bob);IPage iPage userMapper.selectPage(page,queryWrapper);return iPage;}