Spring+SpringMVC集成MyBatis

Spring+SpringMVC集成Mybatis简单的实现

Spring+SpringMVC集成Mybatis简单的实现

有些不妥当的地方,请各位大佬多多指点,集成Mybatis的时候采用了省略Dao层的配置方法,Dao层绑定了XXXMapper.xml文件,Dao层只需写接口,直接上干货。
SSM框架简介

SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。

1.Spring简介

    Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  A.控制反转(IOC)是什么呢?
    IOC:控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。
    [注意]:面试的时候,如果有条件,画图,这样更加显得你懂了
  B.面向切面(AOP)又是什么呢?
    首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。
    实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

[简单点解释],比方说你想在你的biz层所有类中都加上一个打印‘你好,AOP’的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘你好,AOP’让后你Ioc这个类 ref=“biz.*”让每个类都注入。

2.Spring MVC简介

    Spring MVC属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,它原生支持的Spring特性,让开发变得非常简单规范。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

3.MyBatis简介

    MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。

首先我们看一下目录结构目录结构
在这里插入图片描述

数据库数据源(权限管理系统的菜单表)

/*
 Navicat Premium Data Transfer

 Source Server         : czh
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : admin

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 15/08/2019 14:43:25
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单名称',
  `parent_id` bigint(20) DEFAULT NULL COMMENT '父菜单ID,一级菜单为0',
  `url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单URL,类型:1.普通页面(如用户管理, /sys/user) 2.嵌套完整外部页面,以http(s)开头的链接 3.嵌套服务器页面,使用iframe:前缀+目标URL(如SQL监控, iframe:/druid/login.html, iframe:前缀会替换成服务器地址)',
  `perms` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:sys:user:add,sys:user:edit)',
  `type` int(11) DEFAULT NULL COMMENT '类型   0:目录   1:菜单   2:按钮',
  `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单图标',
  `order_num` int(11) DEFAULT NULL COMMENT '排序',
  `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
  `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间',
  `last_update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
  `last_update_time` datetime(0) DEFAULT NULL COMMENT '更新时间',
  `del_flag` tinyint(4) DEFAULT 0 COMMENT '是否删除  -1:已删除  0:正常',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单管理' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES (1, '系统管理', NULL, NULL, NULL, 0, 'el-icon-setting', 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (2, '用户管理', NULL, '/sys/user', NULL, 1, 'el-icon-service', 1, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (4, '角色管理', NULL, '/sys/role', NULL, 1, 'el-icon-view', 4, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (5, '菜单管理', NULL, '/sys/menu', NULL, 1, 'el-icon-menu', 5, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (9, '查看', 2, NULL, 'sys:user:view', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (10, '新增', 2, NULL, 'sys:user:add', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (11, '修改', 2, NULL, 'sys:user:edit', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (12, '删除', 2, NULL, 'sys:user:delete', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (17, '查看', 4, NULL, 'sys:role:view', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (18, '新增', 4, NULL, 'sys:role:add', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (19, '修改', 4, NULL, 'sys:role:edit', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (20, '删除', 4, NULL, 'sys:role:delete', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (21, '查看', 5, NULL, 'sys:menu:view', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (22, '新增', 5, NULL, 'sys:menu:add', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (23, '修改', 5, NULL, 'sys:menu:edit', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (24, '删除', 5, NULL, 'sys:menu:delete', 2, NULL, 0, NULL, NULL, NULL, NULL, 0);
INSERT INTO `sys_menu` VALUES (28, '使用案例', 0, NULL, NULL, 0, 'el-icon-picture-outline', 6, NULL, NULL, 'admin', '2018-11-15 14:39:43', 0);

SET FOREIGN_KEY_CHECKS = 1;

use表的数据源

/*
 Navicat Premium Data Transfer

 Source Server         : czh
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : admin

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 15/08/2019 14:49:38
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
  `email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号',
  `status` tinyint(4) DEFAULT NULL COMMENT '状态  0:禁用   1:正常',
  `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
  `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间',
  `last_update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
  `last_update_time` datetime(0) DEFAULT NULL COMMENT '更新时间',
  `del_flag` tinyint(4) DEFAULT 0 COMMENT '是否删除  -1:已删除  0:正常',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `name`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户管理' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, '宋江', '123456', '11397556@qq.com', '13054866654', 1, NULL, '2019-08-12 16:39:40', NULL, '2019-08-12 16:39:44', 0);
INSERT INTO `sys_user` VALUES (2, '黄磊', '200000', '11@.com', '13154867762', 1, 'admin', '2019-08-12 22:20:19', '', NULL, 0);
INSERT INTO `sys_user` VALUES (23, '赵云', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:43:44', 'admin', '2018-09-23 19:43:52', 0);
INSERT INTO `sys_user` VALUES (24, '诸葛亮', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:44:23', 'admin', '2018-09-23 19:44:29', 0);
INSERT INTO `sys_user` VALUES (25, '曹操', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:45:32', 'admin', '2018-09-23 19:45:37', 0);
INSERT INTO `sys_user` VALUES (26, '典韦', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:45:48', 'admin', '2018-09-23 19:45:57', 0);
INSERT INTO `sys_user` VALUES (27, '夏侯惇', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:46:09', 'admin', '2018-09-23 19:46:17', 0);
INSERT INTO `sys_user` VALUES (28, '荀彧', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:46:38', 'admin', '2018-11-04 15:33:17', 0);
INSERT INTO `sys_user` VALUES (29, '孙权', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:46:54', 'admin', '2018-09-23 19:47:03', 0);
INSERT INTO `sys_user` VALUES (30, '周瑜', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:47:28', 'admin', '2018-09-23 19:48:04', 0);
INSERT INTO `sys_user` VALUES (31, '陆逊', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:47:44', 'admin', '2018-09-23 19:47:58', 0);
INSERT INTO `sys_user` VALUES (32, '黄盖', '123', 'test@qq.com', '13889700023', 1, 'admin', '2018-09-23 19:48:38', 'admin', '2018-09-23 19:49:02', 0);
INSERT INTO `sys_user` VALUES (43, '张向杰', 'zxj1511487', 'zhangxiangjie@163.com', '17881280356', 1, 'admin', '2019-08-13 14:38:36', 'admin', '2019-08-13 14:38:49', 1);

SET FOREIGN_KEY_CHECKS = 1;

web.xml文件的配置,配置都有注释


<web-app version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 上下文参数配置 -->
    <!-- Spring配置文件加载地址 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:aplicationContext.xml</param-value>
    </context-param>
    <!-- Servlet配置监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/spring-context.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

<!--    <error-page>-->
<!--        <exception-type>java.lang.Exception</exception-type>-->
<!--        <location>/common/error.jsp</location>-->
<!--    </error-page>-->
</web-app>

重点来了下边就是关于集成Mybatis的相关配置
1.首先在resources目录下创建一个mapper文件夹(用来放所有的sql语句的xml文件
2.创建一个mybatis-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!--注入Mapper文件夹中的每一个XML文件,让Mybatis去解析SQL语句-->
    <mappers>
        <mapper resource="Mapper/UserMapper.xml"/>
        <mapper resource="Mapper/MenuMapper.xml"/>
        <mapper resource="Mapper/CustomerMapper.xml"/>
        <mapper resource="Mapper/updateUserRole.xml"/>
    </mappers>
</configuration>

3配置applicationContext.xml文件,这部分比较麻烦,要注意,这里采用了无Dao层的配置,用SqlSessionFactory 动态代理生成Dao层就是省略Dao层,Dao层只写接口,在这里我配置了阿里的Druid数据库连接池,创建了SqlSessionFactory工厂用来解析SQL语句,还配置了PageHelper分页插件(这个插件特别NB,两句话搞定分页,后边有案例)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

    <!--1.扫描service层-->
    <context:component-scan base-package="org.taru.service.impl"/>
    <context:component-scan base-package="org.taru.service.*"/>

    <!--2. 在classpath 读取jdbc属性配置文件-->
    <context:property-placeholder ignore-unresolvable="true" location="classpath:db.properties"/>
    <!-- 3.数据源  连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--配置连接池属性-->
        <!--配置驱动类名字-->
        <property name="driverClassName" value="${jdbc.driver}" />
        <!-- 基本属性 url、user、password -->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />
        <property name="maxActive" value="20" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
        <property name="validationQuery" value="select 1 " />

    </bean>

    <!--4.配置SqlSessionFactory对象 -->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!--配置mybatis全局配置文件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--分页配置-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置参数,一行配置一个 -->
                        <value>
                        </value>
                    </property>
                </bean>
            </array>
        </property>

    </bean>
    <!--5 自动扫描对象关系映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
        <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"></property>
        <!-- 指定要自动扫描接口的基础包,实现接口 -->
        <property name="basePackage" value="org.taru.dao"></property>
    </bean>
</beans>

下边就是写SQL语句了,这个案例比较经典,本案例采用了

<?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属性一点要全限定性类名,写你要操作的Dao层的接口名 -->
<mapper namespace="org.taru.dao.queryMenuDao">
    <!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
       resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表   -->

    <resultMap type="org.taru.domel.Menu" id="MenuMap">
        <id column="id" property="id"/>
        <result column="faname" property="name"/>
        <collection property="date" ofType="org.taru.domel.Menu" >
            <id column="id" property="id"/><!-- 这里的column对应的是下面查询的别名,而不是表字段名 -->
            <result column="sonname" property="name"/>
        </collection>
    </resultMap>
    <!-- 查询菜单树 -->
    <!--<select>标签的id属性一点要是Dao层接口的方法名,否则无法解析SQL-->
    <!--sql语句是五表联查查询用户的权限,生成动态菜单的SQL语句,对于初学者应该有点挑战,但是非常经典-->
    <select id="queryMenu" parameterType="org.taru.domel.Menu" resultMap="MenuMap">

			select e.name as faname,f.name as sonname
            from
            sys_user a
            left join sys_user_role b on a.id = b.user_id
            left join sys_role c on b.role_id = c.id
            left join sys_role_menu d on c.id = d.role_id
            left join  sys_menu e on d.menu_id = e.id
						left join sys_menu f on f.parent_id=e.id
            where
            e.del_flag = 0  and a.id =#{user.id}
	</select>
</mapper>

下边就是Dao层接口,以前的dao层写起来特别麻烦,现在就两句话,直接上代码异(注意这里只写接口)

public interface queryMenuDao {
    public List<Menu> queryMenu(String id);
}

service层也有变化,service层比SpringMVC中多了service层的接口,用serviceImpl实现类实现service方法
service接口

public interface queryMenuService {
   public  List<Menu> queryMenu(String id);

   interface customerService {
   }
}

serviceimpl实现类(这里要加头顶注解@Service,实现service接口,重写他的方法,注入Dao层的接口,调用Dao层的方法)


@Service
public class QueryMenuServiceImpl1 implements queryMenuService {
    @Autowired
    org.taru.dao.queryMenuDao queryMenuDao;
    @Override
    public List<Menu> queryMenu(  String id) {
        List<Menu> list =queryMenuDao.queryMenu(id);
        return list;
    }
}

Controller层调用service方法


@RestController
public class queryMenuController  {
    @Autowired
    queryMenuService QueryMenuServiceImpl1;

    @RequestMapping("/api/querymenu")
   public JsonResult queryMenu(@RequestParam("id") String id){
       JsonResult jsonResult=null;
   try {
        List<Menu> list = QueryMenuServiceImpl1.queryMenu(id);
        if (list != null) {
            jsonResult = new JsonResult("200", "查询成功", list);
        } else {
            jsonResult = new JsonResult("404", "查询失败", "");
        }
    } catch (Exception e) {
        e.getStackTrace();
        jsonResult = new JsonResult("500", "数据错误", "");
    }
        return jsonResult;
   }
}

这里还有一个工具类生成Json串的名为JsonResul


public class JsonResult implements Serializable {
	private String status;
	private String message;
	private Object data;
	
	public String getStatus() {
		return status;
	}
	public String getMsg() {
		return message;
	}
	public Object getData() {
		return data;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public void setMsg(String msg) {
		this.message = msg;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public JsonResult(String status, String message, Object data) {
		super();
		this.status = status;
		this.message = message;
		this.data = data;
	}
}

好了所有逻辑都写完了,启动Tomcat之后我用PostMan测试结果如下:

{
  "status": "200",
  "data": [
    {
      "id": null,
      "name": "用户管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "查看",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "用户管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "新增",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "用户管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "修改",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "用户管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "删除",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "角色管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "查看",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "角色管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "新增",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "角色管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "修改",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "角色管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": [
        {
          "id": null,
          "name": "删除",
          "parent_id": null,
          "url": null,
          "perms": null,
          "type": 0,
          "flag": 0,
          "date": []
        }
      ]
    },
    {
      "id": null,
      "name": "系统管理",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": []
    },
    {
      "id": null,
      "name": "查看",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": []
    },
    {
      "id": null,
      "name": "查看",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": []
    },
    {
      "id": null,
      "name": "查看",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": []
    },
    {
      "id": null,
      "name": "使用案例",
      "parent_id": null,
      "url": null,
      "perms": null,
      "type": 0,
      "flag": 0,
      "date": []
    }
  ],
  "msg": "查询成功"
}

里边有CustomerMapper是带分页的查询
GitHub源码地址

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值