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配置文件
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配置文件
SpringConfig.xml配置文件
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映射文件
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
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使用这个依赖
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;
}
@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());
}
}
<import resource="SpringConfig2.xml"/>