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

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

作者: Jtag特工 | 来源:发表于2019-02-11 10:37 被阅读6次

    全民学后端快餐教程(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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wpassqtx.html