全民学后端快餐教程(3) - 使用MyBatis访问数据库

简介: 使用流行的持久层框架MyBatis来访问数据库

全民学后端快餐教程(3) - 使用MyBatis访问数据库

上节我们学习了JdbcTemplate来访问数据库,比起使用原始的JDBC来,还是方便很多的。至少不用去处理大量的Exception。
但是我们还是可以通过一些框架,使工作量变得更少一些。这方面的主流选择是MyBatis.

MyBatis简介

MyBatis是由iBatis发展而来的。iBatis最早是由Clinton Begin于2001年开发,后来在2004年捐赠给了Apache基金会。
2010年,iBatis团队决定从Apache项目中分离出来,并改名myBatis.

MyBatis是支持SQL, 存储过程和高级映射的持久层框架。

用MyBatis访问数据库

略不幸的是,myBatis没有Spring Boot的官方支持,但是myBatis团队自己提供了与Spring Boot的整合。

引用MyBatis

首先我们引入与Spring Boot配合的依赖。

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

Mapper

MyBatis通过Mapper的方式来实现SQL语句与函数调用之间的映射。
下面我们写两个查询的SQL语句。需要替换的参数,用#{变量名}来代替就好:

package cn.alios.system.service.prefix;

import cn.alios.system.service.prefix.pojo.Issue;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface IssueMapper {
    @Select("select id, filename, linenum, issuestring from issue where id = #{id};")
    Issue findIssue(Long id);

    @Select("select id, filename, linenum, issuestring from issue where filename like concat('%', #{filename}, '%');")
    Issue findIssueByFileName(String filename);
}

调用Mapper实现查询

我们还是先通过@Autowired将issueMapper自动装配进来:

    @Autowired
    IssueMapper issueMapper = null;

然后就调用就好啦:

    @RequestMapping("/findbyid")
    @ResponseBody
    public String testFindById() {
        Issue issue = issueMapper.findIssue((long) 1);
        if (issue != null) {
            return issue.getFilename() + "," + issue.getIssuestring()+ ":" + issue.getLinenum();
        } else {
            return "Test MyBatis failed!";
        }
    }

我们看下完整的Controller的代码:

package cn.alios.system.service.prefix.controller;

import cn.alios.system.service.prefix.IssueMapper;
import cn.alios.system.service.prefix.pojo.Issue;
import cn.alios.system.service.prefix.service.JdbcTemplateIssueServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
public class TestController {
    @Autowired
    JdbcTemplateIssueServiceImpl jdbcTemplateIssueService = null;

    @Autowired
    IssueMapper issueMapper = null;

    @RequestMapping("/")
    @ResponseBody
    public String test() {
        Issue issue = jdbcTemplateIssueService.getIssue((long) 1);
        if (issue != null) {
            return issue.getFilename() + "," + issue.getIssuestring();
        } else {
            return "Test Controller!";
        }
    }

    @RequestMapping("/findbyid")
    @ResponseBody
    public String testFindById() {
        Issue issue = issueMapper.findIssue((long) 1);
        if (issue != null) {
            return issue.getFilename() + "," + issue.getIssuestring()+ ":" + issue.getLinenum();
        } else {
            return "Test MyBatis failed!";
        }
    }

    @RequestMapping("/findbyfilename")
    @ResponseBody
    public String testFindByFileName() {
        Issue issue = issueMapper.findIssueByFileName("test");
        if (issue != null) {
            return issue.getFilename() + "," + issue.getIssuestring()+ ":" + issue.getLinenum();
        } else {
            return "Test MyBatis failed!";
        }
    }
}

测试一下,mvn package,然后运行。
在browser中测试一下:http://127.0.0.1:8080/test/findbyfilename
输出如下:test.java,test:1

目录
相关文章
|
1月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
166 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
23天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
23 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
27天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
28天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
41 4
|
16天前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
1月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
150 3
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
439 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
145 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库