zoukankan      html  css  js  c++  java
  • Spring Boot + Spring Cloud 实现权限管理系统 后端篇(四):集成 MyBatis 框架

    引入依赖

    Spring Boot对于MyBatis的支持需要引入mybatis-spring-boot-starter的pom文件。

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>

    在加添MySQL等相关依赖后,完整的pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.louis</groupId>
        <artifactId>kitty-admin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>kitty-admin</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <mybatis.spring.version>1.3.2</mybatis.spring.version>
        </properties>
    
        <dependencies>
            <!-- spring boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.version}</version>
            </dependency>
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    添加配置

    1.添加MyBatis配置

    添加MyBatis配置类,配置相关扫描路径,包括DAO,Model,XML映射文件的扫描。

    新建com.louis.kitty.admin.config包,并创建一个MyBatis配置类,MybatisConfig.java。

    package com.louis.kitty.admin.config;
    
    import javax.sql.DataSource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    
    @Configuration
    @MapperScan("com.louis.kitty.**.dao")    // 扫描DAO
    public class MybatisConfig {
      @Autowired
      private DataSource dataSource;
    
      @Bean
      public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage("com.louis.kitty.**.model");    // 扫描Model
        
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath*:**/sqlmap/*.xml"));    // 扫描映射文件
        
        return sessionFactory.getObject();
      }
    }

    2.添加数据源配置

    打开 application.yml ,添加MySQL数据源连接信息。

    server:
      port: 8088
    spring:
      datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mango?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
        username: root
        password: 123456

    生成MyBatis模块

    由于手动编写MyBatis的Model、DAO、XML映射文件比较繁琐,通常都会通过一些生成工具来生成。MyBatis官方也提供了生成工具(MyBaits Generator),另外还有一些基于官方基础上改进的第三方工具,比如MyBatis Plus就是国内提供的一款非常优秀的开源工具,网上相关教程比较多,这里就不再赘述了。

    这里提供一些资料作为参考。

    Mybatis Generator 官网:http://www.mybatis.org/generator/index.html

    Mybatis Generator 教程:https://blog.csdn.net/testcs_dn/article/details/77881776

    MyBatis Plus 官网: http://mp.baomidou.com/#/

    MyBatis Plus 官网: http://mp.baomidou.com/#/quick-start

    代码生成好之后,分別将Domain、DAO、XML映射文件拷贝到相应的包里。

     

    打开Mapper,我们看到MyBatis Generator给我们默认生成了一些增删改查的方法。

    package com.louis.kitty.admin.dao;
    
    import com.louis.kitty.admin.model.SysUser;
    
    public interface SysUserMapper {
        int deleteByPrimaryKey(Long userId);
    
        int insert(SysUser record);
    
        int insertSelective(SysUser record);
    
        SysUser selectByPrimaryKey(Long userId);
    
        int updateByPrimaryKeySelective(SysUser record);
    
        int updateByPrimaryKey(SysUser record);
    }

    编写服务接口

    向 SysUserMapper 类中新一个 selectAll 方法,用于查询所有的用户信息。

    package com.louis.kitty.admin.dao;
    
    import java.util.List;
    
    import com.louis.kitty.admin.model.SysUser;
    
    public interface SysUserMapper {
        int deleteByPrimaryKey(Long userId);
    
        int insert(SysUser record);
    
        int insertSelective(SysUser record);
    
        SysUser selectByPrimaryKey(Long userId);
    
        int updateByPrimaryKeySelective(SysUser record);
    
        int updateByPrimaryKey(SysUser record);
    
        /**
         * 查询全部
         * @return
         */
        List<SysUser> selectAll();
    }

    向 SysUserMapper.xml 中加入 selectAll 的查询语句。

      <select id="selectAll" resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from sys_user
      </select>

    编写 SysUserService 接口,包含 selectAll 和 findByUserId 两个方法。

    package com.louis.kitty.admin.sevice;
    
    import java.util.List;
    
    import com.louis.kitty.admin.model.SysUser;
    
    public interface SysUserService {
    
        /**
         * 根据用户ID查找用户
         * @param userId
         * @return
         */
        SysUser findByUserId(Long userId);
    
        /**
         * 查找所有用户
         * @return
         */
        List<SysUser> findAll();
    
    }

    编写 SysUserServiceImpl 实现类,调用 SysUserMapper 方法完成查询操作。

    package com.louis.kitty.admin.sevice.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.louis.kitty.admin.dao.SysUserMapper;
    import com.louis.kitty.admin.model.SysUser;
    import com.louis.kitty.admin.sevice.SysUserService;
    
    @Service
    public class SysUserServiceImpl implements SysUserService {
        
        @Autowired
        private SysUserMapper sysUserMapper;
        
        @Override
        public SysUser findByUserId(Long userId) {
            return sysUserMapper.selectByPrimaryKey(userId);
        }
    
        @Override
        public List<SysUser> findAll() {
            return sysUserMapper.selectAll();
        }
    }

    编写 SysUserController restful 接口,返回JSON数据格式,提供外部调用。

    package com.louis.kitty.admin.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.louis.kitty.admin.sevice.SysUserService;
    
    @RestController
    @RequestMapping("user")
    public class SysUserController {
    
        @Autowired
        private SysUserService sysUserService;
        
        @GetMapping(value="/findByUserId")
        public Object findByUserId(@RequestParam Long userId) {
            return sysUserService.findByUserId(userId);
        }
        
        @GetMapping(value="/findAll")
        public Object findAll() {
            return sysUserService.findAll();
        }
    }

    打包资源

    虽然代码编写已经完成,但此时启动运行还是会有问题的,因为在编译打包的时候,我们的XML映射文件是不在默认打包范围内的,所以需要修改一下配置。

    修改 pom.xml ,在 build 标签内加入形如以下的 resource 标签的打包配置,这样代码打包时就会把映射文件也拷贝过去了。

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <!-- 打包时拷贝MyBatis的映射文件 -->
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/sqlmap/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>  
                    <directory>src/main/resources</directory>  
                        <includes> 
                            <include>**/*.*</include>  
                        </includes> 
                        <filtering>true</filtering>  
                </resource> 
            </resources>
        </build>

    测试运行

    编译启动,分别访问: http://localhost:8088/user/findAll, http://localhost:8088/user/findByUserId?userId=1,都能看到结果正常返回。

     http://localhost:8088/user/findByUserId?userId=1

    http://localhost:8088/user/findAll

    源码下载

    后端:https://gitee.com/liuge1988/kitty

    前端:https://gitee.com/liuge1988/kitty-ui.git


    作者:朝雨忆轻尘
    出处:https://www.cnblogs.com/xifengxiaoma/ 
    版权所有,欢迎转载,转载请注明原文作者及出处。

  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/xifengxiaoma/p/9488170.html
Copyright © 2011-2022 走看看