一文吃透Spring集成MyBatis

news2024/12/23 4:41:32

在这里插入图片描述

个人主页: 几分醉意的CSDN博客_传送门

文章目录

  • 💖集成思路
    • ✨怎么使用MyBatis
    • ✨集成的步骤
    • ✨pom加入依赖
    • ✨创建MyBatis使用代码
    • ✨创建Service类
    • ✨创建Spring配置文件和测试集成MyBatis
    • ✨使用外部属性配置文件
  • 💖图书推荐 Java28岁了!这些好书推荐给你
    • ✨Java语言程序设计(原书第12版)
    • ✨Java核心技术(原书第11版)
    • ✨Java核心技术(原书第12版)
    • ✨培养Java编程思维
    • ✨Effective Java
    • ✨Java并发编程实战
  • 💖参加方式
    • ✨中奖名单公布
  • 🚗投票(传送门)

💖集成思路

spring能集成很多的框架,是spring一个优势功能。通过集成功能,让开发人员使用其他框架更方便。集成使用的是spring ioc 核心技术。

✨怎么使用MyBatis

使用mybatis,需要创mybatis框架中的某些对象,使用这些对象,就能使用mybatis提供的功能了。

分析: mybatis执行sql语句,需要使用那些对象?
 1. 需要有Dao接口的代理对象,例如StudentDao接口,需要一个它的代理对象,使用 SqlSession.getMapper(StudentDao.class),得到dao代理对象。
 2. 需要有SqlSessionFactory,创建SqlSessionFactory对象,才能使用openSession(得到SqlSession对象。
 3. 数据源DataSource对象,使用一个更强大,功能更多的连接池对象代替mybatis自己的PooledDataSource。

✨集成的步骤

实现步骤:
1.使用的mysql库, 使用学生表 student2(id int 主键列, 自动增长,
                                    name varchar(80),
                                    age int)

2.创建maven项目

3.加入依赖gav
  spring依赖, mybatis依赖, mysql驱动。 junit依赖
  mybatis-spring依赖(mybatis网站上提供的,用来在spring项目中,创建mybatis对象)
  spring有关事务的依赖。


  mybatis和spring整合的时候, 事务是自动提交的。

4.创建实体类Student

5.创建Dao接口和mapper文件写sql语句

6.写mybatis主配置文件

7.创建service接口和他的实现类

8.创建spring的配置文件
  1)声明数据源DataSource,使用的阿里的Druid连接池
  2) 声明SqlSessionFactoryBean类,在这个类内部创建的是SqlSessionFactory对象。
  3)声明MapperScannerConfiguration类,在内部创建dao代理对象,
     创建的对象都放在spring容器中。

  4)声明Service对象,把3)的中dao赋值给service属性

9.测试dao访问数据库

✨pom加入依赖


<dependencies>
    <!--测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--spring依赖-->
    <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>
    <!--用mybatis就要用到这个插件 编译java目录下,除了java文件,还编译xml和properties文件-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

✨创建MyBatis使用代码

1.创建实体类,生成get、set和toString方法。

public class Student {
    private Integer id;
    private String name;
    private Integer age;

    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 Integer getAge() {
        return age;
    }

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

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

2.创建Dao接口,在里面写方法。

public interface StudentDao {
    //添加操作
    int insertStudent(Student student);

    //查询操作
    List<Student> selectStudents();

}

3.创建mapper文件,写SQL。

<?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="youfei1_v.Dao.StudentDao">
    <!-- 使用insert,update,select标签写sql -->
    <insert id="insertStudent" >
        insert into student2(name,age) values (#{name},#{age})
    </insert>

    <select id="selectStudents" resultType="youfei1_v.domain.Student">
        select id,name ,age from student2
    </select>
</mapper>

4.创建Mybatis主配置文件。

注意:Spring集成MyBatis,MyBatis主配置文件里面不需要指定数据源了,下面会介绍在哪里指定。
			基本上Mybatis主配置文件里面就设置个日志、别名和其它的mapper文件。
<?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="STDOUT_LOGGING"/>
    </settings>


    <!--指定其它mapper文件的位置,目的是找到其它文件的sql语句-->
    <mappers>
        <!--使用mapper的resource属性指定mapper文件的路径。
        这个路径是从类路径根目录开始
        使用注意:mapper文件的路径使用 / 分割路径
                 一个mapper resource 指定一个mapper文件
        -->
        <!--<mapper resource="youfei1_v/dao/StudentDao.xml"/>-->

        <!--name:mapper文件所在的包名
        满足要求才能使用这种方式:
        1.mapper文件和dao接口在同一目录
        2.mapper文件和dao接口名称一致
        -->
        <package name="youfei1_v.Dao"/>

    </mappers>
</configuration>

✨创建Service类

1.创建service接口。

public interface StudentService {
    int addStudent(Student student);
    List<Student> queryStudent();
}

1.实现service接口。

public class StudentServiceImpl implements StudentService {

    private StudentDao studentDao; //创建这个dao对象和set方法

    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public int addStudent(Student student) {
        int rows = studentDao.insertStudent(student); //方法中调用studentDao对象的方法
        return rows;
    }

    @Override
    public List<Student> queryStudent() {
        List<Student> students = studentDao.selectStudents();
        return students;
    }
}

✨创建Spring配置文件和测试集成MyBatis

1.创建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"
       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:mysql://localhost:3306/springdb"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>


    <!--声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory bean的id就代表创建SqlSessionFactory对象-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定数据源-->
        <property name="dataSource" ref="myDataSource" /> <!--用的是什么数据源的id-->
        <!--指定mybatis主配置文件
            Resource可以直接使用 value属性赋值。
        -->
        <property name="configLocation" value="classpath:mybatis.xml" />
    </bean>
    <!--
      相当于:SqlSessionFactory  factory  = new SqlSessonFactoryBuider.build(classpath:mybatis.xml)
    -->


    <!--声明MapperScannerConfigurer
        SqlSession.getMapper(StudentDao.class)

        MapperScannerConfigurer作用是:

        循环basePackage所表示的包,把包中的每个接口都找到,调用SqlSession.getMapper
        把每个dao接口都创建出dao对象 ,dao代理对象放在容器中。

        ApplicationContext ctx = ....

        SqlSessionFactory sqlSessionFactory  = ctx.getBean("factory");
        SqlSession session = sqlSessionFactory.openSession();

        for(接口: com.bjpowernode.dao){

             接口 对象 =  session.getMapper(接口)
             springMap.put(接口名的首字母小写, 对象)  //创建dao代理,这个dao代理的对象的名字是这个接口的首字母小写。也就是bean的id
        }
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定SqlSessionFactory对象的名称-->
        <property name="sqlSessionFactoryBeanName" value="factory" />
        <!--指定基本包,dao接口所在的包名-->
        <property name="basePackage" value="youfei1_v.Dao" /><!--创建dao代理,这个dao代理的对象的名字是这个接口名的首字母小写。也就是bean的id-->
    </bean>

    <!--声明service-->
    <bean id="studentService" class="youfei1_v.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao" /> <!--set注入:把dao代理赋值给StudentServiceImpl类中的StudentDao对象-->
    </bean>                         <!--ref用的就是上面的创建出来的dao代理,的id值,这个id值就是接口名的首字母小写-->
    <!--ref="studentDao" :studentDao指的是Student这个接口的代理。上面那个bean,创建出Student接口的代理,这个代理的id就是接口名字小写studentDao-->

</beans>

2.测试
在这里插入图片描述

✨使用外部属性配置文件

1.创建一个.properties的文件
在这里插入图片描述

2.在spring配置文件中引用
在这里插入图片描述

💖图书推荐 Java28岁了!这些好书推荐给你

在这里插入图片描述

1995年5月23日,Java带着开发团队对它的宏伟愿景诞生了。在28年中,Java给我们的世界创造了一个又一个的精彩。作为一种最流行的网络编程语言之一,Java语言在当今信息化社会中发挥了重要的作用。虽然软件开发行业语言种类很多,但是Java工程师的需求量占据了软件开发工程师总需求量的60%-70%。

今天就是 #Java# 28岁了,博主为你推荐几本百万开发者都在看的Java经典名著,伴你顺利晋级高阶程序员!

✨Java语言程序设计(原书第12版)

在这里插入图片描述
Java经典教材再推新版,畅销20余年,被世界各地的大学选作教材,更新至Java9、10和11,涵盖Java新特性。本书通过示例讲解问题求解技巧,提供大量的程序清单,每章配有丰富的复习题和编程练习题,帮助读者掌握编程技术并解决实际开发中遇到的问题。
————————————————————

✨Java核心技术(原书第11版)

在这里插入图片描述
极具影响力的巅峰之作!历久弥新,累计销量超100万册!包含Java SE 9、10和11新特性。畅销20载的大师之作,Jolt大奖得主,全球百万Java工程师口碑选择,Java事实标准,提供部分作者亲授视频+海量示例代码集。
————————————————————

✨Java核心技术(原书第12版)

在这里插入图片描述
经典畅销书CoreJava根据Java17新特性全面升级!系统全面、深入理解Java核心技术。如您刚入门Java,或者准备升级到Java17,建议直接选用第12版学习。
————————————————————

✨培养Java编程思维

在这里插入图片描述
永不过时的Java编程思想教科书!学习Java必读经典图书!超具亲和力的文字和小而直接的编程示例将晦涩难懂的概念讲透,从Java的基础语法到最高级特性,指导你轻松掌握。
————————————————————

✨Effective Java

在这里插入图片描述
适合已经掌握Java核心技术的程序员,想更加深入地了解Java编程语言的开发者阅读。针对如何编写高效、设计优良的程序提出了最实用、最权威的指导方针,通过90条简短、独立的经验法则,探索新的设计模式和语言习惯用法,帮你更加有效地使用Java编程语言及其基本类库,指引你少走弯路。
————————————————————

✨Java并发编程实战

在这里插入图片描述
本书是Java并发编程领域的里程碑著作!从并发编程的基本理论入手,逐步介绍了在设计Java并发程序时各种重要的设计原则、设计模式与思维模式。
————————————————————

💖参加方式

本次送书4本,在评论区抽三位小伙伴,评论点赞数最高获得一本
活动时间:截止到 2023-05-31 22:00:00(下周三开奖),中奖的小伙伴以上六本任选一本包邮到家
抽奖方式:在线抽奖工具进行抽奖3位同学,评论点赞数最高的同学获得一本
参与方式:关注博主、点赞、收藏,评论区评论 “java生日快乐”
(多条增加权重,最多五条有效哦)
通知方式:通过动态与私信与本文最后同时公布
领奖方式:获得后加我微信发我地址即可

————————————————

✨中奖名单公布

周日前记得加我微信,发我地址
评论点赞第一名:陈老老老板
在线抽奖工具随机抽取3名:溟洵、日出等日落、艾派森

在这里插入图片描述

🚗投票(传送门)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRC校验(2):CRC32查表法详解、代码实现和CRC反转

对于现在的CPU来说&#xff0c;基本上都在硬件上实现了CRC校验。但我们还是想用软件来实现一下CRC的代码&#xff0c;这样可以更深入地理解里面的原理。所以这一节就来详细地解释如何使用查表法从软件上来实现CRC-32的校验。另外&#xff0c;CRC还有一种反转的情况&#xff0c;…

SpringCloud Ribbon负载均衡(十一)

前面搭建了初步例子&#xff0c;但是还没实现真正负载均衡&#xff0c;我们这里要先搞三个服务提供者集群&#xff0c;然后才能演示负载均衡&#xff0c;以及负载均衡策略&#xff1b; 新建项目microservice-student-provider-1002&#xff0c;microservice-student-provider-…

行星减速机优势有哪些?行星减速机五大优势

减速机是动力传动解决方案&#xff0c;通过选择高质量和高效率的变速箱&#xff0c;绝对可以提高整个动力传动系统的效率和性能。行星减速机有哪些优势呢&#xff1f; 1.保证灵活可靠的动力传动系统 减速机提供了广泛的功率和比率&#xff0c;使其成为许多行业的大多数应用的完…

代码随想录2刷|链表1.链表理论基础2移除链表元素3.设计链表4.翻转链表5.两两交换链表中的节点6.删除链表的倒数第N个节点7.链表相交8.环形链表lI

2移除链表元素 链接&#xff1a;力扣 一刷&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x…

Vue中如何进行地理位置搜索与地点选择

Vue中如何进行地理位置搜索与地点选择 随着移动互联网和定位技术的普及&#xff0c;地理位置搜索和地点选择成为了很多应用程序中必不可少的功能。在Vue中&#xff0c;我们可以使用一些开源的地图API和第三方组件来实现这些功能。本文将介绍如何在Vue中进行地理位置搜索和地点…

【北邮国院大三下】Logistics and Supply Chain Management 物流与供应链管理 Week3

北邮国院大三电商在读&#xff0c;随课程进行整理知识点。仅整理PPT中相对重要的知识点&#xff0c;内容驳杂并不做期末突击复习用。个人认为相对不重要的细小的知识点不列在其中。如有错误请指出。转载请注明出处&#xff0c;祝您学习愉快。 如需要pdf格式的文件请私信联系或…

gradlew test 失败

前言 在idea内执行./gradlew test&#xff0c;发现如下报错&#xff1a; Could not initialize class org.codehaus.groovy.runtime.InvokerHelper 分析 google了一堆&#xff0c;说要用groovy&#xff0c;可是我没有用groovy&#xff0c;以前也是正常启动的。后来无意发现&a…

游戏玩家的新大陆?小红书游戏内容场景洞察

2023年&#xff0c;如果你问年轻人他们在哪里讨论游戏&#xff1f;他们可能会提到一些平台&#xff0c;比如Steam、TapTap、B站、微博或者论坛。但是如果你向身边的女孩子询问&#xff0c;她们可能会惊喜地告诉你&#xff1a;小红书。 小红书平台一直给人的标签是是“美妆、旅…

UWB高精度实时定位系统源码(springboot+vue)

一、系统概况 UWB&#xff08;Ultra-wideband&#xff09;技术是一种无线载波通讯技术&#xff0c;它不采用正弦载波&#xff0c;而是利用纳秒级的非正弦波窄脉冲传输数据&#xff0c;因此其所占的频谱范围很宽。自主研发&#xff0c;最高定位精度可达10cm&#xff0c;具有高精…

数据库架构是否该随着公司估值一起变化?

原文&#xff5c;The growing pains of database architecture 作者&#xff5c;Tim Liang, Software Engineer at Figma 2020 年&#xff0c;因为 Figma 不断加入新功能&#xff0c;筹备第二条产品线和用户不断增长导致数据库流量每年以 3x 速度增长&#xff0c;我们的基础设…

将数组中指定位置的元素替换为指定值np.put()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组中指定位置的元素替换为指定值 np.put() 选择题 下列说法错误的是? import numpy as np a np.array([1, 2, 3]) print("【显示】a ", a) print("【执行】np.put(arr…

Spring Boot进阶(47):Spring Boot之集成Cache缓存 | 超级详细,建议收藏

1. 前言 今天&#xff0c;我们来聊聊缓存这个话题。身为开发者肯定都知道&#xff0c;程序的瓶颈绝大体现在于数据库方面&#xff0c;而内存读取远远快于硬盘&#xff0c;当并发上升到一定高度&#xff0c;一次又一次的重复请求数据导致大量时间耗费在数据库查询上&#xff0c;…

win10搭建hmailserver邮件服务器(hmailserver+phpstudy+roundcube)

环境安装&#xff1a;Mysqlhmailserverphpstudyroundcube 一、Mysql安装 官网下载链接&#xff1a;https://www.mysql.com/ zip安装包下载链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 1、zip安装包安装 &#xff08;1&#xff09;下载合适版本的mysql zip包&…

LeetCode------ 相交链表

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;栏目介绍:<<刷题集>>用于记录,力扣,牛客等刷题网站上的刷…

EasyExcel 批量导出

文章目录 前言一、EasyExcel 导出封装二、食用步骤1.自定义excel样式2.导出数据 三、复杂excel导出3.1. 自定义复杂表头2. 多sheet 前言 上篇写了数据导入&#xff0c;本文补充一下EasyExcel 批量导出 包括常规excel和复杂excel 一、EasyExcel 导出封装 import com.alibaba.…

手把手教你如何解开安装UKUI的黑屏故障

手把手教你如何解开安装UKUI的黑屏故障 引子 作为一个不折腾不舒服斯基的Linuxer&#xff0c;我又开始安装配置开放欧拉操作系统了。这是国产自主安全可控的Linux发行版。欧拉发行版Linux的发起者就是干正经事的华为&#xff0c;比其它拉大旗扯虎皮的国产Linux低调务实多了。…

远程控制之原理和实战

按理来说&#xff0c;本人不该发表此类专业文章&#xff0c;鄙人零星碎片化的开发经历&#xff0c;让本人斗胆向诸位网友&#xff0c;在远控方面做一点演示说明&#xff0c;谈论一点自己的认识。 程序工程代码地址&#xff1a;点击此处下载。 程序分为两个部分&#xff0c;控…

(三)Kafka 生产者

文章目录 1. Kafka 发送消息的主要步骤2.创建 Kafka 生产者3.发送消息到 Kafka&#xff08;1&#xff09;发送并忘记&#xff08;2&#xff09;同步发送&#xff08;3&#xff09;异步发送 4.生产者配置&#xff08;1&#xff09;client.id&#xff08;2&#xff09;ack&#x…

查看P端日志操作步骤

1.登录PUTTY,这里以联调环境103.160.139.82为例。 2.登录&#xff0c;查看用户名&#xff1a;hxb或zzkpt,密码&#xff1a;用户名01动态口令。 例如hxb, sunmenglei01888888 3.进入P端日志存放目录&#xff0c; cd /home/zzkpt/logs/bcip 4.比如我要查看2023年5月5日&#xf…

索引常见问题

被问到SQL和索引优化问题&#xff0c;如何切入&#xff1f; 可以用 explain 进行分析 思考流程&#xff1a;找到哪些运行时间长浪费性能的sql&#xff0c;然后再用explain分析 慢查询日志 MySQL可以设置慢查询日志&#xff0c;当SQL执行的时间超过我们设定的时间&#xff0…