Spring 14: Spring + MyBatis初步整合开发


SM整合步骤

预期项目结构

新建数据库和数据表

  • springuser.sql脚本如下
create database ssm;

use ssm;

create table users(
  userid int primary key,
  uname varchar(20),
  upass varchar(20)
);

create table accounts(
 aid  int primary key,
 aname varchar(20),
 acontent varchar(50)
);

新建项目

  • 新建maven项目
  • 选择quickstart模板
  • 修改项目目录,删除自动生成的类和对应测试类

修改pom.xml文件

  • 添加相关依赖
<?xml version="1.0" encoding="UTF-8"?>


  4.0.0

  com.example
  ch09-spring-sm
  1.0.0

  
    UTF-8
    1.8
    1.8
  

  
    
    
      junit
      junit
      4.13.2
      test
    

    
    
      org.springframework
      spring-context
      5.3.22
    

    
    
      org.springframework
      spring-aspects
      5.3.22
    

    
    
      org.springframework
      spring-tx
      5.3.22
    

    
    
      org.springframework
      spring-jdbc
      5.3.22
    

    
    
      org.mybatis
      mybatis
      3.5.10
    

    
    
      mysql
      mysql-connector-java
      8.0.30
    

    
    
      org.mybatis
      mybatis-spring
      2.0.7
    

    
    
      com.alibaba
      druid
      1.2.11
    
  

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

添加模板文件

分别添加MyBatis相应配置文件的模板(SqlMapConfig.xml和XXXXMapper.xml文件,方便以后使用)

  • 如何添加模板文件

  • SqlMapConfig.xml模板配置文件
<?xml version="1.0" encoding="UTF-8" ?> 


    
    
    
        
    
    
    
        
    
    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

  • XXXXMapper.xml模板配置文件
<?xml version="1.0" encoding="UTF-8" ?> 



jdbc.properties

  • 添加jdbc.properties文件至src/main/resources目录下
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://自己的服务器ip或localhost:3306/要连接的数据库名称?useUnicode=true&characterEncoding=utf8
jdbc.username=XXXX
jdbc.password=YYYY

SqlMapConfig.xml

  • 添加SqlMapConfig.xml文件至src/main/resources目录下:选择我们自己添加的模板文件(该状态下idea无法电脑截图,手机拍摄,包涵包涵)

Spring核心配置文件

  • 由于分层开发,需要添加两个配置文件:applicationContext_mapper.xml和applicationContext_service.xml。添加操作见下

  • applicationContext_mapper.xml
<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    
        
        
        
        
    

    
    
        
        
        
        
        
        
    

    
    
        
    

  • applicationContext_service.xml
<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    

    
    

添加实体类

  • 依据users数据表的字段,创建User实体类
package com.example.pojo;

public class User {
    private Integer userid;
    private String uname;
    private String upass;

    @Override
    public String toString() {
        return "User{" +
                "userid=" + userid +
                ", uname='" + uname + '\'' +
                ", upass='" + upass + '\'' +
                '}';
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpass() {
        return upass;
    }

    public void setUpass(String upass) {
        this.upass = upass;
    }

    public User(String uname, String upass) {
        this.uname = uname;
        this.upass = upass;
    }

    public User(Integer userid, String uname, String upass) {
        this.userid = userid;
        this.uname = uname;
        this.upass = upass;
    }

    public User() {
    }
}

数据访问层

  • 添加UserMapper接口
package com.example.mapper;


import com.example.pojo.User;

/**
 * 数据访问层的接口
 */
public interface UserMapper {
    int insert(User user);
}
  • 添加UserMapper.xml,先选择我们自己添加的XXXMapper.xml模板文件,再进一步配置该文件
<?xml version="1.0" encoding="UTF-8" ?> 


    
    
        insert into users values (#{userid}, #{uname}, #{upass})
    

业务逻辑层

  • 添加UserService接口
package com.example.service;

import com.example.pojo.User;

/**
 * 业务逻辑层接口
 */
public interface UserService {
    int insert(User user);
}
  • 添加UserServiceImpl实现类
package com.example.service.impl;

import com.example.mapper.UserMapper;
import com.example.pojo.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 业务实现类
 */
@Service
public class UserServiceImpl implements UserService {
    //业务逻辑层实现类持有数据访问层的接口类型的变量
    @Autowired
    UserMapper userMapper;

    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }
}

测试

package com.example.test;

import com.example.pojo.User;
import com.example.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUserInsert {

    //测试用户信息导入
    @Test
    public void testUserInsert(){
        //创建Spring容器并启动
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_service.xml");
        //获取业务逻辑实现类的对象
        UserService userService = (UserService) ac.getBean("userServiceImpl");
        //调用业务功能
        int num = userService.insert(new User(1, "王小涵", "hanzhanghan"));
        if(num == 1){
            System.out.println("用户信息导入成功!");
        }else{
            System.out.println("用户信息导入失败!");
        }
    }
}

测试输出

  • 控制台输出
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475835b1] was not registered for synchronization because synchronization is not active
Aug 28, 2022 10:31:31 AM com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
INFO: {dataSource-1} inited
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d4d8fcf] will not be managed by Spring
==>  Preparing: insert into users values (?, ?, ?)
==> Parameters: 1(Integer), 王小涵(String), hanzhanghan(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475835b1]
用户信息导入成功!

Process finished with exit code 0
  • 数据表变化