1> 三层架构
- 界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果的。(jsp ,html ,servlet)
- 业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据
- 数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等的。
1.1、三层架构对应的包
- 界面层: controller包 (servlet)
- 业务逻辑层: service 包(XXXService类)
- 数据访问层: dao包(XXXDao类)
1.2、三层中类的交互
- 用户使用界面层–> 业务逻辑层—>数据访问层(持久层)–>数据库(mysql)
1.3、三层对应的处理框架
- 界面层—servlet—springmvc(框架)
- 业务逻辑层—service类–spring(框架)
- 数据访问层—dao类–mybatis(框架)
2>框架
- 框架是一个舞台, 一个模版
- 模版:
- 框架是一个模块
- 框架中定义好了一些功能。这些功能是可用的。
- 可以加入项目中自己的功能, 这些功能可以利用框架中写好的功能。
- 框架是一个软件,半成品的软件,定义好了一些基础功能, 需要加入你的功能就是完整的。基础功能是可重复使用的,可升级的。
- 框架特点:
- 框架一般不是全能的, 不能做所有事情
- 框架是针对某一个领域有效。 特长在某一个方面,比如mybatis做数据库操作强,但是他不能做其它的。
- 框架是一个软件
3> mybatis框架
- 一个框架,早期叫做ibatis, 代码在github。
- mybatis是 MyBatis SQL Mapper Framework for Java (sql映射框架)
- 1)sql mapper :sql映射
- 可以把数据库表中的一行数据映射为 一个java对象。 一行数据可以看做是一个java对象。操作这个对象,就相当于操作表中的数据
- 2) Data Access Objects(DAOs) : 数据访问 ,对数据库执行增删改查。
4>mybatis功能
- 1、提供了创建Connection ,Statement, ResultSet的能力 ,不用开发人员创建这些对象了
- 2、提供了执行sql语句的能力, 不用你执行sql
- 3、提供了循环sql, 把sql的结果转为java对象, List集合的能力
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
stuList.add(stu);
}
- 4、提供了关闭资源的能力,不用你关闭Connection, Statement, ResultSet
5>总结
- 开发人员做的是: 提供sql语句 最后是:
- 开发人员提供sql语句–mybatis处理sql—开发人员得到List集合或java对象(表中的数据)
- 总结:
- mybatis是一个sql映射框架,提供的数据库的操作能力。增强的JDBC,
- 使用mybatis让开发人员集中精神写sql就可以了,不必关心Connection,Statement,ResultSet的创建,销毁,sql的执行。
6>利用mybatis来查询数据库表中信息
6.1、具体实现
- 1、利用navicat创建mysqls数据库和表
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cc9a6e23eb0e5836ed2faee81eb78295.png)
- 2、创建maven工程
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fcc25e676b1203e2fe99586771a58472.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/72b25e93ee99095863f213c19159b6fb.png)
- 4、删除默认创建的App类文件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b638c2721d71f9355b5da245736d35e0.png)
- 5、配置pom.xml,建立mysql驱动和mybatis依赖以及maven插件
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
- 这里插件的作用是
- 可以将xml文件可以在classes下生成
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>***.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
- 6、编写Student实体类
- 创建包 com.bjpowernode.domain, 包中创建 Student 类 package
com.bjpowernode.domain;
package com.bjpowernode.domain;
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", 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;
}
}
- 7、编写编写 Dao 接口 StudentDao
- 创建 com.bjpowernode.dao包,创建 StudentDao 接口
package com.bjpowernode.dao;
import com.bjpowernode.domain.Student;
import java.util.List;
public interface StudentDao {
List<Student> selectStudents();
}
- 8、编写 Dao 接口 Mapper 映射文件 StudentDao.xml
- 要求:
- 1、在 dao 包中创建文件 StudentDao.xml
- 2、要StudentDao.xml 文件名称和接口 StudentDao 一样,区分大小写的一样
<?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="">
<select id="selectStudents" resultType="com.bjpowernode.domain.Student">
<!--
<select>: 查询数据, 标签中必须是 select 语句
id: sql 语句的自定义名称,推荐使用 dao 接口中方法名称,
使用名称表示要执行的 sql 语句
resultType: 查询语句的返回结果数据类型,使用全限定类名
-->
</select>
</mapper>
- 9、创建 MyBatis 主配置文件
- 项目 src/main 下创建 resources 目录,设置 resources 目录为 resources root
- 创建主配置文件:名称为 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>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- 配置 mybatis 环境 -->
<environments default="mydev">
<!--id: 数据源的名称 -->
<environment id="mydev">
<!-- 配置事务类型:使用 JDBC 事务(使用 Connection 的提交和回滚) -->
<transactionManager type="JDBC"/>
<!-- 数据源 dataSource :创建数据库 Connection 对象
type: POOLED 使用数据库的连接池
-->
<dataSource type="POOLED">
<!-- 连接数据库的四个要素 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
<property name="username" value="root"/>
<property name="password" value="111"/>
</dataSource>
</environment>
<!--配置线上数据库这里仅为演示-->
<environment id="online">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/onlinedb"/>
<property name="username" value="root"/>
<property name="password" value="333"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告诉 mybatis 要执行的 sql 语句的位置 -->
<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
</mappers>
</configuration>
- 10、创建测试类 MyBatisTest
- com/bjpowernode/MybtisTest.java
package com.bjpowernode;
import com.bjpowernode.domain.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybtisTest {
public static void main(String[] args) throws IOException {
String config = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(config);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession();
List<Student> studentList =
session.selectList("com.bjpowernode.dao.StudentDao.selectStudents");
studentList.forEach( student -> System.out.println(student));
session.close();
}
}
6.2、缺少mybatis.xml解决方案
- 将mybatis.xml文件复制粘贴到traget/classes下
6.3、配置日志
- mybatis.xml 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数
<configuration>
下面第一个加
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>