手牵手入门Spring5.2.5.RELEASE整合Mybatis3.5

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。


Spring致力于提供一种方法管理你的业务对象。

Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。

它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。

Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。


MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录


简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

提供映射标签,支持对象与数据库的ORM字段关系映射。

提供对象关系映射标签,支持对象关系组建维护。

提供xml标签,支持编写动态sql。


整体框架

6.png



MyBatisUtils工具类

public class MyBatisUtils {

       private static SqlSessionFactory sqlSessionFactory = null;

       static {

           String config="mybatis-config.xml";

           InputStream inputStream = null;

           try {

               inputStream = Resources.getResourceAsStream(config);

               //创建SqlSessionFactory对象

               sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

           } catch (IOException e) {

               throw new RuntimeException(e);

           }

       }

       //获取sqlSession的方法,非自动提交事务

       public  static SqlSession getSqlSession(){

           SqlSession sqlSession = null;

           if (sqlSessionFactory!=null){

               sqlSession =  sqlSessionFactory.openSession();//非自动提交事务

           }

           return sqlSession;

       }

       //获取sqlSession的方法,自动提交事务

       public  static SqlSession getSqlSessionAuto(){

           SqlSession sqlSession = null;

           if (sqlSessionFactory!=null){

               sqlSession =  sqlSessionFactory.openSession(true);//自动提交事务

           }

           return sqlSession;

       }

}

数据库表

5.png4.png




所需依赖:


spring依赖

spring事务依赖

mybatis依赖

mybatis-spring依赖

mysql驱动

德鲁伊连接池

单元测试

@Resource注解的依赖


pom.xml配置文件

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

   4.0.0

   org.example

   SSM01

   1.0-SNAPSHOT

   jar

   

       8

       8

       UTF-8

   

   

       

       

           org.springframework

           spring-context

           5.2.5.RELEASE

       

       

       

           org.springframework

           spring-tx

           5.2.5.RELEASE

       

       

           org.springframework

           spring-jdbc

           5.2.5.RELEASE

       

       

       

           org.mybatis

           mybatis

           3.5.1

       

       

       

           org.mybatis

           mybatis-spring

           1.3.1

       

       

       

           mysql

           mysql-connector-java

           5.1.9

       

       

       

           com.alibaba

           druid

           1.1.12

       

       

       

           junit

           junit

           4.11

           test

       

       

       

           jakarta.annotation

           jakarta.annotation-api

           2.1.0

       

   

   

       

           

               src/main/java

               

                   **/*.properties

                   **/*.xml

               

               false

           

       

   


jdbc.properties文件

jdbc.url=jdbc:mysql://116.205.131.136:3306/mysql?useUnicode=true&characterEncoding=utf-8

jdbc.user= root

jdbc.password= 111111

mybatis-config.xml配置文件


       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

       "https://mybatis.org/dtd/mybatis-3-config.dtd">

   

   

       

   

   

       

       

   


SpringConfig.xml配置文件

      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: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/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd">

       

       

       

       

       

       

               

               

               

       

   

   

       

       

       

       

   

   

       

       

       

       

   

 


Staff实体类

package com.qgs.pojo;

import java.util.Objects;

/**

* @author QGS

* @version 1.0.0

* @date 2023年03月09日 18:03:23

* @packageName com.object

* @className staff

* @describe TODO

*/

public class Staff {

   private int id;

   private String name;

   private String diploma;

   private String title;

   private String marriage;

   private String status;

   private String workTime;

   public Staff(int id, String name, String diploma, String title, String marriage, String status, String workTime) {

       this.id = id;

       this.name = name;

       this.diploma = diploma;

       this.title = title;

       this.marriage = marriage;

       this.status = status;

       this.workTime = workTime;

   }

   public Staff() {

   }

   @Override

   public String toString() {

       return "Staff{" +

               "id=" + id +

               ", name='" + name + '\'' +

               ", diploma='" + diploma + '\'' +

               ", title='" + title + '\'' +

               ", marriage='" + marriage + '\'' +

               ", status='" + status + '\'' +

               ", workTime='" + workTime + '\'' +

               '}';

   }

   public int getId() {

       return id;

   }

   public void setId(int id) {

       this.id = id;

   }

   public String getName() {

       return name;

   }

   public void setName(String name) {

       this.name = name;

   }

   public String getDiploma() {

       return diploma;

   }

   public void setDiploma(String diploma) {

       this.diploma = diploma;

   }

   public String getTitle() {

       return title;

   }

   public void setTitle(String title) {

       this.title = title;

   }

   public String getMarriage() {

       return marriage;

   }

   public void setMarriage(String marriage) {

       this.marriage = marriage;

   }

   public String getStatus() {

       return status;

   }

   public void setStatus(String status) {

       this.status = status;

   }

   public String getWorkTime() {

       return workTime;

   }

   public void setWorkTime(String workTime) {

       this.workTime = workTime;

   }

   @Override

   public boolean equals(Object o) {

       if (this == o) return true;

       if (o == null || getClass() != o.getClass()) return false;

       Staff staff = (Staff) o;

       return id == staff.id && Objects.equals(name, staff.name) && Objects.equals(diploma, staff.diploma) && Objects.equals(title, staff.title) && Objects.equals(marriage, staff.marriage) && Objects.equals(status, staff.status) && Objects.equals(workTime, staff.workTime);

   }

   @Override

   public int hashCode() {

       return Objects.hash(id, name, diploma, title, marriage, status, workTime);

   }

}

StaffDao接口

package com.qgs.dao;

import com.qgs.pojo.Staff;

import java.util.List;

/**

* @author QGS

* @version 1.0.0

* @date 2023年03月09日 19:58:46

* @packageName com.myabtis.dao

* @className StaffDao

* @describe TODO

*/

public interface StaffDao {

   //查询所有

   List selectALL();

 

}

StaffDao.xml-mapper映射文件


       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

       "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

           SELECT * FROM staff;    


Bank实体类

package com.qgs.pojo;

import java.util.List;

/**

* @author QGS

* @version 1.0.0

* @date 2023年03月28日 16:31:07

* @packageName com.qgs.pojo

* @className Bank

* @describe TODO

*/

public class Bank {

   String actno;

   double balance;

   public String getActno() {

       return actno;

   }

   public void setActno(String actno) {

       this.actno = actno;

   }

   public double getBalance() {

       return balance;

   }

   public void setBalance(double balance) {

       this.balance = balance;

   }

   public Bank(String actno, double balance) {

       this.actno = actno;

       this.balance = balance;

   }

   public Bank() {

   }

   @Override

   public String toString() {

       return "Bank{" +

               "actno='" + actno + '\'' +

               ", balance=" + balance +

               '}';

   }

}

public interface BankDao {

   List selectAllBank();

}

BankDao.xml


       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

       "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

           SELECT * FROM bank    


StaffDaoService接口

public interface StaffDaoService {

   List selectALL();

   List selectAllBank();

}

负责注入的注解


@Value


@Autowired


@Qualifier


@Resoure


当属性是简单数据类型的时候,可以使用@Value注解进行注入


@Value是用来代替


@Value可以用在属性、方法、构造方法上


@Autowired(注入)注解

@Autowired可以用来注入非简单类型。单独使用@Autowired注解:默认根据类型装配。[默认byType]

@Autowired可以出现在构造方法,方法,参数,属性,别的注解上。


@Qualifier(注入)注解

当有多个实现类对象时,@Autowired和Qualifier联合使用,可以根据名称进行装配

Qualifier可以指定要执行的实现类对象


使用@Resource注解注入


@Resource注解是JDK扩展包中的,也就是属于JDK的一部分。所以该注解是标准注解,更加具有通用性。(JSR-250标准中指定的注解类型。JSR是Java规范提案)


@Autowired注解是Spring框架自己的。


@Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。


@Autowired注解默认根据类型装配bybyType,想根据名称装配,需要配合@Qualifier注解一起用。


@Resource注解用在属性上,setter方法上。


@Autowired注解用在属性上,setter方法上,构造方法上,构造方法参数上。


@Resource注解是JDK扩展包,不在JDK当中,需要引入依赖。


Spring6不在支持JavaEE,它支持的是JakartaEE9。


Spring6使用这个依赖


3.png


Spring5使用这个依赖


2.png

实现类

@Service

public class StaffDaoServiceImpl implements StaffDaoService {

   @Resource(name ="staffDao")

   StaffDao staffDao;

   @Resource(name ="bankDao")

   BankDao bankDao;

   public void setStaffDao(StaffDao staffDao) {

       this.staffDao = staffDao;

   }

   @Override

   public List selectALL() {

       return staffDao.selectALL();

   }

   @Override

   public List selectAllBank() {

       return bankDao.selectAllBank();

   }

}

测试类

@Test

public void test(){

   ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");

   StaffDaoService staffDaoServiceImpl = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);

   List staffs = staffDaoServiceImpl.selectALL();

   for (Staff staff : staffs) {

       System.out.println(staff.toString());

   }

   StaffDaoService staffDaoServiceImpl1 = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);

   List banks = staffDaoServiceImpl1.selectAllBank();

   for (Bank bank : banks) {

       System.out.println(bank.toString());

   }

}


1.png

Spring.xml主配置文件引入其他Spring.xml子配置文件


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
Spring Security 入门
|
1天前
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
29 11
|
2天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
71 7
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
65 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
25 1
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
67 4
|
2月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
57 5
|
1月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
79 3
|
2月前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
41 1
|
3月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
689 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
下一篇
开通oss服务