21.04.29
三层架构
1.界面层:和用户打交道,接受用户的请求参数,显示处理结果(jsp,html,servlet)
2.业务逻辑层:接受了界面层传递的数据,计算逻辑,调用数据库,获取数据
3.数据访问层:就是访问数据库,执行对数据的增删改查
三层中类的交互:
用户使用界面–>业务逻辑层–>数据访问层–>数据库
三层对应的处理框架
界面层----servlet----springmvc
业务逻辑层----service类----spring
数据访问层----dao类----mybatis
框架
框架是一个软件,半成品的软件,定义好了一些基础功能,需要加入你的功能就是完整的。基础功能是可重复使用的,可升级的
框架中定义好了一些功能-这些功能是可用的
框架特点:
1,框架一般不是全能的,不能做所有事情
2.框架是针对某一个领域有效。特长在某一个方面,比如mybatis做数据库操作强,但是他不能
mrybati提供的功能:
1.提供了创建Conneotion ,statement,Resultset的能力,不用开发人员创建这些对象了
2,提供了执行sq1语句的能力,不用你执行sql
3.提供了循环sql,把sql的结果转为java对象,List集合的能力
4.提供了关闭资源的能力/不用你关闭Connection,statement,Resultset
用mybatis实现对student表的全部查询
实现步骤
1、新建的student表
2.加入maven的mybatis坐标,mysql驱动的坐标
3,创建实体类,student–保存表中的一行数据的
4.创建持久层的dao接口,定义操作数据库的方法
5、创建一个mybatis使用的配置文件。叫做sql映射文件:写sql语句的。一般一个表一个sql映射文件。这个文件是xml文件。
6.创建mybatis的主配置文件:一个项目就一个主配置文件。主配置文件提供了数据库的连接信息和sql映射文件的位置信息
7.创建使用mybatis类,通过mybatis访问数据库
Student.java
package com.bjpowernode.domain;
public class Student {
private Integer id;
private String name;
private String email;
private Integer 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=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
StudentDao.java
package com.bjpowernode.dao;
import com.bjpowernode.domain.Student;
import java.util.List;
public interface StudentDao {
public List<Student> selectStudents();
}
StudentDao.xml
<?xml version="1.0" encoding="UTF-8" ?> select * from Blog where id = #{id}<!--
select:表示查询操作
id: 要执行的sql语法的唯一标识,mybatis会使用这个id值来找到要执行的sql语句
可以自定义,但是要求使用接口中的方法名称
resultType: 表示结果类型的,是sql语句执行后得到的ResultSet,遍历这个ResultSet得到的Java对象的类型
值写的是类型的全限定名称
-->
<select id="selectStudents" resultSetType="com.bjpowernode.domain.Student" >
select id,name,email,age from student order by id
</select>
图片: pom.xml
mybatis依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
mysql驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?><!--环境配置:数据库的连接信息
default: 必须和某个environment的id值一样
告诉mybatis使用哪个数据库的连接信息
-->
<environments default="development">
<!--
environment: 一个数据库信息的配置,环境
id: 一个唯一值,自定义,表示环境的名称
-->
<environment id="mydev">
<!--
transactionManager: mybatis的事物类型
type:JDBC(表示使用jdbc中的connection对象,rollback做事务处理)
-->
<transactionManager type="JDBC"/>
<!--
dataSource:表示数据源,连接数据库的
type: 表示数据源的类型,POOLED表示使用连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="111111"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--
一个mapper标签指定一个文件的位置
从类路径开始的路径信息。 target/classes(类路径)之后
-->
<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
</mappers>
MyApp.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 MyApp {
public static void main(String[] args) throws IOException {
//访问mybatis读取student数据
//1.定义mybatis主配置文件的名称,从类路径开始
String config=“mybatis.xml”;
//2.读取这个config表示的文件
InputStream in= Resources.getResourceAsStream(config);
//3.创建了SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder bulider=new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory=bulider.build(in);
//5.获取SqlSession对象,从SsqlSessionFactory中获取SqlSession
SqlSession sqlSession=factory.openSession();
//6.指定要执行的sql语句的标识 sql映射文件中的namespace+“.”+标签的id值
String sqlId=“com/bjpowernode/dao/StudentDao”+"."+“selectStudents”;
//7.执行sql语句,通过sqlId找到语句
List studentList=sqlSession.selectList(sqlId);
//8.输出结果
studentList.forEach(student -> System.out.println(student));
//9.关闭sqlSession对象
sqlSession.close();
}
}