框架入门_第一个Mybatis程序

一、框架概述

1.1 什么是框架?

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;

简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成自己的系统。可理解为使用别人搭建好的舞台,你来做表演。

框架要解决的问题:框架封装了很多的细节,使开发者可以使用极简的方式实现功能,大大提高开发效率

1.2 三层架构

  • 三层架构主要是指将业务应用规划中的表示层 UI、数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是“高内聚低耦合,可以降低层与层之间的依赖”。
  • 各层互相独立,完成自己该完成的任务,项目可以多人同时开发,开发人员可以只关注整个结构中的其中某一层。
表现层: 
     用于展示数据
业务层
     处理业务需求
持久层
     和数据交互的

二、SSM框架

SSM(spring,SpringMVC、MyBatis)

先来简单了解一下各个部分

2.1 Spring

* Spring就像是整个项目中配置bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。

Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成。

2.2 SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandleMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中的struts

2.3 myBatis

myBatis是对jdbc的封装,它让数据库底层操作变透明。myBatis的操作都是围绕一个sqlSessionFactory实例展开的。myBatis通过配置文件关联到各实体类的Mapper文件,改文件配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

首先我们先来学习一下myBatis

三、myBatis

myBatis官网

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

为什么需要Mybatis?

  • 方便将数据存入到数据库中
  • 传统的JDBC代码太复杂
  • 优点:
    1. 简单易学
    2. 灵活
    3. sql和代码的分离,可维护性高
    4. 提供映射标签,支持对象与数据库的orm字段关系映射
    5. 提供对象关系映射标签,支持对象关系组件维护
    6. 提供xml标签,支持编写动态sql

四、第一个Mybatis程序

1.搭建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
create database mybatis;
use mybatis;

create table user(
id int not null primary key,
name varchar(30) default null,
pwd varchar(30) default null
)engine=innodb default charset=utf8;

insert into user (id,name,pwd) values
(1,'张三','666666'),
(2,'李四','123456'),
(3,'王五','888888')

2.创建Maven项目

删除src,导入maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!--    父工程-->
<groupId>cool.yolin</groupId>
<artifactId>firstMybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<!-- 导入依赖-->
<dependencies>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- mybatis驱动-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- junit驱动-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

3.创建模块

编写mybatis的核心配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
useSSL=true&amp;serverTimezone=Hongkong"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!-- 给实体类起别名-->
<!-- <typeAliases>-->
<!-- <typeAlias type="domain.Blog" alias="Blog"></typeAlias>-->
<!-- </typeAliases>-->
<!--每一个Mapper.xml都需要在myBatis核心配置文件中注册-->
<mappers>
<mapper resource="dao/BlogMapper.xml"></mapper>
<!-- <mapper class="dao.BlogMapper"></mapper>-->
<!-- <package name="dao"/>-->
</mappers>
</configuration>

4.编写代码

工具类获取sqlSessionFactory对象

1
2
3
4
5
6
7
8
9
10
static {

try {
String resource="mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}

通过sqlSessionFactory对象获取sqlSession的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//工具类获取sqlSessionFactory对象
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource="mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession 的实例,其中包含了面向数据库执行sql命令的所有方法
public static SqlSession getsqlSession(){
return sqlSessionFactory.openSession();
}
}

Dao接口

1
2
3
public interface UserDao {
List<User> getUserList();
}

接口实现类由原来的UserDaoIml转换为一个Mapper配置文件

1
2
3
4
5
6
7
8
9
10
<?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">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="dao.UserDao">
<select id="getUserList" resultType="domain.User">
select * from mybatis.user
</select>
</mapper>

5.测试

可能遇到的问题解决方案

在pom.xml中配置如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

请我喝杯咖啡吧~

支付宝
微信