Spring 整合 MyBatis的实现步骤

作者:Java 时间:2022-08-21 16:51:14 

MyBatis 是一款常用的持久层框架,使得程序能够以调用方法的方式执行某个指定的SQL,将执行SQL的底层逻辑进行封装。多数与Spring结合使用,本文讨论Spring如何整合Mybatis。

Spring 整合 MyBatis的实现步骤

  Spring 整合 MyBatis 可以实现让数据库连接,事务管理,实例化对象的创建与依赖关系等都统一由 Spring 负责,以及数据库的增删改查操作由 spring-mybatis 整合包提供的 SqlSessionTemplate 对象来操作,或者利用整合包扫描接口,依据 Mapper 映射文件直接创建代理实现类,无须程序员手工实现接口,大大简化了开发流程。SpringMVC 本来就是 Spring 框架的一部分,这两者无须再做整合,所以 SSM 整合的关键就是Spring对MyBatis的整合,三大框架整合完成后,将以 Spring 为核心,调用有关资源,高效运作。

一、Spring 项目整体目录结构

Spring 整合 MyBatis的实现步骤

二、Spring 整合 MyBatis 开发环境

  Spring 整合 MyBatis 开发环境除了需要 Spring 的jar包和 MyBatis 的jar包,还需要 SpringMyBatis 整合的中间件 mybatis-spring-xxx.jar,此外还需要数据库驱动jar包 mysql-connector-java-xxx.jar。

三、Mapper 接口无实现类开发整合

项目案例:Spring + MyBatis 实现对 user 数据库的查询。

实现步骤:

【1】创建一个 Maven 项目,然后再 pom.xml 文件中添加相关依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

<groupId>cn.kgc.sm</groupId>
 <artifactId>spring06</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

<name>spring06</name>
 <url>http://maven.apache.org</url>

<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

<dependencies>
   <!--测试工具-->
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
     <scope>test</scope>
   </dependency>

<!--mysql驱动-->
   <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.47</version>
   </dependency>

<!--druid-->
   <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.2.9</version>
   </dependency>

<!--mybatis-->
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.9</version>
   </dependency>

<!--IOC 依赖注入-->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.3.9</version>
   </dependency>

<!--mybatis&spring 整合包-->
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis-spring</artifactId>
     <version>2.0.5</version>
   </dependency>

<!--aspects 切面-->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-aspects</artifactId>
     <version>5.3.9</version>
   </dependency>

<!--jdbc-->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>5.3.9</version>
   </dependency>

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-tx</artifactId>
     <version>5.3.9</version>
   </dependency>

<!--lombok-->
   <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.16</version>
   </dependency>

<!-- 日志工具-->
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.17</version>
   </dependency>

<!--mybatis分页插件-->
   <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper</artifactId>
     <version>5.2.1</version>
   </dependency>

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-test</artifactId>
     <version>5.3.9</version>
     <scope>test</scope>
   </dependency>
 </dependencies>
</project>

【2】在 resources &mdash;> config 目录下,创建数据库配置文件 jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///java2218?serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

【3】在 resources &mdash;> config 目录下,创建 MyBatis 配置文件 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="LOG4J"/>
       <setting name="mapUnderscoreToCamelCase" value="true"/>
       <!--全局开启二级缓存-->
       <setting name="cacheEnabled" value="true"/>
   </settings>
   <!--配置mybatis分页插件-->
   <plugins>
       <plugin interceptor="com.github.pagehelper.PageInterceptor">
           <!-- 配置mysql方言 -->
           <property name="helperDialect" value="mysql" />
           <!-- 设置为true时,如果pageSize=0就会查询出全部的结果 -->
           <property name="pageSizeZero" value="true" />
           <!-- 3.3.0版本可用,分页参数合理化,默认false禁用 -->
           <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
           <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
           <property name="reasonable" value="true" />
       </plugin>
   </plugins>
</configuration>

【4】在 resources &mdash;> config 目录下,创建 Spring 配置文件 spring-config.xml

<?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"
      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">

<!--引入外部数据源的配置参数-->
   <context:property-placeholder location="classpath:config/jdbc.properties"></context:property-placeholder>

<!--初始化数据库连接池-->
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
       <property name="driverClassName" value="${jdbc.driver}"></property>
       <property name="url" value="${jdbc.url}"></property>
       <property name="username" value="${jdbc.username}"></property>
       <property name="password" value="${jdbc.password}"></property>
   </bean>

<!--sqlSessionFactory-->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <!--设置数据库连接池-->
       <property name="dataSource" ref="dataSource"></property>
       <!--设置mybatis全局配置文件位置-->
       <property name="configLocation" value="config/mybatis-config.xml"></property>
       <!--设置别名的包-->
       <property name="typeAliasesPackage" value="cn.kgc.sm"></property>
       <!--设置mapper.xml文件的位置-->
       <property name="mapperLocations" value="mapper/*.xml"></property>
   </bean>

<!--mapper接口扫描  生成接口代理对象 同时完成对象的托管-->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="cn.kgc.sm.mapper"></property>
   </bean>

<!--开启包扫描  base-package  设置需要扫描的包 -->
   <context:component-scan base-package="cn.kgc.sm"></context:component-scan>
</beans>

【5】创建实体类 User

package cn.kgc.sm.entity;

import lombok.Data;

@Data
public class User {

private Integer uId;
 private String uName;
 private String uPassword;
 private Integer uState;

}

【6】创建 Mapper 接口 UserMapper

package cn.kgc.sm.mapper;

import cn.kgc.sm.entity.User;

import java.util.List;

public interface UserMapper {
   List<User> selectAll();
}

【7】创建与 UserMapper 接口映射的 UserMapper.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.sm.mapper.UserMapper">

<select id="selectAll" resultType="user">
   select * from user
 </select>
</mapper>

【8】创建 Service 业务层接口 UserService

package cn.kgc.sm.service;

import cn.kgc.sm.entity.User;
import cn.kgc.sm.mapper.UserMapper;

import java.util.List;

public interface UserService {
   List<User> selectAll();
}

【9】创建 UserService 接口的实现类 UserServiceImpl

package cn.kgc.sm.service.impl;

import cn.kgc.sm.entity.User;
import cn.kgc.sm.mapper.UserMapper;
import cn.kgc.sm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserServiceImpl implements UserService {
   @Autowired
   UserMapper userMapper;

@Override
   public List<User> selectAll() {
       System.out.println("users = ");
       List<User> users = userMapper.selectAll();

System.out.println("users = " + users);
       return users;
   }
}

【10】创建测试类

package cn.kgc.sm.mapper;

import cn.kgc.sm.entity.User;
import cn.kgc.sm.service.UserService;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:config/spring-config.xml")
public class UserMapperTest {
   @Autowired
   UserService userService;

@Test
   public void Test01(){
       List<User> users = userService.selectAll();
       users.forEach(user -> System.out.println("user = " + user));
//        for (User user : users) {
//            System.out.println("user = " + user);
//        }
   }

}

运行结果:

Spring 整合 MyBatis的实现步骤

来源:https://blog.csdn.net/hh867308122/article/details/129184773

标签:Spring,整合,MyBatis
0
投稿

猜你喜欢

  • Spring Boot自动注入的原理分析

    2023-03-29 04:19:44
  • springboot post接口接受json时,转换为对象时,属性都为null的解决

    2023-06-17 15:24:23
  • java IO流 之 输出流 OutputString()的使用

    2023-08-11 23:16:30
  • Spring Boot配置接口WebMvcConfigurer的实现

    2023-11-27 23:28:50
  • 详解MyBatis的Dao层实现和配置文件深入

    2022-07-26 02:29:17
  • Android Flutter使用本地数据库编写备忘录应用

    2023-09-15 17:24:09
  • Android利用Flutter实现立体旋转效果

    2023-06-20 08:20:32
  • Java拦截器Interceptor实现原理及代码示例

    2023-11-04 03:49:32
  • Netty 拆包沾包问题解决方案详解

    2023-09-01 21:58:50
  • Java 方法的重载与参数传递详解

    2023-10-19 18:50:46
  • Android实现腾讯新闻的新闻类别导航效果

    2023-07-29 04:17:46
  • 关于Java中增强for循环使用的注意事项

    2021-08-09 16:47:43
  • 浅谈Spring中Bean的作用域、生命周期

    2023-11-14 02:44:21
  • Java 集合框架之List 的使用(附小游戏练习)

    2023-11-24 10:33:40
  • Spring中多配置文件及引用其他bean的方式

    2023-07-01 17:31:03
  • Java实现分页代码

    2023-08-05 08:14:47
  • SpringMVC @RequestMapping注解详解

    2022-08-08 06:58:14
  • SpringBoot整合Mybatis,解决TypeAliases配置失败的问题

    2023-11-28 14:59:24
  • mybatis plus使用redis作为二级缓存的方法

    2023-11-19 08:34:58
  • 基于java 线程的几种状态(详解)

    2022-08-31 19:51:47
  • asp之家 软件编程 m.aspxhome.com