在项目开发中,遵循的形式模式分为三种:
1.界面层:用来接收客户端的输入,调用业务逻辑层进行功能处理,返回结果给客户端,(过去的servlet就是界面层的功能)
2.业务逻辑层:用来进行整个项目的业务逻辑处理,向上为界面层提供处理结果,向下问数据层要数据
3.数据访问层:专门进行数据库的增删改查操作。想上为业务逻辑层提供数据
各层之间的调用顺序是固定的,不能跨层访问
**界面层<——>业务逻辑层<——>数据访问层
Spring:它是整合其它框架的框架.它的核心是IOC和AOP.它由20多个模块构成.在很多领域都提供了很好的解决方案.是一个大佬级别的存在.
SpringMVC:它是Spring家族的一员.专门用来优化控制器(Servlet)的.提供了极简单数据提交,数据携带,页面跳转等功能.
MyBatis:是持久化层的一个框架.用来进行数据库访问的优化.专注于sql语句.极大的简化了JDBC的访问.
它是一个半成品软件.将所有的公共的,重复的功能解决掉,帮助程序快速高效的进行开发.它是可复用,可扩展的.
5.什么是MyBatis框架?MyBatis 本是 apache 的一个开源项目iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github,最新版本是 MyBatis 3.5.7 ,其发布时间是 2021 年 4月 7日。
MyBatis完成数据访问层的优化.它专注于sql语句.简化了过去JDBC繁琐的访问机制.
1)添加依赖
2)添加配置文件
1.新建库建表
2.新建maven项目,选quickstart模板
3.修改目录,添加缺失的目录,修改目录属性
4.修改pom.xml文件,添加MyBatis的依赖,添加mysql的依赖
org.mybatis
mybatis
3.5.6
mysql
mysql-connector-java
5.1.32
5.修改pom.xml文件,添加资源文件指定
src/main/java ***.properties src/main/resources ***.properties
6.在idea中添加数据库的可视化
**注意:**若MySQL的jar包是8版本以上的
需要修改serverTimezone=Asia/Shanghai
7.添加jdbc.properties属性文件(数据库的配置)
jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=root
8.添加SqlMapConfig.xml文件,MyBatis的核心配置文件
9.创建实体类Student,用来封装数据
package com.xin.entity;
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
public Student() {
}
public Student(String name, String email, Integer age) {
this.name = name;
this.email = email;
this.age = age;
}
public Student(Integer id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = 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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
" + id +
", name='" + name + ''' +
", email='" + email + ''' +
", age=" + age +
'}';
}
}
10.添加完成学生表的增删改查的功能的StudentMapper.xml文件
select id,name,email,age from student
11.创建测试类,进行功能测试
package com.xin.test;
import com.xin.entity.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyTest {
SqlSession sqlSession;
@Before //在所有的@Test方法执行前先执行这段代码
public void openSession() throws IOException {
//使用文件流读取核心配置文件SqlMapConfig.xml
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory工厂对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//取出SqlSession对象
sqlSession=factory.openSession();
}
@After
public void closeSqlSession() {
//关闭SqlSession
sqlSession.close();
}
@Test
public void testGetAll() throws IOException {
//完成查询操作
List list=sqlSession.selectList("zar.getAll");
list.forEach(student -> System.out.println(student));
}
@Test
public void testById() throws IOException {
//按主键查学生
Student student=sqlSession.selectOne("zar.getById",1);
System.out.println(student);
}
@Test
public void testGetByName() throws IOException {
//进行模糊查询
List list=sqlSession.selectList("zar.getByName","李");
list.forEach(student-> System.out.println(student));
}
@Test
public void testInsert() throws IOException {
int num=sqlSession.insert("zar.insert",new Student("梨花","1111@qq.com",18));
System.out.println(num);
//切记切记切记:在所有的增删改后必须手动提交事务!!!设置手动提交
sqlSession.commit();
}
@Test
public void testDelete() throws IOException {
int num=sqlSession.delete("zar.delete",5);
System.out.println(num);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testUpdate() throws IOException {
int num=sqlSession.update("zar.update",new Student(3,"李名","3333@qq.com",17));
System.out.println(num);
sqlSession.commit();
}
}
7.MyBatis对象分析
1.Resources类
就是解析SqlMapConfig.xml文件,创建出相应的对象
//使用文件流读取核心配置文件SqlMapConfig.xml
InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml");
2.SqlSessionFactory接口
DefaultSqlSessionFactory是实现类
SqlSessionFactory是MyBatis中的一个重要的对象,它是用来创建SqlSession对象的,而SQLSession是用来操作数据库的。 SqlSessionFactory对象可以通过SqlSessionFactoryBuilder来获得, 而SqlSessionFactoryBuilder则可以从XML配置文件或预先定制的Configuration实例构建出SqlSessionFactory的实例。 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,而 SqlSessionFactory 唯一的作用就是生产 MyBatis 的核心接口对象 SqlSession ,所以它的责任是唯一的。
//创建SqlSessionFactory工厂对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);3.SqlSession 接口
DefaultSqlSession实现类
默认的 openSession()方法没有参数,它会创建有如下特性的 SqlSession: 1.会开启一个事务(也就是不自动提交)。 2.将从由当前环境配置的 DataSource 实例中获取 Connection 对象。事务隔离级别将会使用驱动或数据源的默认设置。 3.预处理语句不会被复用,也不会批量处理更新。
//取出SqlSession对象 sqlSession=factory.openSession();8.为实体类注册别名
9.设置日志输出
在控制台输出如下:



