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

编程入门 行业动态 更新时间:2024-10-07 05:29:51

<a href=https://www.elefans.com/category/jswz/34/1755206.html style=手牵手入门Spring5.2.5.RELEASE整合Mybatis3.5"/>

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

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。

整体框架

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;}
}

数据库表

 

所需依赖:

spring依赖
spring事务依赖
mybatis依赖
mybatis-spring依赖
mysql驱动
德鲁伊连接池
单元测试
@Resource注解的依赖

pom.xml配置文件<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0"xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>SSM01</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><mavenpiler.source>8</mavenpiler.source><mavenpiler.target>8</mavenpiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- 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><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--   @Resource注解的依赖--><dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId><version>2.1.0</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build></project>

jdbc.properties文件jdbc.url=jdbc:mysql://116.205.131.136:3306/mysql?useUnicode=true&amp;characterEncoding=utf-8
jdbc.user= root
jdbc.password= 111111

mybatis-config.xml配置文件<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis//DTD Config 3.0//EN"".dtd">
<configuration><!-- 设置日志 --><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><mappers><!-- 将dao包下的所有mapper文件全部扫描 --><package name="com.qgs.dao"/></mappers></configuration>

SpringConfig.xml配置文件<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xmlns:context=""xmlns:tx="" xmlns:aop=""xsi:schemaLocation=" .xsd .xsd  .xsd  .xsd"><!--        组件扫描--><context:component-scan base-package="com.qgs"></context:component-scan><!--引入外部文件--><context:property-placeholder location="classpath:jdbc.properties"/><!--        声明数据来源--><bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- 声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory对象,之后就可以获取SqlSession对象 --><bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 指定数据源 --><property name="dataSource" ref="dateSource"/><!-- 指定mybatis主配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定SqlSessionFactory对象的名称 --><property name="sqlSessionFactoryBeanName" value="factory"/><!-- 指定基本包,dao接口所在的包名 --><property name="basePackage" value="com.qgs.dao"/></bean></beans>

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() {}@Overridepublic 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;}@Overridepublic 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);}@Overridepublic 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<Staff> selectALL();}

StaffDao.xml-mapper映射文件<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd">
<mapper namespace="com.qgs.dao.StaffDao"><select id="selectALL" resultType="com.qgs.pojo.Staff">SELECT * FROM staff;</select></mapper>
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() {}@Overridepublic String toString() {return "Bank{" +"actno='" + actno + '\'' +", balance=" + balance +'}';}
}

public interface BankDao {List<Bank> selectAllBank();
}

BankDao.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd">
<mapper namespace="com.qgs.dao.BankDao"><select id="selectAllBank" resultType="com.qgs.pojo.Bank">SELECT * FROM bank</select></mapper>

StaffDaoService接口public interface StaffDaoService {List<Staff> selectALL();List<Bank> selectAllBank();
}

负责注入的注解

@Value

@Autowired

@Qualifier

@Resoure

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

@Value是用来代替<property name="name" 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使用这个依赖

Spring5使用这个依赖

 

实现类@Service
public class StaffDaoServiceImpl implements StaffDaoService {@Resource(name ="staffDao")StaffDao staffDao;@Resource(name ="bankDao")BankDao bankDao;public void setStaffDao(StaffDao staffDao) {this.staffDao = staffDao;}@Overridepublic List<Staff> selectALL() {return staffDao.selectALL();}@Overridepublic List<Bank> selectAllBank() {return bankDao.selectAllBank();}
}

测试类@Test
public void test(){ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");StaffDaoService staffDaoServiceImpl = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);List<Staff> staffs = staffDaoServiceImpl.selectALL();for (Staff staff : staffs) {System.out.println(staff.toString());}StaffDaoService staffDaoServiceImpl1 = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);List<Bank> banks = staffDaoServiceImpl1.selectAllBank();for (Bank bank : banks) {System.out.println(bank.toString());}
}

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

<import resource="SpringConfig2.xml"/>
如有错误请指正,谢谢

更多推荐

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

本文发布于:2024-02-07 08:34:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1754645.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:手牵手   入门   RELEASE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!