mybatis 02: 添加并简单使用mybatis
2024-08-23 06:29:35
三层架构
项目开发时,遵循的一种设计模式,分为三层
- 界面层:用来接收客户端输入的数据,调用业务逻辑层进行功能处理,返回结果给客户端
- 过去的servlet就完成了界面层的功能(但是他做的更多)
- 业务逻辑层:用来进行整个项目的业务逻辑处理,向上为界面层提供处理结果,向下问数据访问层要数据
- 数据访问层:专门用来进行数据库的增删改查操作,向上为业务逻辑层提供数据
- 界面层:用来接收客户端输入的数据,调用业务逻辑层进行功能处理,返回结果给客户端
各层之间的调用顺序是固定的,不允许跨层访问
- 界面层 < ----- > 业务逻辑层 < ----- > 数据访问层
图示
常用的框架
什么是框架
- 框架是一个半成品软件,将所有的公共的,重复的功能解决掉,帮助程序员快速高效的进行项目开发
- 可复用,可扩展
- 框架是一个半成品软件,将所有的公共的,重复的功能解决掉,帮助程序员快速高效的进行项目开发
SSM框架
- Spring:它是整合其他框架的框架,他的核心是IOC和AOP,由20多个模块组成,在很多领域都提供了很好的问题解决方案
- SpringMVC:它是Spring家族的一员,专门用来优化控制器(servlet),提供了极简的数据提交,数据携带,页面跳转等功能
- MyBatis:它是一个持久化层的框架,用来进行数据库访问的优化,专注于sql语句,极大的简化了jdbc的访问
MyBatis框架
简介
mybatis框架本是apache基金会的一个开源项目,原名:ibatis
2010年这个项目由apache software foundation迁移到了google code,并改名为mybatis
2013年11月迁移到github上
MyBatis执行逻辑图
添加并简单使用MyBatis框架
总体步骤:添加依赖 + 添加配置文件
具体步骤
新建数据库,数据表,插入测试数据
- student.sql的脚本示例
CREATE DATABASE ssm DEFAULT CHARSET utf8; use ssm; CREATE TABLE `student` (
`id` int(11) AUTO_INCREMENT primary key ,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into student(name,email,age) values('张三','zhangsan@126.com',22);
insert into student(name,email,age) values('李四','lisi@126.com',21);
insert into student(name,email,age) values('王五','wangwu@163.com',22);
insert into student(name,email,age) values('赵六','zhaoliun@qq.com',24); select * from student;
新建maven项目,选择quickstart模板
调整目录结构
新增缺失的目录
删除自动生成的测试类
修改pom文件
- 添加mybatis依赖
- 添加mysql依赖
<!-- 添加mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency> <!-- 添加mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
- 添加资源文件的指定(指定一个目录后,原来默认的resources资源目录会失效,所以所有需要的资源目录都要手动指定)
<build>
<!-- 添加资源文件的指定-->
<resources>
<resource>
<!-- 目标目录1 -->
<directory>src/main/java</directory>
<includes>
<!-- 被包括的文件类型 -->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource> <resource>
<!-- 目标目录2 -->
<directory>src/main/resources</directory>
<includes>
<!-- 被包括的文件类型 -->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
idea中添加数据库的可视化
添加jdbc.properties属性文件(数据库连接文件:添加到/src/main/resources/目录下)
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://ip:3306/数据库名称?useUnicode=true&characterEncoding=utf8
jdbc.username=XXXX
jdbc.password=YYYY
添加SqlMapConfig.xml文件(mybatis的核心配置文件:添加到/src/main/resources/目录下)
- 配置示例
<?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> <!-- 读取属性文件(jdbc.properties)
resource:从resources目录下找指定名称的文件加载
url:使用绝对路径加载属性文件
-->
<properties resource="jdbc.properties"/> <!-- 设置数据库的环境变量(数据库连接配置) -->
<environments default="develop">
<!-- 开发时在公司使用的数据库配置
id:就是提供给environments的default属性使用
根据实际情况可以有多个environment配置
-->
<environment id="develop">
<!-- 配置事务管理
type:指事务管理的方式
JDBC:事务的控制交给程序员处理
MANAGED:由容器(Spring)来管理事务
-->
<transactionManager type="JDBC"/>
<!-- 配置数据源
type:指定不同的的配置方式
JNDI:java命名目录接口,在服务器端进行数据库连接池的管理
POOLED:使用数据库连接池
UNPOOLED:不使用数据库连接池
-->
<dataSource type="POOLED">
<!--
配置数据库连接的基本属性,用到数据库连接配置文件(jdbc.properties)
-->
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!--
必须在mybatis核心配置文件中注册mapper.xml文件
resource:从resources目录下找指定名称的文件加载
url:使用绝对路径加载属性文件
class:动态代理方式下的注册
-->
<mappers>
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
创建实体类Student,用来封装数据
- 对照数据表构建实体类
添加完成学生表的增删改查功能的StudentMapper.xml文件(添加到/src/main/resources/目录下),并在mybatis的核心配置文件中注册
- 配置示例
<!-- 映射文件的头信息 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--
mapper:是整个文件的大标签,用来开始和结束标签
属性仅1个:
namespace:指定命名空间(相当于包名),用来区分不同的mapper.xml文件中相同的id属性
-->
<mapper namespace="wangxun">
<!-- 完成查询全部学生的功能
原先操作:List<Student> getAll();
现在:
通过namespace和id指定要操作的sql语句
resultType:指定返回的查询结果集的类型,如果是集合,则必须是泛型
且必须用该类型所在的具体包名来定位该类型(为了后期利用反射生成该类型的数据对象)
parameterType:如果有参数,则通过他来指定参数的类型
-->
<select id="getAll" resultType="com.example.pojo.Student">
select
id, name, email, age
from
student
</select>
</mapper>
创建测试类,进行功能测试
- 测试代码示例
package com.example.test; import com.example.pojo.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.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; public class TestStudent {
@Test
public void testStudent() throws IOException {
//使用文件流获取核心配置文件SqlMapConfig.xml
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//取出sqlSession对象
SqlSession sqlSession = factory.openSession();
//完成查询操作
List<Student> list = sqlSession.selectList("wangxun.getAll");
list.forEach(System.out::println);
//关闭sqlSession
sqlSession.close();
}
} /*
输出结果:
Student{id=1, name='张三', email='zhangsan@126.com', age=22}
Student{id=2, name='李四', email='lisi@126.com', age=21}
Student{id=3, name='王五', email='wangwu@163.com', age=22}
Student{id=4, name='赵六', email='zhaoliun@qq.com', age=24} Process finished with exit code 0
*/
最新文章
- java开发中的23中设计模式详解--大话设计模式
- php变量函数,回调函数
- js-2
- Web 前端颜色值--字体--使用,整理整理
- Git使用之设置SSH Key
- paper 91:边缘检测近期最新进展的讨论
- dshow,Sample Grabber 从摄像头采集
- 使用定时器实现JavaScript的延期执行或重复执行
- splay入门
- 配置tomcat连接器后,启动服务报错“No Certificate file specified or invalid file format";异常
- POJ 2632 Crashing Robots(较为繁琐的模拟)
- hdu 4836 The Query on the Tree(线段树or树状数组)
- 从 art-template 模版维护到动态加载的思考
- Hibernate学习总汇
- linux shell脚本、命令学习
- (cvpr2019) The Degradation Model and Solution of DPSR
- Windows 安装配置MongoDB
- Robot Framework 自动化框架大纲
- 【OpenFOAM案例】01 elbow
- loadrunner&#160;脚本开发-基本知识