spring-boot、mybatis整合

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 一、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

一、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。相信很多人在使用mybatis的时候都有自己的感受吧,mybatis的框架使用很好的提高了我们自身的开发效率,和sql编写能力。为了简化编写和配置过程,这里我介绍spring-boot和mybatis的二种整合方式。

二、我这里为了简化项目,将两种方式写在一起的,下面我会单独介绍相关的配置。首先需要的jar包(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.troy</groupId>
    <artifactId>springboot_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
    </dependencies>
</project>

三、目录结构

四、application.yml配置

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/model?useUnicode=true&amp;characterEncoding=utf8
    username: root
    password: root
mybatis:
  mapper-locations: classpath:/mapper/*

五、第一种方式:采用@mapper的注解方式来实现数据库的访问

1、controller层

@RestController
@RequestMapping(value = "/api/login")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/init")
    public String init() {
        return "hello world";
    }

    @RequestMapping(value = "/findAll")
    public List<Map<String,Object>> findAll() {
        List<Map<String,Object>> list = userService.findAllMapper();
        return list;
    }

    @RequestMapping(value = "/findById")
    public Map<String,Object> findById() {
        Long id = 1L;
        Map<String,Object> map = userService.findByIdMapper(id);
        return map;
    }
}

2、service层

1)接口

public interface UserService {
    public List<Map<String,Object>> findAllMapper();
    public Map<String,Object> findByIdMapper(Long id);
}

2)实现类

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<Map<String, Object>> findAllMapper() {
        return userMapper.findAll();
    }

    @Override
    public Map<String, Object> findByIdMapper(Long id) {
        return userMapper.findById(id);
    }
}

3、mapper层

@Mapper
@Repository
public interface UserMapper {

    @Select(value = "select * from user")
    public List<Map<String,Object>> findAll();

    @Select(value = "select * from user where id=#{id}")
    public Map<String,Object> findById(Long id);
}

六、第二种方式:采用xml配置文件的方式

1、controller层

@RestController
@RequestMapping(value = "/api/login")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/init")
    public String init() {
        return "hello world";
    }

    @RequestMapping(value = "/findAll")
    public List<Map<String,Object>> findAll() {
        return userService.findAll();
    }

    @RequestMapping(value = "/findById")
    public Map<String,Object> findById() {
        Long id = 1L;
        return userService.findById(id);
    }
}

2、service层

1)接口

public interface UserService {

    public List<Map<String,Object>> findAll();
    public Map<String,Object> findById(Long id);
}

2)实现类

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public List<Map<String,Object>> findAll(){
        return userDao.findAll();
    }

    @Override
    public Map<String, Object> findById(Long id) {
        return userDao.findById(id);
    }
}

3、dao层

1)接口

@Repository
public interface UserDao {

    public List<Map<String,Object>> findAll();
    public Map<String,Object> findById(Long id);
}

2)实现类

@Repository
public class UserDaoImpl implements UserDao{

    @Autowired
    private SqlSessionTemplate sqlSession;

    @Override
    public List<Map<String, Object>> findAll() {
        return sqlSession.selectList("user.findAll");
    }

    @Override
    public Map<String, Object> findById(Long id) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("id",id);
        return sqlSession.selectOne("user.findById",map);
    }
}

4、userMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="user">
    <select id="findAll" resultType="java.util.Map">
        select * from user
    </select>

    <select id="findById" parameterType="java.util.Map" resultType="java.util.Map">
        select * from user where id=#{id}
    </select>
</mapper>

5、application.yml里面配置

mybatis:
  mapper-locations: classpath:/mapper/*

七、总结:总体来说两种使用方式都是很不错的,注解的方式在使用上面很方便,也方便管理。xml配置文件的方式在使用上面更灵活,针对于sql量比较大的方式处理比较合理。在会涉及逻辑判断的时候,xml的方式使用就会体现的更加灵活。

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
37 0
|
2月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
|
3月前
|
Java
springboot项目打包瘦身
springboot项目打包瘦身
|
5月前
|
Java 测试技术
Springboot集成JUnit5优雅进行单元测试
Springboot集成JUnit5优雅进行单元测试
|
安全 Java Maven
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
1291 1
|
9月前
|
Java Maven
【Springboot】创建boot工程spring-boot-maven-plugin报红、出错_解决方案
【Springboot】创建boot工程spring-boot-maven-plugin报红、出错_解决方案
312 0
|
9月前
|
SQL druid 前端开发
让SpringBoot不需要Controller、Service、DAO、Mapper,卧槽!这款工具绝了!
让SpringBoot不需要Controller、Service、DAO、Mapper,卧槽!这款工具绝了!
|
11月前
|
Java C++ Spring
Spring Boot - ConfigDataEnvironmentPostProcessor(Boot 2.4)搞定配置文件加载优先级
Spring Boot - ConfigDataEnvironmentPostProcessor(Boot 2.4)搞定配置文件加载优先级
232 0
|
存储 XML JSON
【SpringBoot实战专题】「开发实战系列」从零开始教你舒服的使用RedisTemplate操作Redis数据
【SpringBoot实战专题】「开发实战系列」从零开始教你舒服的使用RedisTemplate操作Redis数据
136 0
【SpringBoot实战专题】「开发实战系列」从零开始教你舒服的使用RedisTemplate操作Redis数据
|
Java 关系型数据库 MySQL
玩“公主焊接”,顺便学习学习数据库关系映射与Spring Boot中MyBatis(SSM框架)的级联操作(bushi)
玩“公主焊接”,顺便学习学习数据库关系映射与Spring Boot中MyBatis(SSM框架)的级联操作(bushi)
311 0