Mybatis-plus操作的多表查询和分页查询 今天首先回顾了之前所学的基本的单表增删改查 这里想再自己写一遍 是为了方便自己以后的开发流程顺利 首先 创建Springboot项目,选择java8和Springboot2.x.x 之后选择Web依赖 然后添加依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.7</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.5</version> </dependency>
从上到下依次是mybatis-plus,mysql连接,mybatis,德鲁伊连接池
解释一下德鲁伊连接池,是对mysql数据库进行多次连接的,说人话就是循环连接,连不上一直连,因为数据库的启动需要一个时间,就我自己来说,开发Android应用连接SQL Lite的时候确实也用到过类似的操作
之后是设置properties的内容
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mybatis??useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=**** mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
这里jdbc编码一栏有些问题,我进行了修改,把编码改成了UTF-8
做完这些之后,就可以进行Springboot+Mybatis的开发了
一般来说分以下几个包
Mapper:用于定义接口,说人话就是实现方法的逻辑
Entity:用于封装类,说人话就是javabean
Controller:用于调用接口,实例化接口对象,接收Get和Post请求完成操作
主方法类:Springboot项目的启动入口
第一步对主类添加MapperScan的注解
@MapperScan("com.example.mybatisplus.mapper")
是为了启动主类的时候自动扫描mapper包,找到@Mapper的接口类
然后创建封装类,基础的构造和get、set方法
然后创建Controller包和Mapper包
创建mapper类的时候注意是接口类型(选class下边绿色的那个)
然后添加@Mapper的注解声明它是一个接口类
然后可以让它继承BaseMapper<>,这个尖括号中写的是实体类的名字,就是Entity中实体类的名字
一般来说对应的mapper写对应的类的名字即可
例如UserMapper
public interface UserMapper extends BaseMapper<User>{}......
然后基础的增删改查就很好实现了:
@Select("select * from user") public List<User> find(); @Insert("insert into user values(#{id},#{username},#{password},#{birthday})") public int insert(User user); @Delete("delete from user where id = #{id}") public int delete(String id); @Update("update user set username = #{username},password = #{password},birthday = #{birthday} where id = #{id}") public int update (User user);
要注意的是 调用的属性名都用#{}括起来,这样mybatis会自动寻找实体类中的变量进行操作
这些都完成之后就可以在Controller中进行操作了
首先对controller类要添加一个@RestController注解,声明这是一个controller类
然后需要在类中定义一个@Autowired,这是为了实例化一个mapper对象以调用方法
具体代码为
@RestController public class UserController { @Autowired private UserMapper userMapper;
然后就是
@GetMapping("/user") public List query() { List<User> list = userMapper.find(); System.out.println(list); return list; }
对不传入数值的一般是get方法,然后直接返回即可
对传入数值的一般使用post方法
------------------------------------------------------------------------------------------------------------------------分隔符----------------------------------------------------------------------------------------------------------------------------------
然后是今天所学的 多表联查,上述所讲都是对单个表的增删改查,那么举例来说,如果我有另一个叫order的表,其中包含id,order_time,total,uid四个属性,其中,uid对应user表中的id,当我查询用户的时候,我希望能查询出用户对应的订单,我该如何做呢?
流程如下
首先,需要对order创建相同的entity、mapper、controller,controller不必须,但是考虑到后续可能还需要对order单表进行操作,因此先进行了定义
然后在entity中对order进行封装,定义构造、get&set、tostring方法等。
之后,在User的封装类中,需要定义一个order变量,因为我们想返回的是订单的信息,从面向对象的角度来说,它应该是返回一个List类型,因此
@TableField(exist = false) private List<Order> orders
首先说一下,如果不使用@TableName注解,则Mybatis会自动寻找和封装类名相同的表名,如果没有就会报错
这里使用的这个@TableField注解,意思是告诉Mybatis,我需要一个List<order>的属性,但是在user或者说在tablename指定的表中并没有这个字段,因此exist=false
重点是记得创建这个变量的get和set方法,例如private List<order> orders;
然后我们来到mapper类中,这里一共有两个mapper,一个是usermapper,一个是ordermapper,我们希望完成的操作的处理逻辑是这样的
我们在usermapper中,传入一个id,然后在ordermapper中定义另一个方法,通过传入的id查询对应的订单,然后返回给usermapper中的这个方法中的orders,然后一起返回到usermapper中对应的函数即可,具体代码:
@Select("select * from t_user") @Results( { @Result(column = "id", property = "id"), @Result(column = "username", property = "username"), @Result(column = "password", property = "password"), @Result(column = "birthday", property = "birthday"), @Result(column = "id", property = "orders", javaType = List.class, many = @Many(select = "com.example.mybatisplus.mapper.OrderMapper.selectByUid") ) } ) List<User> selectAllUserAndOrders();
首先@Result是定义user表中的字段,重点放在最后,它是给出了一个名为id的字段,通过many = @Many这个操作,调用的是
com.example.mybatisplus.mapper.OrderMapper.selectByUid
这个方法,这个方法的具体定义如下
@Select("select * from t_order where uid = #{id}") List<Order> selectByUid(String id);
所以说,是在一个mapper中调用了另一个mapper方法,把第二个mapper方法的返回值给了第一个mapper方法中的一个对应的实体类,然后带着实体类一起返回到第一个mapper方法中
然后在Controller中进行调用即可
@GetMapping("/user/findAll") public List<User>find() { return userMapper.selectAllUserAndOrders(); }
标签:mapper,Springboot,List,Echarts,public,user,mybatis,id From: https://www.cnblogs.com/Arkiya/p/17733104.html