【Spring6】| Spring6集成MyBatis3.5

目录

一:Spring6集成MyBatis3.5

第一步:准备数据库表

第二步:IDEA中创建一个模块,并引入依赖

第三步:基于三层架构实现,所以提前创建好所有的包

第四步:编写pojo

第五步:编写mapper接口

第六步:编写mapper配置文件

第七步:编写service接口和service接口实现类

第八步:编写jdbc.properties配置文件

第九步:编写mybatis-config.xml配置文件

第十步:编写spring.xml配置文件

第十一步:编写测试程序,并添加事务,进行测试 

补充: Spring配置文件的import


一:Spring6集成MyBatis3.5

第一步:准备数据库表

  • 使用t_act表(账户表)

 

第二步:IDEA中创建一个模块,并引入依赖

  • spring-context
  • spring-jdbc
  • mysql驱动
  • mybatis
  • mybatis-spring:mybatis提供的与spring框架集成的依赖
  • 德鲁伊连接池
  • junit


    4.0.0

    com.bjpowernode
    spring6-015-sm
    1.0-SNAPSHOT
    jar

    
    
        
        
            repository.spring.milestone
            Spring Milestone Repository
            https://repo.spring.io/milestone
        
    

    
        
        
            org.springframework
            spring-context
            6.0.0-M2
        
        
        
            org.springframework
            spring-jdbc
            6.0.0-M2
        
        
        
            mysql
            mysql-connector-java
            8.0.30
        
        
        
            org.mybatis
            mybatis
            3.5.10
        
        
        
            org.mybatis
            mybatis-spring
            1.3.1
        
        
        
            com.alibaba
            druid
            1.2.13
        
        
        
            junit
            junit
            4.13.2
            test
        
    

    
        17
        17
    

第三步:基于三层架构实现,所以提前创建好所有的包

  • com.powernode.bank.mapper
  • com.powernode.bank.service
  • com.powernode.bank.service.impl
  • com.powernode.bank.pojo

【Spring6】| Spring6集成MyBatis3.5_第1张图片

第四步:编写pojo

  • Account,属性私有化,提供公开的setter getter和toString。
package com.powernode.bank.pojo;

public class Account {
    private String actno;
    private Double balance;

    public Account() {
    }

    public Account(String actno, Double balance) {
        this.actno = actno;
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "Account{" +
                "actno='" + actno + '\'' +
                ", balance=" + balance +
                '}';
    }

    public String getActno() {
        return actno;
    }

    public void setActno(String actno) {
        this.actno = actno;
    }

    public Double getBalance() {
        return balance;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }
}

第五步:编写mapper接口

AccountMapper接口,定义方法

package com.powernode.bank.mapper;

import com.powernode.bank.pojo.Account;

import java.util.List;

// 连接接口的实现类不需要写,采用Mybatis动态代理机制生成实现类
public interface AccountMapper {
    // 增
    int insert(Account account);
    // 删
    int deleteByActno(String actno);
    // 改
    int update(Account account);
    // 查一个
    Account selectByActno(String actno);
    // 查所有
    List selectAll();

}

第六步:编写mapper配置文件

在配置文件中配置命名空间,以及每一个方法对应的sql。

注意1:按照下图提示创建这个目录,注意是斜杠不是点儿;在resources目录下新建,并且要和Mapper接口包对应上。

【Spring6】| Spring6集成MyBatis3.5_第2张图片

注意2:如果接口叫做AccountMapper,配置文件必须是AccountMapper.xml;并且命名空间namespace的名字必须是接口AccountMapper的全限定名字




    
        insert into t_act values(#{actno}, #{balance})
    
    
        delete from t_act where actno = #{actno}
    
    
        update t_act set balance = #{balance} where actno = #{actno}
    
    
    

第七步:编写service接口和service接口实现类

AccountService接口类

package com.powernode.bank.service;

import com.powernode.bank.pojo.Account;

import java.util.List;

public interface AccountService {
    // 开户
    int save(Account act);
    // 根据账号销户
    int deleteByActno(String actno);
    // 修改账户
    int update(Account act);
    // 根据账号获取账户
    Account getByActno(String actno);
    // 获取所有账户
    List getAll();
    // 转账
    void transfer(String fromActno, String toActno, double money);
}

AccountServiceImpl实现类,注入AccountMapper、并纳入Spring容器管理

package com.powernode.bank.service.impl;

import com.powernode.bank.mapper.AccountMapper;
import com.powernode.bank.pojo.Account;
import com.powernode.bank.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional // 添加事务管理
@Service("accountService") // 纳入Spring容器管理
public class AccountServiceImpl implements AccountService {

    @Autowired// 注入AccountMapper
    private AccountMapper accountMapper;

    @Override
    public int save(Account act) {
        return accountMapper.insert(act);
    }

    @Override
    public int deleteByActno(String actno) {
        return accountMapper.deleteByActno(actno);
    }

    @Override
    public int update(Account act) {
        return accountMapper.update(act);
    }

    @Override
    public Account getByActno(String actno) {
        return accountMapper.selectByActno(actno);
    }

    @Override
    public List getAll() {
        return accountMapper.selectAll();
    }

    @Override
    public void transfer(String fromActno, String toActno, double money) {
        // 先查询第一个账户的余额
        Account fromAccount = accountMapper.selectByActno(fromActno);
        if (fromAccount.getBalance() < money){
            throw new RuntimeException("余额不足!");
        }
        // 余额充足
        Account toAccount = accountMapper.selectByActno(toActno);
        // 修改内存中的余额
        fromAccount.setBalance(fromAccount.getBalance()-money);
        toAccount.setBalance(toAccount.getBalance()+money);
        // 修改数据库中的数据
        int count = accountMapper.update(fromAccount);
        count += accountMapper.update(toAccount);
        // 判断转账是否成功
        if (count != 2) {
            throw new RuntimeException("转账失败!");
        }


    }
}

第八步:编写jdbc.properties配置文件

数据库连接池相关信息

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
jdbc.username=root
jdbc.password=123

第九步:编写mybatis-config.xml配置文件

该文件可以没有,大部分的配置可以转移到spring配置文件中!

如果遇到mybatis相关的系统级配置,还是需要这个文件,这里就只配置日志信息!




    
    
        
    

第十步:编写spring.xml配置文件

  • 组件扫描
  • 引入外部的属性文件
  • 数据源
  • SqlSessionFactoryBean配置
    • 注入mybatis核心配置文件路径
    • 注入数据源
    • 指定别名包
  • Mapper扫描配置器
    • 指定扫描的包
  • 事务管理器DataSourceTransactionManager
    • 注入数据源
  • 启用事务注解
    • 注入事务管理器

注意:当你在spring.xml文件中直接写标签内容时,IDEA会自动给你添加命名空间




    
    

    
    

    
    
        
        
        
        
    

    
    
        
        
        
        
        
        
    

    
    
        
    

    
    
        
    

    
    

第十一步:编写测试程序,并添加事务,进行测试 

package com.powernode.bank.test;

import com.powernode.bank.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SMTest {
    @Test
    public void testSM(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        AccountService accountService = applicationContext.getBean("accountService", AccountService.class);
        try {
            accountService.transfer("act-001","act-002",1000);
            System.out.println("转账成功");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

补充: Spring配置文件的import

spring配置文件有多个,并且可以在spring的核心配置文件中使用import进行引入,我们可以将组件扫描单独定义到一个配置文件中,如下:

common.xml:单独写一个配置文件,里面定义组件扫描的信息




    
    

在核心配置文件spring.xm中引入:




    
    

注意:在实际开发中,service单独配置到一个文件中,dao单独配置到一个文件中,然后在核心配置文件中引入,养成好习惯!

你可能感兴趣的:(第四步:SSM框架,Spring6,Mybatis,SSM框架)