Spring整合Mybatis

发布时间:2024年01月13日

Spring 整合 mybatis

将 MyBatis与 Spring 进行整合,主要解决的问题就是将 SqlSessionFactory 对象交由 Spring来管理。所以,该整合,只需要将 SqlSessionFactory 的对象生成器 SqlSessionFactoryBean 注册在 Spring 容器中,再将其注入给 Dao 的实现类即可完成整合

实现 Spring 与 MyBatis 的整合常用的方式:扫描的 Mapper 动态代理

建立数据库表

pom.xml

添加相关依赖:

?
<dependencies>
? ? ?<dependency>
? ? ? ? ?<groupId>junit</groupId>
? ? ? ? ?<artifactId>junit</artifactId>
? ? ? ? ?<version>4.13.2</version>
? ? ?</dependency>
??
? ? ?<dependency>
? ? ? ? ?<groupId>mysql</groupId>
? ? ? ? ?<artifactId>mysql-connector-java</artifactId>
? ? ? ? ?<version>8.0.28</version>
? ? ?</dependency>
??
? ? ?<dependency>
? ? ? ? ?<groupId>org.mybatis</groupId>
? ? ? ? ?<artifactId>mybatis</artifactId>
? ? ? ? ?<version>3.5.9</version>
? ? ?</dependency>
??
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ?<artifactId>spring-core</artifactId>
? ? ? ? ?<version>5.3.18</version>
? ? ?</dependency>
??
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ?<artifactId>spring-beans</artifactId>
? ? ? ? ?<version>5.3.18</version>
? ? ?</dependency>
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ?<artifactId>spring-context</artifactId>
? ? ? ? ?<version>5.3.18</version>
? ? ?</dependency>
??
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ?<artifactId>spring-jdbc</artifactId>
? ? ? ? ?<version>5.3.18</version>
? ? ?</dependency>??
??
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework</groupId>
? ? ? ? ?<artifactId>spring-tx</artifactId>
? ? ? ? ?<version>5.3.18</version>
? ? ?</dependency>
?? ?
? ? ?<dependency>
? ? ? ? ?<groupId>org.mybatis</groupId>
? ? ? ? ?<artifactId>mybatis-spring</artifactId>
? ? ? ? ?<version>2.0.6</version>
? ? ?</dependency>
? ? ?
? ? ?<dependency>
? ? ? ? ?<groupId>com.alibaba</groupId>
? ? ? ? ?<artifactId>druid</artifactId>
? ? ? ? ?<version>1.2.8</version>
? ? ?</dependency>
? ? ?
? ? ? ? <!-- 日志 采用log4j2 -->
? ? ? ?<dependency>
? ? ? ? ? ? ?<groupId>org.apache.logging.log4j</groupId>
? ? ? ? ? ? ?<artifactId>log4j-api</artifactId>
? ? ? ? ? ? ?<version>2.17.1</version>
? ? ? ? ?</dependency>
? ? ? ? ?<dependency>
? ? ? ? ? ? ?<groupId>org.apache.logging.log4j</groupId>
? ? ? ? ? ? ?<artifactId>log4j-core</artifactId>
? ? ? ? ? ? ?<version>2.17.1</version>
? ? ? ? ?</dependency>
?</dependencies>
??
??
?

创建实体类

?package entity;
??
?public class Dept {
? ? ?private int id;
? ? ?private String name;
? ? ?//省略 get/set  构造方法
? }

创建mapper

?package mapper;
??
?import entity.Dept;
??
?import java.util.List;
?public interface DeptMapper {
??
? ? ?/**
? ? ? * 查询 所有 的部门信息
? ? ? * @return  部门的集合
? ? ? */
? ? ?List<Dept> findAll();
? ? ?
?}
?<?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="mapper.DeptMapper">
? ? ?
? ? ?<select id="findAll" resultType="Dept" >
? ? ? ?  select * from dept
? ? ?</select>
??
?</mapper>

service

?package service.impl;
??
?import entity.Dept;
?import mapper.DeptMapper;
?import org.springframework.beans.factory.annotation.Autowired;
?import org.springframework.stereotype.Service;
?import service.DeptService;
??
?import java.util.List;
??
?@Service
?public class DeptServiceImpl implements DeptService {
? ? ?@Autowired
? ? ?private DeptMapper mapper;
??
? ? ?public List<Dept> findAll() {
? ? ? ? ?return mapper.findAll();
? ?  }
?}
??
??
??
??
?package service;
??
?import entity.Dept;
?import java.util.List;
??
??
?public interface DeptService {
? ? ?List<Dept> findAll();
?}
??
数据库配置文件
?jdbc.url=jdbc:mysql://localhost:3306/jdbc02
?jdbc.username=root
?jdbc.password=root
?jdbc.driver=com.mysql.cj.jdbc.Driver

日志文件 ---log4j2.properties

?status = info
?name = PropertiesConfig
??
?appenders = console
??
?appender.console.type = Console
?appender.console.name = STDOUT
?appender.console.layout.type = PatternLayout
?appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
??
?rootLogger.level = debug
?rootLogger.appenderRefs = stdout
?rootLogger.appenderRef.stdout.ref = STDOUT

spring 配置文件

在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。

?<?xml version="1.0" encoding="UTF-8"?>
?<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? xmlns:context="http://www.springframework.org/schema/context"
? ? ? ? xmlns:aop="http://www.springframework.org/schema/aop"
? ? ? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ? ? ? ? ? ? ? ? ? ? ? http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
? ? ? ? ? ? ? ? ? ? ? ? ? ? http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
??
??
? ? ?<context:component-scan base-package="service"/>
??
? ? ?<!--利用 cotext 命名空间 引入 数据库 配置文件 db.properties-->
? ? ?<context:property-placeholder location="db.properties"/>
??
? ? ?<!-- 配置 数据源 -->
? ? ?<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
? ? ? ? ? <property name="username" value="${jdbc.username}"/>
? ? ? ? ? <property name="password" value="${jdbc.password}" />
? ? ? ? ?<property name="url" value="${jdbc.url}"/>
? ? ? ? ?<property name="driverClassName" value="${jdbc.driver}"/>
? ? ?</bean>
??
??
? ? <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
? ? ? ? ? <property name="dataSource" ref="ds"/>
? ? ? ? ? <property name="typeAliasesPackage" value="entity"/>
? ? ? ? ? <property name="mapperLocations" value="classpath:mapper/*.xml"/>
? ? ? ? ? ?<property name="configuration">
? ? ? ? ? ? ? ?<bean class="org.apache.ibatis.session.Configuration">
? ? ? ? ? ? ? ? ? ?<!-- log4j -->
? ? ? ? ? ? ? ? ? ? <!--<property name="logImpl" value="org.apache.ibatis.logging.log4j.Log4jImpl"/> -->
? ? ? ? ? ? ? ? ? ? ?<!-- log4j2 -->
? ? ? ? ? ? ? ? ? ?<!-- <property name="logImpl" value="org.apache.ibatis.logging.log4j2.Log4j2Impl"/>-->
? ? ? ? ? ? ? ? ? ?<!-- 控制台 -->
? ? ? ? ? ? ? ? ? ?<property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
? ? ? ? ? ? ? ?</bean>
? ? ? ? ? ?</property>
? ? ? ? ?<!--加载 mybatis 配置-->
? ? ? ? ? <!--<property name="configLocation" value="classpath:mybatis-config.xml"/>-->
? ? ? </bean>
??
? ? ?<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
? ? ? ? ?<property name="basePackage" value="mapper" />
? ? ? ? ? <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
? ? ?</bean>
?</beans>

测试类

?import entity.Dept;
?import org.junit.Test;
?import org.springframework.context.ApplicationContext;
?import org.springframework.context.support.ClassPathXmlApplicationContext;
?import service.DeptService;
?import service.impl.DeptServiceImpl;
??
?import java.util.List;
??
?public class TestA {
??
? ? ?@Test
? ? ?public void test1(){
? ? ? ? ?ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
? ? ? ? ?DeptService service = ac.getBean("deptServiceImpl", DeptServiceImpl.class);
? ? ? ? ?List<Dept> list = service.findAll();
? ? ? ? ?for(Dept de:list){
? ? ? ? ? ? ?System.out.println(de.getId()+"----"+de.getName());
? ? ? ?  }
??
? ?  }
??
?}

文章来源:https://blog.csdn.net/ly121862/article/details/135552657
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。