软件开发常用架构
三层架构包含的三层
- 界面层(Spring MVC框架):表示层、视图层,主要功能是接受用户的数据,显示请求的处理结果。
- 业务逻辑层(Spring框架):接收表示传递过来的数据,检查数据,计算业务逻辑,调用数据访问层获取数据。
- 数据访问层(MyBatis框架):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
三层的处理请求的交互
- 用户---> 界面层--->业务逻辑层--->数据访问层--->DB数据库

MyBatis框架快速入门
准备工作及要求
我的本机mysql环境:springdb数据库内创建一个student表,里面有两组数据,要求用mybatis框架完成sql查询,打印出这两组数据。


新建一个maven项目
可以参过以前我写的一个博客:maven配置使用,到3.2即可,后续一些步骤是配tomcat,暂时用不到。
在src目录下,把默认的main文件夹删除,添加java和resources两个文件夹,并分别将其标记为Sources Boot
和Resources Boot文件,在java文件夹中创建我们的包,如我的是cn.gs。
具体配置
实现步骤:
1.新建的student表
2.加入maven的mybatis坐标,mysql驱动的坐标
3.创建实体类,Student--保存表中的一行数据
4.创建持久层的dao接口,定义操作数据库的方法
5.创建一个mybatis的配置文件
叫做sql映射文件:写sql语句的,一般一个表一个sql文件
这个文件是xml文件,文件名与接口文件名一样
6.创建mybatis的主配置文件
一个项目就是一个配置文件
主配置文件提供了数据库的连接信息和sql映射文件的位置信息
7.创建使用mybatis类
通过mybatis来访问数据库
mysql中插入学生表,已完成
maven的pom.xml配置文件中,依赖项中加入mybatis和mysql驱动包,并在编译build里面加入扫描到.xml的配置。pom.xml详细信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.gs</groupId>
<artifactId>mybatis-blog-test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mybatis-blog-test Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
<scope>compile</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
<build>
<!--配置能编译.xml文件-->
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
- 在cn.gs下创建一个domain包,包下面创建一个Student类
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
//再生成它的 toString 和 getter/setter方法
}
- 在cn.gs下创建一个dao包,包下面创建一个StudentDao接口
public interface StudentDao {
//查询student表所有数据
public List<Student> selectStudents();
}
创建mybatis的配置文件,叫做sql映射文件,文件名与接口文件名一样
即在dao包下创建StudentDao.xml文件
<?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 namespace="cn.gs.dao.StudentDao">
<select id="selectStudents" resultType="cn.gs.domain.Student">
select id,name,email,age from Student order by id
</select>
</mapper>
<!--namespace: 唯一值,要求你使用dao接口的全限定名称-->
<!--select 表示执行查询,也可用其他,如update、delete、insert等-->
<!--id: 执行sql的唯一标识,要求你使用接口中定义的方法名称-->
<!--resultType:表示返会结果的类型,如我们查询得到的就是Student类,写全限定名称-->
- 在resources目录下创建mybatis.xml作为主配置文件,里面定义连接的参数、配置等
<?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="mydev">
<!-- id: 一个唯一值,自定义,表示环境名称-->
<environment id="mydev">
<!-- transactionManager: mybatis的事物类型
type: JDBC(表示使用jdbc中的Connection对象的commit,rollback做事物处理)-->
<transactionManager type="JDBC"/>
<!-- dataSource: 表示数据源,连接数据库-->
<dataSource type="POOLED">
<!--数据库的驱动类名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--连接数据库的url字符串-->
<property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
<!--mysql中我的用户名:root-->
<property name="username" value="root"/>
<!--root对应的登录密码:root-->
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="online">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--sql映射文件-->
<mappers>
<mapper resource="cn/gs/dao/StudentDao.xml"/>
</mappers>
</configuration>
- 在cn.gs下面创建一个APP类,完成测试
public class App
{
public static void main( String[] args ) throws IOException {
//访问mybatis读取Student数据
//1.定义mybatis主配置文件的名称,从类路径的跟开始(target/classes)
String config = "mybatis.xml";
//2.读取这个config文件
InputStream is = Resources.getResourceAsStream(config);
//3.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
//5.【重要】获取SqlSession对象,从SqlSessionFactory中获取
SqlSession sqlSession = factory.openSession();
//6.指定要执行的sql语句的表示,sql映射文件中的namesapce+ "." +标签的id值
String sqlId = "cn.gs.dao.StudentDao" + "." + "selectStudents";
//7.执行sql语句
List<Student> list = sqlSession.selectList(sqlId);
list.forEach(stu -> System.out.println(stu));
//8.关闭SqlSession对象
sqlSession.close();
}
}