Java:Spring6整合MyBatis

一、基于XML整合

1、引入依赖

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

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>6.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>6.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.13</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.32</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.26</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>6.0.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.annotation</groupId>
      <artifactId>jakarta.annotation-api</artifactId>
      <version>2.1.1</version>
    </dependency>
  </dependencies>

2、pojo类

package com.islunatic.pojo;
import lombok.Data;
@Data
public class Bank {
    private int id;
    private String name;
    private int money;
}

3、mapper接口

package com.islunatic.mapper;

import com.islunatic.pojo.Bank;
import java.util.List;
public interface BankMapper {
    Bank selectById(Integer id);
    void insert(Bank bank);
    void delete(Integer id);
    void update(Bank bank);

    List<Bank> select();
}

 4、mapper配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.islunatic.mapper.BankMapper">

    <select id="selectById" resultType="Bank">
        select * from bank where id = #{id}
    </select>
    <select id="select" resultType="Bank">
        select * from bank
    </select>

    <insert id="insert" parameterType="Bank">
        insert into bank(name,money) values (#{name},#{money})
    </insert>

    <delete id="delete">
        delete from bank where id=#{id}
    </delete>

    <update id="update">
        update bank set name = #{name} where id = #{id}
    </update>
</mapper>

5、service接口service实现类

service接口

package com.islunatic.service;

import com.islunatic.pojo.Bank;

import java.util.List;

public interface BankService {
    Bank selectById(Integer id);
    void insert(Bank bank);
    void delete(Integer id);
    void update(Bank bank);
    List<Bank> select();
}

service实现类

package com.islunatic.service.impl;

import com.islunatic.mapper.BankMapper;
import com.islunatic.pojo.Bank;
import com.islunatic.service.BankService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
@Transactional
@Service("bankService")
public class BankServiceImpl implements BankService {
    @Resource
    private BankMapper bankMapper;
    @Override
    public Bank selectById(Integer id) {
       return bankMapper.selectById(id);
    }

    @Override
    public void insert(Bank bank) {
        bankMapper.insert(bank);
    }
    @Override
    public void delete(Integer id) {
        bankMapper.delete(id);
    }

    @Override
    public void update(Bank bank) {
        bankMapper.update(bank);
    }

    @Override
    public List<Bank> select() {
        return bankMapper.select();
    }
}

6、数据库db.properties配置

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

7、mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

8、applicationContext.xml配置文件

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    <context:annotation-config/>
    <context:component-scan base-package="com.islunatic.service"/>
    <!--  读取db.properties  -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--  数据源  -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <!--  数据库驱动   -->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <!--  数据库连接地址   -->
        <property name="url" value="${jdbc.url}"/>
        <!--  数据库连接的用户名   -->
        <property name="username" value="${jdbc.username}"/>
        <!--  数据库连接的密码  -->
        <property name="password" value="${jdbc.password}"/>
        <!--  最大连接数  -->
        <property name="maxTotal" value="${jdbc.maxTotal}"/>
        <!--  最大空闲数  -->
        <property name="maxIdle" value="${jdbc.maxIdle}"/>
        <!--  初始化连接数  -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
    </bean>
    <!--  事务管理器  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--  注解方式配置事务 - 将使用@Transaction注解标识的方法或类中所有的方法进行事务管理-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!--  配置mybatis工厂,可以在Spring的IoC容器中获取SqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--    设置数据源    -->
        <property name="dataSource" ref="dataSource"/>
        <!--    设置Mybatis的核心配置文件路径    -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--    设置类型别名所对应的包    -->
        <property name="typeAliasesPackage" value="com.islunatic.pojo"/>
    </bean>
    <!-- 配置加载Mapper代理 -->
    <!--  MapperScannerConfigurer可以将指定的包下所有的mapper接口通过SqlSessionFactoryBean来创建mapper接口的代理实现类对象,交给IoC容器管理  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--  扫描mapper所在的包  -->
        <property name="basePackage" value="com.islunatic.mapper"/>
    </bean>
</beans>

9、测试类

package com.islunatic.test;

import com.islunatic.config.Spring6Config;
import com.islunatic.pojo.Bank;
import com.islunatic.service.BankService;
import com.islunatic.service.impl.BankServiceImpl;
import jakarta.annotation.Resource;
import org.junit.After;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSM {
    @Test
    public void testSpringMybatis(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        BankService bankService = applicationContext.getBean("bankService", BankService.class);
        System.out.println(bankService.select());
    }
}

二、基于注解整合

First Annotation

创建SpringConfig类

package com.islunatic.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration//代替applicationContext.xml注解
@ComponentScan("com.islunatic")
@EnableTransactionManagement
public class Spring6Config {
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/ssm");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }
    @Bean()
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

 测试类

package com.islunatic.test;

import com.islunatic.config.Spring6Config;
import com.islunatic.pojo.Bank;
import com.islunatic.service.BankService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSM {
    @Test
    public void testConfig(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Spring6Config.class);
        BankService bankService = applicationContext.getBean("bankService", BankService.class);
        Bank bank = bankService.selectById(1);
        System.out.println(bank);
    }
}

Second Annotation

SpringConfig配置类

@Configuration
@ComponentScan("com.islunatic.service")
@PropertySource("classpath:db.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}

Spring整合Mybatis的配置类

public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.islunatic.pojo");
        return sqlSessionFactoryBean;
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.islunatic.mapper");
        return msc;
    }
}

JdbcConfig配置类:使用Druid数据源和事务

package com.islunatic.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public DataSource dataSource(){
        DruidDataSource datasource = new DruidDataSource();
        datasource.setDriverClassName(driver);
        datasource.setUrl(url);
        datasource.setUsername(username);
        datasource.setPassword(password);
        return datasource;
    }
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

数据库信息:db.properties

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IsLuNaTiC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值