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/
版权所有,欢迎转载,转载请注明原文作者及出处。