Spring集成MyBatis

2023-11-20

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

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

spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。

我们需要spring创建以下对象

1.独立的连接池对象,使用阿里的druid连接池

2.SqlSessionFactory对象

3.创建出dao对象

上面三个对象的创建,使用xml的bean标签

Spring集成MyBatis实现步骤:

先准备创建数据库,新建表

第一步:

新建maven项目

第二步:

加入maven的依赖

1.spring的依赖

2.mybatis依赖

3.mysql驱动

4.spring的事务的依赖

5.mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中常见mybatis的SqlSessionFactory,dao对象的

 <dependencies>
    <!--测试单元依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring核心ioc依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--做spring事务用到的-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <!--mybatis和spring集成依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
    <!--阿里公司数据库连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目录-->
        <includes><!--包括目录下的.properties,.xml文件都会扫描到-->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

第三步:

创建Student实体类

package com.bjpowernode.domain;

public class Student {
    //属性名和列名一样
    private Integer id;
    private String name;
    private String email;
    private Integer age;
    //无参构造
    public Student() {
    }
    //有参构造
    public Student(Integer id, String name, String email, Integer age) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.age = age;
    }
    //set、get方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

第四步:

创建dao接口和mapper文件

 

 第五步:

创建mybatis主配置文件

<?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:控制mybatis全局行为-->
    <settings>
        <!--设置mybatis输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--类别名-->
    <typeAliases>
        <package name="com.bjpowernode.domain"/>
     </typeAliases>
    <mappers>
        <!--一个mapper标签指定一个文件的位置。
            从类路径开始的路径信息。  target/clasess
            指定sql映射文件的位置,使用包的方式,一次性全部把包中的映射文件全部读取到
            -->
       <package name="com.bjpowernode.dao"/>
    </mappers>
</configuration>

第六步:

创建Service接口和实现类,属性是dao

Service接口实现类 定义StudentDao属性

package com.bjpowernode.service.impl;

import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    //引用类型
    private StudentDao studentDao;
    //使用set注入赋值
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public int addStudent(Student student) {
        int num = studentDao.insertStudent(student);
        return num;
    }

    @Override
    public List<Student> selectStudent() {
        List<Student> studentList = studentDao.selectStudent();
        return studentList;
    }
}

 第七步:

创建spring的配置文件:声明mybatis的对象交给spring创建

1.数据源

2.SqlSessionFactory

3.Dao对象

4.声明自定义的service

<?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:jdbc.properties"/>

    <!--声明数据源DataSource,作用是连接数据库-->
    <bean id="MyDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
            <property name="url"
                     value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <!--连接池最多可以连接多少数据库,默认20-->
            <property name="maxActive" value="20"/>
    </bean>

    <!--声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory-->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--set注入,把数据库连接池赋给了dataSource属性-->
            <property name="dataSource" ref="MyDataSource"/>
            <!--
            mybatis主配置文件的位置,因为是在spring中指定mybatis主配置文件,所以要用classpath:
            configLocation:属性是Resource类型的,负责读取配置文件
            赋值使用 value 指定文件的路径
            -->
            <property name="configLocation" value="classpath:mybatis.xml"/>

    </bean>
    <!--创建dao对象,使用SqlSession的getMapper(StudentDao.class)
        MapperScannerConfigurer:在内部调用getMapper()生成每个dao接口的代理对象
    -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <!--指定SqlSessionFactory对象的id-->
         <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
         <!--指定包名,包名是dao接口的包名
            MapperScannerConfigurer会扫描这个包中所有的接口,
            把每个接口都执行一次getMapper()方法,得到每个接口的dao对象
            创建好的dao对象放入spring容器中
            创建好的dao对象名称就是接口名首字母小写,例如studentDao
         -->
         <property name="basePackage" value="com.bjpowernode.dao"/>
     </bean>
        <!--声明Service-->
    <bean id="ServiceStudent" class="com.bjpowernode.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao"/>
    </bean>
</beans>

第八步:

创建测试类,获取Service对象,通过service调用dao完成数据库的访问

  /*使用Service*/
    @Test
    public void test03(){
        //读取spring主配置文件
        String in = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(in);
        StudentService service = (StudentService) ac.getBean("ServiceStudent");
        Student student = new Student(4002,"裴元虎","peiyuanhu@163.com",26);
        int i = service.addStudent(student);
        System.out.println("添加"+i+"行数据");
    }

    @Test
    public void test04(){
        //读取spring主配置文件
        String in = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(in);
        StudentService service = (StudentService) ac.getBean("ServiceStudent");
        List<Student> studentList = service.selectStudent();
        for (Student stu:studentList) {
            System.out.println(">>>>"+stu);
        }
    }

--------------------------------------------------------------------------------

为了方便修改数据库连接信息,我们自己定义个文件专门放数据库连接信息

第一步:

创建数据库连接信息jdbc.properties文件

jdbc.url=jdbc:mysql://localhost:3306/bjpowernode?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

第二步:

在spring主配置配置文件中指定连接数据库信息文件


    <!--数据库配置信息,写在一个单独的文件里,执行文件的路径-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

第三步:

在主配置文件中用${}指定连接信息

例如,${jdbc.url}就是jdbc.properties文件中=号左边的值

 <property name="url"
                     value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring集成MyBatis 的相关文章

随机推荐

  • 引进包类

    使用Support Library 支持库 Using the Support Library 负责人 River 完成时间 7月18日 原文链接 http developer android com training basics fra
  • (六)Spring Cloud Alibaba Sentinel(含案例源码、案例解析及软件)

    案例源码gitee地址 https gitee com BanSheng spring cloud alibaba examples tree master sentinel example client Spring Cloud Alib
  • 人工智能技术应用中机器学习里的6种偏差

    在人工智能的学习过程中 偏差会以多种不同的形式出现在机器学习中 Bias的定义 Bias 对某人或某一群体的倾向或偏见 尤指被认为不公平的方式 Bias被解释为偏差也可解释为偏见 其定义包括 不公平 一词 偏差几乎可以在每个阶段影响机器学习
  • msm8953-配置I2C 速率

    前言 本文记录调试高通平台某I2C 器件通讯出现异常 尝试修改I2C 时钟速率时所做的记录 平台 MSM8953 系统 Android 9 0 分类 I2C CLK 结论 先说结论 经过分析以及验证 平台支持的I2C特性如下 默认速度 10
  • eclipse json转为java类

    1 安装GsonFormat插件 插件地址 https github com wenxunyu GsonFormat 安装步骤在上面的地址中有 2 注意 直接放在dropins根目录下 不要放在子文件夹下 否则报错 不能正常使用插件
  • Java知识大全 - 五、Java高级编程

    1 异常和错误处理 在 Java 中 异常用于处理程序执行期间可能发生的错误和其他异常情况 异常允许开发人员以结构化和一致的方式处理错误 从而使代码更加健壮和可靠 发生错误时 Java 会创建一个异常对象 其中包含有关错误的信息 例如错误的
  • linux入门系列19--数据库管理系统(DBMS)之MariaDB

    前面讲完Linux下一系列服务的配置和使用之后 本文简单介绍一款数据库管理系统 MySQL的兄弟 MariaDB 如果你有MySQL或其他数据的使用经验 MariaDB使用起来将非常轻松 本文讲解Centos7默认的数据MariaDB 由于
  • Centos下使用Clion,nginx的CMakeLists.txt,分3步配置。

    nginx的配置 configure with http ssl module with http v2 module Clion下的CMakeLists txt 1 将Nginx的代码全部加入CMakeLists txt cmake mi
  • 在silverlight中定制自己的MessageBox(消息框)

    在silverlight中 如果想使用 消息框 可使用下面的方法 即 HtmlPage Window Alert 消息框内容 如果想要显示更加复杂的内容或定义消息框样式的话 基本上没有什么好的方法 最近在网上看到了一篇文章 该文章的作者也谈
  • Oracle增删改以及事务

    select from dept 部门表 select from emp 员工表 create table newEmp as select from emp where 1 2 插入数据 1 to date 值 格式 函数 insert
  • C/C++内存泄漏与检测

    该死系统存在内存泄漏问题 项目中由于各方面因素 总是有人抱怨存在内存泄漏 系统长时间运行之后 可用内存越来越少 甚至导致了某些服务失败 内存泄漏是最难发现的常见错误之一 因为除非用完内存或调用malloc失败 否则都不会导致任何问题 实际上
  • 如何求自己数据的均值

    博主的技术交流群 722058911 问题背景 在分类网络中 往往需要突出前景 弱化背景 往往有一个操作是减去均值 解决办法 供参考 我是这么解决的 求自己数据集的均值和方差 def compute mean std your datase
  • c语言中atoi函数用法以及功能

    atoi函数是无意中看别人代码发现的我才疏学浅所以整理了一些关于atoi的知识点 atoi的头文件 include
  • 程序员解决问题的60个策略(转)

    英文原文 60 Problem Solving Strategies 程序员的生活就是解决一个又一个问题 永无止境 这篇文章介绍了一系列解决问题的策略 根本的指导方针 1 首先写代码的时候最好不要有缺陷 最好的修复方法就是让 bug 胎死腹
  • 【Tomcat】:One or more listeners failed to start.报错解决方案

    报错信息 One or more listeners failed to start Full details will be found in the appropriate container log file 具体就是web xml此
  • Java实现斗地主游戏中洗牌,发牌,牌顺序逻辑

    需求 在启动游戏房间时 应提前准备好54张牌完成洗牌 发牌 牌顺序逻辑 分析 1 当系统启动的同时需要准备好数据的时候 就可以用静态代码块了 2 洗牌就是打乱牌的顺序 3 定义三个玩家 依次发出51张牌 4 给玩家的牌进行排序 代码实现 C
  • LeetCode题目笔记——24. 两两交换链表中的节点

    文章目录 题目描述 题目链接 题目难度 中等 方法一 迭代 代码 C 代码 python 方法二 递归 代码 C 总结 题目描述 或许这也是个经典的面试题 记录一手 给你一个链表 两两交换其中相邻的节点 并返回交换后链表的头节点 你必须在不
  • FM33A048B调试特性

    调试特性 处理器支持以下调试特性 程序的暂停 恢复及单步执行 访 问内核寄存器和特殊寄存器 硬件断点 4 个 软件断点 不限数量的 BKPT 指令 数据监视点 1 个 动态非侵入式存储器访问 无需停止处理器 SWD 接口 Cortex M0
  • code-server c/c++/python语言环境配置

    0 前言 这篇主要配置python 非常简单非常粗暴 直接终端命令行操作 一 配置python 先看看容器里面有没有自带pythonx whereis python 如上图 说明有了 所以我这边不安装了 但是输入 python V 没有输出
  • Spring集成MyBatis

    将mybatis与spring进行整合 主要解决的问题就是讲SqlSessionFactory对象交由spring来管理 所以 该整合 只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在s