MyBatis - 6.Spring整合MyBatis


1、查看不同MyBatis版本整合Spring时使用的适配包; http://www.mybatis.org/spring/
2、下载整合适配包
https://github.com/mybatis/spring/releases
• 3、官方整合示例,jpetstore
https://github.com/mybatis/jpetstore-6

MyBatis-Spring MyBatis Spring
1.0.0 或 1.0.1 3.0.1 到 3.0.5 3.0.0 或以上
1.0.2 3.0.6 3.0.0 或以上
1.1.0 3.1.0 或以上 3.0.0 或以上

Mybatis整合Spring包
mybatis-spring-1.3.2.jar

1.整合Mybatis和Spring配置#

结构

1.1 类#

com.tangge.bean.employee.java

package com.tangge.bean;

import java.io.Serializable;

public class employee implements Serializable{
    private int id;
    private String lastName;
    private String email;
    private String  gender;
    private deptment dept;

    public employee() {
    }

    public employee(int id, String lastName, String email, String gender) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }

    public employee(String lastName, String email, String gender) {
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }



    public deptment getDept() {
        return dept;
    }

    public void setDept(deptment dept) {
        this.dept = dept;
    }



    @Override
    public String toString() {
        return "employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", dept=" + dept +
                '}';
    }

    public int getId() {
        return id;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getGender() {
        return gender;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

}

1.2 接口#

com.tangge.dao.employeeMapper.java

public interface employeeMapper {
    public List<employee> getEmployees();
}

1.3 服务层#

com.tangge.service.employeeService.java

package com.tangge.service;

import com.tangge.dao.employeeMapper;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.tangge.bean.employee;


@Service
public class employeeService {

    @Autowired
    private employeeMapper employeeMapper;


    public List<employee> getemps(){
        return employeeMapper.getEmployees();
    }
}

1.4 mapper 配置XML#

employeeMapper.xml

<?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">
<!--
namespace:命名空间,指定为接口的全类名
-->
<mapper namespace="com.tangge.dao.employeeMapper">
  <!--<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>-->

  <select id="getEmployees" resultType="com.tangge.bean.employee">
    select `id`,  `last_name`  lastName,  `gender`,  `email` from tbl_employee
  </select>
</mapper>

1.5 mybatis 简单配置 XML#

mybatis-config.xml 只留下setting等一些简单配置

<?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="jdbcTypeForNull" value="NULL"/>
    <!--显示指定每个我们需要更改的值,即使他是默认的。防止版本更迭带来的问题-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
    <!--<setting name="mapUnderscoreToCamelCase" value="true"></setting>-->
  </settings>


  <databaseIdProvider type="DB_VENDOR">
    <property name="SQL Server" value="sqlserver"/>
    <property name="MySQL" value="mysql"/>
    <property name="DB2" value="db2"/>
    <property name="Oracle" value="oracle"/>
  </databaseIdProvider>

</configuration>

1.6 * 最重要的spring配置#

applicationContext.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"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://mybatis.org/schema/mybatis-spring
   http://mybatis.org/schema/mybatis-spring.xsd">

  <!--指定Spring希望控制所有业务逻辑组件:扫描包-->
  <context:component-scan base-package="com.tangge"></context:component-scan>

  <!--Spring控制业务逻辑。数据源。事务控制。AOP-->

  <!--(1)数据源:   引用外部文件db.properties -->
  <context:property-placeholder location="classpath:tangge/db.properties"/>
  <!--配置jdbc-->
  <bean id="datasource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="${drivername}"></property>
    <property name="url" value="${url}"></property>
    <property name="username" value="${user}"></property>
    <property name="password" value="${pass}"></property>
  </bean>

  <!--事务管理-->
  <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="datasource"></property>
  </bean>
  <!--启用事务注解 http://www.springframework.org/schema/tx-->
  <!--http://www.springframework.org/schema/tx/spring-tx.xsd-->
  <tx:annotation-driven transaction-manager="transactionManager"/>

  <!--
  (2)整合mybatis
      目的:1.spring管理所有组件,mapper的实现类
           2.spring管理事务,spring声明式事务
  -->
  <!--(2.1)创建 SqlSessionFactory-->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="datasource"/>
    <!--全局配置文件位置-->
    <property name="configLocation" value="classpath:tangge/mybatis-config.xml"></property>
    <!--指定 mapper 文件位置-->
    <property name="mapperLocations" value="classpath:tangge/mapper/*.xml"></property>
  </bean>

  <!--(2.2)扫描所有mapper,自动注入
    base-package:指定包下所有的mapper接口实现自动扫描并加入到ioc容器中
  -->
  <!--<mybatis-spring:scan base-package="com.tangge.dao" />-->
  <!--第2个写法-->
  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.tangge.dao" />
  </bean>

</beans>

---->【测试】:

public class SpringTest {

    public static void main(String[] args) {
        SpringTest test = new SpringTest();
        test.getFirstLevelCache();
    }


    public void getFirstLevelCache() {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("classpath:tangge/applicationContext.xml");
				
        employeeService  service = applicationContext.getBean(employeeService.class);
		
        List<employee> list = service.getemps();
        System.out.println(list);
    }

}

2.对应关系图#

3.问题#

java.lang.NoClassDefFoundError: org.springframework.beans.FatalBeanException

一:jar包未加载完整。

二:Eclipse/idea 运行JVM内存过小,调整JVM内存。

解决:
Eclipse:
在Window->Preferences中,选择Java->Installed JREs,修改已配置的JDK。

配置Default VM arguments即可。

-Xmx512M -Xms512M -XX:MaxPermSize=256M-Xss512K
https://blog.csdn.net/u013355724/article/details/52222463

IDEA:
idea.exe.vmoptions
idea64.exe.vmoptions
修改1024,两个

作者:【唐】三三

出处:https://www.cnblogs.com/tangge/p/9558817.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   【唐】三三  阅读(238)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2012-08-30 SQL - 18.触发器
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示