Bootstrap

1月月更|推荐学java——Spring集成MyBatis

前情回顾

到本文,我们已经学习了 框架中的 ,本文介绍如何将两者结合起来在项目中使用,这也是实际开发中常用的操作,必须掌握,下面开始撸码~

集成步骤

第一步:创建数据库、数据表

数据库各位跟随自己爱好建就行,数据表我这里是 ,字段有这几个:

  • 主键,varchar(64)、自动增长、不为null

  • 姓名,varchar(125)

  • 年龄,int

第二步:新建项目,完成基本配置

新建基于 的 Java项目,完成如下配置:

文件中主要是依赖:




    4.0.0

    com.javafirst
    spring-mybatis
    1.0-SNAPSHOT

    
        UTF-8
        1.8
        1.8
    

    
        
            junit
            junit
            4.11
        

        
        
            mysql
            mysql-connector-java
            8.0.25
        

        
        
            org.mybatis
            mybatis
            3.5.7
        

        
        
            org.springframework
            spring-context
            5.3.14
        

        
        
            org.mybatis
            mybatis-spring
            1.3.3
        

        
        
            org.springframework
            spring-tx
            5.3.14
        
        
            org.springframework
            spring-jdbc
            1.2.6
        

        
        
            com.alibaba
            druid
            1.2.8
        
    

    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
        
    

以上配置基本是固定的,用到什么依赖就在这里配置即可。

第三步:创建实体类

这个和我们之前学习过,就是创建和表中字段对应Java实体类对象,代码如下:

package com.javafirst.daomain;

/**
 * desc: 数据表 对应的 实体类
 * 

* author: 推荐学java *

* weChat: studyingJava */ public class Programmer { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Programmer信息:{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }

第四步:创建dao接口和mapper文件

这一步其实还属于 的配置,需要注意的是我这里将接口和对应的 文件没有放在同一个目录(package)下,这里不同会引起MyBatis 配置文件中给JavaBean对象起别名的配置有区别,看个人习惯,我习惯将class和xml分开。

代码如下:

/**
 * desc: MyBatis 对应的 dao 层,操作SQL使用
 * 

* author: 推荐学java *

* weChat: studyingJava */ public interface ProgrammerDao { int addProgrammer(Programmer programmer); List selectAllProgrammer(); }

这个应该不陌生,使我们学习 的时候用到的,这里定义的接口,实际会映射到去执行 Mapper 中的 SQL 语句。

代码如下:






    
        insert into programmer(`name`,age) values (#{name},#{age})
    

    


该类在 目录下的 文件夹下。

第五步:完成MyBatis主配置文件

这个文件的位置在 目录下,名为 ,其代码如下:





    
    
        
    

    
        

        
        
    

    
        
    

第四步中提到的不同之处就在这里的 标签里面的内容了,各位看注释或者看往期文章就明白了。

接下来的操作就和 相关了,可能细心的同学已经有疑惑了,我们的数据源去哪了,也就是连接数据库的配置去哪了?能想到这一点,说明我们对学过的内容记忆的很好,其实,MyBatis 和 Spring 结合使用的时候,数据源是交给 Spring容器来处理的,相对我们单独使用 MyBatis 更简单轻松了,快往下看:

第六步:创建 Service 接口和实现类

定义 接口代码如下:

public interface ProgrammerService {

    int insertProgrammer(Programmer programmer);

    List queryProgrammers();
}

这步操作其实就是我们学习 Spring 的流程,会动态创建 Java 对象,然后通过相关设置方式来赋值。

实现类代码:

/**
 * desc:
 * author: 推荐学java
 * 

* weChat: studyingJava */ public class ProgrammerServiceImpl implements ProgrammerService { private ProgrammerDao programmerDao; public void setProgrammerDao(ProgrammerDao programmerDao) { this.programmerDao = programmerDao; } @Override public int insertProgrammer(Programmer programmer) { return programmerDao.addProgrammer(programmer); } @Override public List queryProgrammers() { return programmerDao.selectAllProgrammer(); } }

这里可以理解为代理对象的作用。

第七步:创建 Spring 的配置文件

这个应该很熟悉了,名为 在 目录下,不同前面我们使用的是,这里的内容有所变化:




    
    

    
    
        
        
        
        
    

    
    
        
        
    

    
    
        

        

        
        
        
    

    
    
        
    

这里其实主要有四小步工作,且这四步基本都是固定模式,我们在理解的基础上把流程记下来就行,后面用就知道为什么这么写了。

为了方便,我这里将数据库相关的配置信息放在了外部文件 中,这和我们前面学习 的时候引用外部配置文件是一样的用法,该文件在 目录下,Spring配置文件中引用就是这里的第一句代码。

文件内容如下:

jdbc.url=jdbc:mysql://localhost:3306/spring_demo
jdbc.username=root
jdbc.password=root

下面说这四小步都代表什么意思:

  • :其实就是和数据库建立链接,这个过程交给了 Spring容器来管理

  • :这个工作的意思就是读取 主配置文件,讲声明的 对象映射到 管理器中。

  • :会扫描给定包下的接口对象,将所有接口执行一次 后得到接口的 dao 对象,将这些对象交给 Spring容器管理。

  • :这是我们自定义的东西,也就是我们自己的业务层。

第八步:测试

到这里其实有两种测试可以进行,一种是测试Dao层是否能访问数据库,并进行相关操作,不经过我们的业务层。

@Test
public void test_addProgrammer() {
    String config = "applicationContext.xml";
    ApplicationContext context = new ClassPathXmlApplicationContext(config);

    ProgrammerDao programmerDao = (ProgrammerDao) context.getBean("programmerDao");

    Programmer programmer = new Programmer();
    programmer.setName("王重阳");
    programmer.setAge(102);

    programmerDao.addProgrammer(programmer);
}

这一步测试不需要我们前面配置中的自定义Service 即可进行。需要注意的是Spring中添加记录,已经不需要我们手动 了。

第二种测试,就是我们 Spring 和 MyBatis 集成后的测试,代码如下:

@Test
public void test_addProgrammer_spring() {
    String config = "applicationContext.xml";
    ApplicationContext context = new ClassPathXmlApplicationContext(config);

    ProgrammerService programmerService = (ProgrammerService) context.getBean("programmerService");

    Programmer programmer = new Programmer();
    programmer.setName("周伯通");
    programmer.setAge(112);

    int row = programmerService.insertProgrammer(programmer);
    System.out.println("插入结果:" + row);
}

结果大家自行验证,看下数据表中这里插入的值:

我们还定义了一个查询功能,测试代码如下:

/**
 * Spring方式 查询记录
 */
@Test
public void test_selectProgrammers_spring() {
    String config = "applicationContext.xml";
    ApplicationContext context = new ClassPathXmlApplicationContext(config);

    ProgrammerService programmerService = (ProgrammerService) context.getBean("programmerService");

    List programmers = programmerService.queryProgrammers();

    System.out.println("查询结果:" + programmers);
}

结果各位自己验证哈,一般前面流程跑通,到这里不会有问题。

最后,再看下我的项目结构:

总结

本文将前面学习的 MyBatis 和 Spring 结合起来使用,掌握其流程和原理很重要,其实思考一下,结合起来反倒简单多了,可能第一次接触的时候,被各种流程性的东西搞的有点懵,但这并不妨碍我们后面的顺利上手。

学编程,推荐首选Java语言,小编创建了一个专注Java的原创公众号,各位可以在微信搜索 关注,一起开启Java旅途!