首页 > 其他分享 >Springboot+Echarts(五)

Springboot+Echarts(五)

时间:2023-09-27 16:56:22浏览次数:47  
标签:mapper Springboot List Echarts public user mybatis id

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

相关文章

  • Jemeter多文件上传(用SpringBoot简单写一个接口测试)
    写一个多文件上传接口使用Jemeter的HttpRequest组件实现多文件上传测试可以看到多文件实现方式只需要在参数里面添加多行就行了,参数名称写同一个。......
  • Springboot一些默认值
    默认logSpringBoot默认使用Logback作为日志框架,所以你不需要做任何特殊的配置就可以开始使用Logback。但是,如果你想自定义Logback的行为,你可以通过创建一个logback-spring.xml文件来做到这一点<?xmlversion="1.0"encoding="UTF-8"?><configuration><appendername="STD......
  • Springboot自动装配原理
    BFPP:BeanFactoryPostProcessorBPP:BeanPostProcessorBDRPP:BeanDefinitionRegistryPostProcessor自动装配实现的原理:当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及......
  • SpringBoot配置文件加载过程
    前置知识配置属性抽象和各种实现类PropertySource<T>下面是抽象类属性源和它的两个内部实现类介绍//抽象父类publicabstractclassPropertySource<T>{/**属性源名称**/protectedfinalStringname;/**属性源数据**/ protectedfinalTso......
  • echarts 响应式自动适应宽度
    beforeMount(){window.addEventListener('resize',this.$_resizeHandler)},beforeDestroy(){window.removeEventListener('resize',this.$_resizeHandler)},  ......
  • 工作流如何实现?集成?springboot+vue+activiti技术栈
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作......
  • 7、springboot使用MessageSource国际化提示
    目录springboot使用MessageSource国际化提示1、MessageSource源码2、yml配置MessageSource3、创建MessagesUtils工具类简化使用springboot使用MessageSource国际化提示1、MessageSource源码MessageSource是spring自带的一个接口,源码如下packageorg.springframework.context;......
  • SpringBoot | 拦截机制
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Bean生命周期
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • Idea+SpringBoot控制台调试打印sql语句
    在application.yml中添加:logging:level:com.xiaobai.stock.mapper:DEBUG//注意:':'后有空格,不能省略mapper:运行时控制台 ......