首先明确:
MyBatis:持久层,操作数据
Spring:容器类型
SpringMVC:web层,处理前端请求
三层架构:持久层、业务层、表现层
Mybatis
持久层框架 实现了ORM中对象(表)关系映射,ORM框架,完整的ORM框架
Object Relational Mapping:对象关系映射
表结构可以使用类描述
一个对象就是表中的一条数据
属性----字段
实例
- 创建项目,添加依赖
<dependencies>
<!-- MyBatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 数据库连接驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
- Idea建立与数据库的连接
- 创建实体类
- 创建核心配置文件
<?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>
<!-- 环境:复数,支持多环境开发 -->
<environments default="development">
<environment id="development">
<!-- 事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 数据源、连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/java0726"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<!-- 映射文件:SQL语句,resource使用相对于类路径的资源引用直接告诉 MyBatis 到哪里去找映射文件-->
<mapper resource="mappers/PersonMapper.xml"/>
</mappers>
</configuration>
- 创建映射文件
在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样就可以用全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
- 测试
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
用SqlSessionFactory获取SqlSession:SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
Mybatis执行流程
- 读取核心配置文件
- 创建工厂对象
- 获取SqlSession对象
- 执行数据操作
- 提交事务、释放资源
MyBatis核心API
- Resources
工具类,用于在类路径或者其他位置加载资源文件(核心配置文件) - SqlSessionFactoryBuilder
用于创建核心类SqlSessionFactory
可以从XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例 - SqlSessionFactory
MyBatis项目工程核心类,用于创建SqlSession对象openSession(事务提交方式) - SqlSession
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法执行数据操作的核心类
使用接口代理的方式实现CRUD
创建dao接口
配置
XML映射器
更详细的教程:
https://blog.csdn.net/m0_66734853/article/details/124563447
Spring
概述
轻量级的,可以一站式开发企业应用程序的容器类型的IOC(控制反转)和AOP(面向切面)的框架
核心 | 描述 |
---|---|
IOC | Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。 |
AOP | Aspect Oriented Programming 的简写,译为“面向切面编程”。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。 |
五大模块:
IOC容器:
传统创建和管理对象是由程序员完成(new),对象与对象的复杂关系能不能交给“第三方”管理,IOC容器
若对象的创建和管理交给“第三方”IOC容器,当我们需要完成特定功能时,只需要向容器“索要”特定的对象
控制反转:
对象创建和管理方式发生了反转
传统:我们new
容器:容器完成(程序自身)
案例
1.创建工程,添加依赖
2. 配置容器(核心配置文件)
3. 定义实体类,添加到容器中
4. 测试代码
以下是映射文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
基础知识
依赖注入
模块化配置
使用主配置文件
不使用主配置文件
常见注解
-
添加命名空间
-
添加注解扫描包
-
常见注解:
- @Component
使用位置:在类上使用
作用:是将当前类对象注入到容器中,默认名称是类名
@Controller:将controller层对象注入到容器中
@Service:将Service层对象注入到容器中
@Repository:将Dao层对象注入到容器中 - @Value
使用位置:可以在属性上直接使用,也可以在set方法上使用,相当于Setter注入
作用:为属性赋值(属性为值类型)
- @Autowired 自动装配
使用位置:在属性(引用类型对象)上使用 (一个对象)
作用:在容器中查找当前属性类型的对象,为当前属性赋值
@Qualifier(“c2”)
通常与@Autowired连用,在类型查找的基础上,按照名称查找对象
(即先按类型查找对象,再按名称查找)
- @Resource
使用位置:在属性(引用类型对象)上使用
作用:为当前属性注入值,如果容器中只有一个当前类型对象,可以直接使用@Resource按类型查找对象为当前属性赋值
作用类似于:
如果容器中存在多个当前类型对象,可以使用@Resource(name = “对象名称”)先按类型,再按名称找对象
作用类似于:
- @Scope
作用:指定当前对象是否是单例
@Scope("protoType")
public class Person{
AOP
通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP研究的不是每一层内部如何开发,而是同一层面上各个模块之间的共性功能。将共性功能抽离,使得业务逻辑各部分之间的耦合度降低,方便进行统一的处理和维护,提高程序的可重用性,可以进行细化的模块开发,同时提高了开发的效率。