Mybatis概述
Mybatis概念
-
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
-
MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github
-
官网:https://mybatis.org/mybatis-3/zh/index.html
持久层:
-
负责将数据到保存到数据库的那一层代码。 以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
-
JavaEE三层架构:表现层、业务层、持久层。
框架:
- 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
- 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
JDBC 缺点
硬编码
上图标1
的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将
Mysql
数据库换成其他的关系型 数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。
上图标2
的代码。如果表结构发生变化,
SQL
语句就要进行更改。这也不方便后期的维护。
操作繁琐
上图标4
的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。
Mybatis 优化
-
硬编码可以配置到配置文件
-
操作繁琐的地方mybatis都自动完成
Mybatis快速入门
需求:查询user表中所有的数据
create database
mybatis;
use
mybatis;
drop table if exists
tb_user;
create table
tb_user
(
id
int
primary key auto_increment
,
username
varchar
(
20
)
,
password
varchar
(
20
)
,
gender
char
(
1
)
,
addr
varchar
(
30
)
)
;
INSERT INTO
tb_user
VALUES
(
1
,
'zhangsan'
,
'123'
,
'
男
'
,
'
北京
'
)
;
INSERT INTO
tb_user
VALUES
(
2
,
'
李四
'
,
'234'
,
'
女
'
,
'
天津
'
)
;
INSERT INTO
tb_user
VALUES
(
3
,
'
王五
'
,
'11'
,
'
男
'
,
'
西安
'
)
;
在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标
<dependencies>
<!--mybatis
依赖
-->
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis
</artifactId>
<version>
3.5.5
</version>
</dependency>
<!--mysql
驱动
-->
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
5.1.46
</version>
</dependency>
<!--junit
单元测试
-->
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.13
</version>
<scope>
test
</scope>
</dependency>
<!--
添加
slf4j
日志
api -->
<dependency>
<groupId>
org.slf4j
</groupId>
<artifactId>
slf4j-api
</artifactId>
<version>
1.7.20
</version>
</dependency>
<!--
添加
logback-classic
依赖
-->
<dependency>
<groupId>
ch.qos.logback
</groupId>
<artifactId>
logback-classic
</artifactId>
<version>
1.2.3
</version>
</dependency>
<!--
添加
logback-core
依赖
-->
<dependency>
<groupId>
ch.qos.logback
</groupId>
<artifactId>
logback-core
</artifactId>
<version>
1.2.3
</version>
</dependency>
</dependencies>
注意:需要在项目的 resources 目录下创建logback的配置文件
-
编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题
在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.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>
<typeAliases>
<package
name
=
"com.itheima.pojo"
/>
</typeAliases>
<!--
environments
:配置数据库连接环境信息。可以配置多个
environment
,通过
default
属性切换不同的
environment
-->
<environments
default
=
"development"
>
<environment
id
=
"development"
>
<transactionManager
type
=
"JDBC"
/>
<dataSource
type
=
"POOLED"
>
<!--
数据库连接信息
-->
<property
name
=
"driver"
value
=
"com.mysql.jdbc.Driver"
/>
<property
name
=
"url"
value
=
"jdbc:mysql:///mybatis?useSSL=false"
/>
<property
name
=
"username"
value
=
"root"
/>
<property
name
=
"password"
value
=
"1234"
/>
</dataSource>
</environment>
<environment
id
=
"test"
>
<transactionManager
type
=
"JDBC"
/>
<dataSource
type
=
"POOLED"
>
<!--
数据库连接信息
-->
<property
name
=
"driver"
value
=
"com.mysql.jdbc.Driver"
/>
<property
name
=
"url"
value
=
"jdbc:mysql:///mybatis?useSSL=false"
/>
<property
name
=
"username"
value
=
"root"
/>
<property
name
=
"password"
value
=
"1234"
/>
</dataSource>
</environment>
</environments>
<mappers>
<!--
加载
sql
映射文件
-->
<mapper
resource
=
"UserMapper.xml"
/>
</mappers>
</configuration>
- 编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题
在模块的 resources 目录下创建映射配置文件 UserMapper.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
=
"test"
>
<select
id
=
"selectAll"
resultType
=
"com.itheima.pojo.User"
>
select * from tb_user;
</select>
</mapper>
在 com.itheima.pojo 包下创建 User类
public class User {
private
int
id
;
private
String
username
;
private
String
password
;
private
String
gender
;
private
String
addr
;
//
省略了
setter
和
getter
}
在 com.itheima 包下编写 MybatisDemo 测试类
public class MyBatisDemo {
public static
void
main
(
String
[]
args
)
throws
IOException
{
//1.
加载
mybatis
的核心配置文件,获取
SqlSessionFactory
String
resource
=
"mybatis-config.xml"
;
InputStream inputStream
=
Resources
.
getResourceAsStream
(
resource
);
SqlSessionFactory sqlSessionFactory
=
new
SqlSessionFactoryBuilder
().
build
(
inputStream
);
//2.
获取
SqlSession
对象,用它来执行
sql
SqlSession sqlSession
=
sqlSessionFactory
.
openSession
();
//3.
执行
sql
List
<
User
>
users
=
sqlSession
.
selectList
(
"test.selectAll"
);
//
参数是一个字符串,该
字符串必须是映射配置文件的
namespace.id
System
.
out
.
println
(
users
);
//4.
释放资源
sqlSession
.
close
();
}
}
解决SQL映射文件的警告提示:
-
产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。
-
解决方式:在Idea中配置MySQL数据库连接
IDEA中配置MySQL数据库连接
-
点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL
而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句