【Spring学习笔记 八】Spring整合MyBatis实现方式(下)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Spring学习笔记 八】Spring整合MyBatis实现方式(下)

Spring的实现回顾

当然我们还需要配置相关Spring的内容,例如我们通过Service来控制Dao层的实现,并且在调用方法前后增加切面控制增加访问日志:

1 创建Service层

创建PersonService及其实现类

PersonService

package com.example.spring_mybatis.service;
import com.example.spring_mybatis.model.Person;
import java.util.List;
public interface PersonService {
    List<Person> getPersonList();
}

PersonService

package com.example.spring_mybatis.serviceImpl;
import com.example.spring_mybatis.daoImpl.PersonDaoImpl;
import com.example.spring_mybatis.model.Person;
import com.example.spring_mybatis.service.PersonService;
import lombok.Data;
import java.util.List;
@Data
public class PersonServiceImpl implements PersonService {
    private PersonDaoImpl personDaoImpl;
    @Override
    public List<Person> getPersonList() {
        return personDaoImpl.getPersonList();
    }
}

2 创建Dao层

Dao层的接口我们已经在MyBatis部分实现了,接下来只要编写其实现类即可:

package com.example.spring_mybatis.daoImpl;
import com.example.spring_mybatis.dao.PersonDao;
import com.example.spring_mybatis.model.Person;
import java.util.List;
public class PersonDaoImpl implements PersonDao {
    @Override
    public List<Person> getPersonList() {
        return null;
    }
}

这里我们先不编写其实现,这里的实现其实就是我们今天的主题。

3 增加AOP类

增加Aop类关于日志的,扫描service包,给这个包里的方法前后都加日志:

package com.example.spring_mybatis.aop;
import java.time.LocalDateTime;
/**
 * * @Name LogProxy
 * * @Description
 * * @author tianmaolin
 * * @Data 2021/8/24
 */
public class LogAop  {
    public void beforeLog()  {
        System.out.println("日志记录开始"+ LocalDateTime.now());
    }
    public void afterLog()  {
        System.out.println("日志记录结束"+ LocalDateTime.now().plusMinutes(5));
    }
}

4 applicationContext.xml配置文件编写

我们先编写目前用到的一些配置,包括Service对Dao的调用:

<?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/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用aop注解 -->
    <aop:aspectj-autoproxy/>
    <!-- 定义目标对象:定义被代理者 -->
    <bean id="personServiceImpl" class="com.example.spring_mybatis.serviceImpl.PersonServiceImpl">
        <property name="personDaoImpl" ref="personDaoImpl"/>
    </bean>
    <bean id="personDaoImpl" class="com.example.spring_mybatis.daoImpl.PersonDaoImpl">
    </bean>
    <!-- 定义切面,切面内包含通知要执行的方法-->
    <bean id="logAop" class="com.example.spring_mybatis.aop.LogAop"></bean>
    <!--aop的配置-->
    <aop:config proxy-target-class="true">
        <!--切面配置-->
        <aop:aspect ref="logAop">
            <!--切点-->
            <aop:pointcut id="logPointCut" expression="execution(* com.example.spring_mybatis.service..*.*(..))"/>
            <!--切点-通知-->
            <aop:before pointcut-ref="logPointCut" method="beforeLog"/>
            <aop:after pointcut-ref="logPointCut" method="afterLog"/>
        </aop:aspect>
    </aop:config>
</beans>

Spring整合MyBatis

Spring整合用到一个依赖,也就是我们上述坐标中的,其官方文档介绍:mybatis-spring

<!-- Mybatis-Spring相关 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

什么是 MyBatis-Spring?MyBatis-Spring 会帮助我们将 MyBatis 代码无缝地整合到 Spring 中。Spring整合MyBatis, 主要目的就是把MyBatis核心配置文件及Mapper文件中的内容交给Spring来处理,通俗的说,就是Spring把SqlSession的创建以及Mapper对象的创建都代理了,事实上就是我们不用再编写相关的配置文件以及配置文件读取类了,也就是我们上述的8个步骤中4-6步都不用做了,Spring完全代工。

1 SqlSession注入实现

那么首先来看第一种方式,我们通过这种方式可以干掉mybatis-config.xml,完全通过Spring来实现.

1-1 调整配置文件applicationContext.xml

由Spring来构建SqlSession,同时MybatisUtil也不需要了,SqlSession的构建完全交给Spring来实现,调整后配置如下:

<?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/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用aop注解 -->
    <aop:aspectj-autoproxy/>
    <!-- 定义目标对象:定义被代理者 -->
    <bean id="personServiceImpl" class="com.example.spring_mybatis.serviceImpl.PersonServiceImpl">
        <property name="personDaoImpl" ref="personDaoImpl"/>
    </bean>
    <bean id="personDaoImpl" class="com.example.spring_mybatis.daoImpl.PersonDaoImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
    <!--DataSource: 使用Spring的数据源替换Mybatis的配置, 可以使用c3p0,dbcp,druid,或者spring提供的jdbc-->
    <!-- 加载数据库配置信息 -->
    <context:property-placeholder location="properties/db.properties" system-properties-mode="NEVER"/>
    <!-- 连接池对象 -->
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>
    <!--配置日志输出-->
    <bean id="configuration" class="org.apache.ibatis.session.Configuration">
        <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
    </bean>
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <!--关联Mybatis-->
        <!--<property name="configLocation" value="mybatis-config.xml"/>-->
        <property name="mapperLocations" value="mappers/*.xml"/>
        <property name="configuration" ref="configuration"/>
    </bean>
    <!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--只能通过构造器注入sqlSessionFactory,因为没有set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    <!-- 加载日志配置信息 -->
    <context:property-placeholder location="log4j.properties" system-properties-mode="NEVER"/>
    <!-- 定义切面,切面内包含通知要执行的方法-->
    <bean id="logAop" class="com.example.spring_mybatis.aop.LogAop"></bean>
    <!--aop的配置-->
    <aop:config proxy-target-class="true">
        <!--切面配置-->
        <aop:aspect ref="logAop">
            <!--切点-->
            <aop:pointcut id="logPointCut" expression="execution(* com.example.spring_mybatis.service..*.*(..))"/>
            <!--切点-通知-->
            <aop:before pointcut-ref="logPointCut" method="beforeLog"/>
            <aop:after pointcut-ref="logPointCut" method="afterLog"/>
        </aop:aspect>
    </aop:config>
</beans>

上述配置中我们用到了这几个概念:

  • 在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory ,而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建
  • SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替代码中已经在使用的 SqlSession

也就是原生Mybatis的SqlSession获取过程被Spring给接管了。

1-2 调整PersonDaoImpl类实现

由上边的配置我们发现,SqlSession被构建好后注入到了PersonDaoImpl中,这样实现类就可以打开一个session并执行相关逻辑了,然后具体的实现使用SqlSession通过personMapper.xml配置文件去构建代理对象然后调用方法实现。

package com.example.spring_mybatis.daoImpl;
import com.example.spring_mybatis.dao.PersonDao;
import com.example.spring_mybatis.model.Person;
import lombok.Data;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
@Data
public class PersonDaoImpl implements PersonDao {
    private SqlSessionTemplate sqlSession;
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    @Override
    public List<Person> getPersonList() {
        return  sqlSession.getMapper(PersonDao.class).getPersonList();
    }
}

1-3 测试实现方式

最后我们来编写个单元测试类来测试下实现过程:

import com.example.spring_mybatis.service.PersonService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonServiceTest {
    @Test
    public void getPersonListTest(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        PersonService personService = (PersonService) applicationContext.getBean("personServiceImpl");
        personService.getPersonList();
    }
}

打印结果如下:

2 SqlSessionFactory注入实现

让Dao继承Support类 , 直接利用 getSqlSession()获得SqlSessionTemplate , 然后直接注入SqlSessionFactory . 比起方式1 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好

再向下追溯,可以发现SqlSessionTemplate有属性sqlSessionFactory,所以按照依赖链正常注入使用:

2-1 调整配置文件applicationContext.xml

我们调整配置文件,让SqlSessionFactory直接注入到PersonDaoImpl,不再使用中间的SqlSessionTemplate作为媒介:

<?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/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用aop注解 -->
    <aop:aspectj-autoproxy/>
    <!-- 定义目标对象:定义被代理者 -->
    <bean id="personServiceImpl" class="com.example.spring_mybatis.serviceImpl.PersonServiceImpl">
        <property name="personDaoImpl" ref="personDaoImpl"/>
    </bean>
    <bean id="personDaoImpl" class="com.example.spring_mybatis.daoImpl.PersonDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    <!--DataSource: 使用Spring的数据源替换Mybatis的配置, 可以使用c3p0,dbcp,druid,或者spring提供的jdbc-->
    <!-- 加载数据库配置信息 -->
    <context:property-placeholder location="properties/db.properties" system-properties-mode="NEVER"/>
    <!-- 连接池对象 -->
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>
    <!--配置日志输出-->
    <bean id="configuration" class="org.apache.ibatis.session.Configuration">
        <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
    </bean>
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <!--关联Mybatis-->
        <!--<property name="configLocation" value="mybatis-config.xml"/>-->
        <property name="mapperLocations" value="mappers/*.xml"/>
        <property name="configuration" ref="configuration"/>
    </bean>
    <!-- 加载日志配置信息 -->
    <context:property-placeholder location="log4j.properties" system-properties-mode="NEVER"/>
    <!-- 定义切面,切面内包含通知要执行的方法-->
    <bean id="logAop" class="com.example.spring_mybatis.aop.LogAop"></bean>
    <!--aop的配置-->
    <aop:config proxy-target-class="true">
        <!--切面配置-->
        <aop:aspect ref="logAop">
            <!--切点-->
            <aop:pointcut id="logPointCut" expression="execution(* com.example.spring_mybatis.service..*.*(..))"/>
            <!--切点-通知-->
            <aop:before pointcut-ref="logPointCut" method="beforeLog"/>
            <aop:after pointcut-ref="logPointCut" method="afterLog"/>
        </aop:aspect>
    </aop:config>
</beans>

2-2 调整PersonDaoImpl类实现

当然相应的也要调整PersonDaoImpl类的实现方式:

package com.example.spring_mybatis.daoImpl;
import com.example.spring_mybatis.dao.PersonDao;
import com.example.spring_mybatis.model.Person;
import lombok.Data;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
@Data
public class PersonDaoImpl extends SqlSessionDaoSupport implements PersonDao {
    @Override
    public List<Person> getPersonList() {
        return  getSqlSession().getMapper(PersonDao.class).getPersonList();
    }
}

2-3 测试实现方式

测试类还使用之前的:

import com.example.spring_mybatis.service.PersonService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonServiceTest {
    @Test
    public void getPersonListTest(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        PersonService personService = (PersonService) applicationContext.getBean("personServiceImpl");
        personService.getPersonList();
    }
}

可以看到打印结果同上:

3 Mapper对象自动扫描注入实现

前两种的整合实现方式都创建了Dao接口的实现类,通过SqlSession来获取mapper对象。使用第三种方式我们可以告诉Spring让其帮我们自动创建mapper的代理对象,也就是我们不再需要PersonDaoImpl了,它也由Spring代为生成:

3-1 调整配置文件applicationContext.xml

我们调整配置文件,干掉personDaoImpl的相关配置,直接使用映射类生成器生成:

<?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/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用aop注解 -->
    <aop:aspectj-autoproxy/>
    <!-- 定义目标对象:定义被代理者 -->
    <bean id="personServiceImpl" class="com.example.spring_mybatis.serviceImpl.PersonServiceImpl">
        <property name="userMapper" ref="userMapper"/>
    </bean>
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <!--给哪个接口创建代理对象-->
        <property name="mapperInterface" value="com.example.spring_mybatis.dao.PersonDao"/>
    </bean>
    <!--DataSource: 使用Spring的数据源替换Mybatis的配置, 可以使用c3p0,dbcp,druid,或者spring提供的jdbc-->
    <!-- 加载数据库配置信息 -->
    <context:property-placeholder location="properties/db.properties" system-properties-mode="NEVER"/>
    <!-- 连接池对象 -->
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>
    <!--配置日志输出-->
    <bean id="configuration" class="org.apache.ibatis.session.Configuration">
        <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
    </bean>
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <!--关联Mybatis-->
        <!--<property name="configLocation" value="mybatis-config.xml"/>-->
        <property name="mapperLocations" value="mappers/*.xml"/>
        <property name="configuration" ref="configuration"/>
    </bean>
    <!-- 加载日志配置信息 -->
    <context:property-placeholder location="log4j.properties" system-properties-mode="NEVER"/>
    <!-- 定义切面,切面内包含通知要执行的方法-->
    <bean id="logAop" class="com.example.spring_mybatis.aop.LogAop"></bean>
    <!--aop的配置-->
    <aop:config proxy-target-class="true">
        <!--切面配置-->
        <aop:aspect ref="logAop">
            <!--切点-->
            <aop:pointcut id="logPointCut" expression="execution(* com.example.spring_mybatis.service..*.*(..))"/>
            <!--切点-通知-->
            <aop:before pointcut-ref="logPointCut" method="beforeLog"/>
            <aop:after pointcut-ref="logPointCut" method="afterLog"/>
        </aop:aspect>
    </aop:config>
</beans>

3-2 调整PersonServiceImpl类实现

同时我们需要在PersonServiceImpl中替换方法的实现方式,使用我们自动生成的userMapper,而不是对应创建的:

package com.example.spring_mybatis.serviceImpl;
import com.example.spring_mybatis.dao.PersonDao;
import com.example.spring_mybatis.daoImpl.PersonDaoImpl;
import com.example.spring_mybatis.model.Person;
import com.example.spring_mybatis.service.PersonService;
import lombok.Data;
import java.util.List;
@Data
public class PersonServiceImpl implements PersonService {
    private PersonDao userMapper;
    @Override
    public List<Person> getPersonList() {
        List<Person> personList=userMapper.getPersonList();
        for (Person person : personList) {
            System.out.println(person);
        }
        return personList;
    }
}

3-3 测试实现方式

测试类还使用之前的:

import com.example.spring_mybatis.service.PersonService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonServiceTest {
    @Test
    public void getPersonListTest(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        PersonService personService = (PersonService) applicationContext.getBean("personServiceImpl");
        personService.getPersonList();
    }
}

打印结果如下:

总结一下

完成了上述的实现方式之后,我们确定最终的项目整体结构如下:

本篇Blog讨论了三种Spring整合MyBatis的方式,随着实现方式的递进,我们越来越多的工作交给了Spring去做,第一种整合方式我们配置了sqlSessionFactory(myDataSource,configuration),sqlSession,然后把sqlSession注入personDaoImpl类,通过这个步骤,我们摆脱了mybatis-config.xml核心配置文件的编写、MybatisUtils辅助类的编写。第二种整合方式我们抛弃了sqlSession,直接用sqlSessionFactory注入personDaoImpl实现。第三种整合方式我们则干脆抛弃了实现类personDaoImpl的编写,实现类的生成由Spring控制,其实继续演化下去,我们连mapper配置文件都可以抛弃,那就是使用注解,这些内容在Spring Boot中体现吧,所以框架就是先给出配置规则,再持续简化,让程序员逐渐变成傻瓜,俗称傻瓜式编程,但是如果原理不知道,出了错误可就不好排查了,所以我们还是不要做傻瓜好了。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
32
分享
相关文章
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
105 11
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
91 4
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
105 3
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
52 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
761 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
464 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
249 1
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
94 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
222 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码