Mybatis
1. 什么是框架
- 框架其实就是偷懒的程序员讲代码进行封装,之后可以重复进行使用过程
- 框架其实就是一个半成品,以框架为例,连接数据库的驱动,url,用户名,密码等等必须要告诉框架
- 程序媛在使用框架的时候,通常以配置文件的方式告诉框架,多数会使用xml文件作为框架的配置文件
- 因此,在使用框架进行开发的时候,需要编写配置文件,代码的编写就会减少
- 框架其实都是第三方提供,提供的都是jar包的形式,因此在使用框架前,需要将框架涉及到的一些jar包导入项目
2. 常见的java开发框架
- Mybatis ORM框架,底层是对jdbc的封装
- Spring 是一个容器
- SpringMVC 分层框架
- Struts 功能类似SpringMVC 5. Hibernate 功能类似Mybatis
Mybatis框架
官网: https://mybatis.org/mybatis-3/zh/index.html
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的
JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口
和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
4.Mybatis特点
属于持久层ORM框架
- 持久层: 讲内存中对象数据,转移到数据库中的过程持久层
Mybatis Hibernate Spring-jpa - ORM Object Relational Mapping 对象关系映射框架
类 表
成员属性 字段
对象 记录 - 半自化 自动化
Mybatis 半自动化
表需要手动进行设计
主表 从表
提供sql
依赖与数据库平台
优点:上手简单(基与原声jdbc封装),优化灵活,适合做互联网项目
Hibernate 自动化ORM框架
表可以通过框架自动创建
省略一些基本的sql
不依赖与数据库平台
缺点: 学生成本高,优化难度大 适合与传统框(OA|图书管理系统…),不适合做大型互联网项目
5. Mybatis的环境搭建
1. 下载
https://github.com/mybatis/mybatis-3/releases
2. 创建项目
java project
3. 导入jar包
a. Mybatis的核心jar包
b.Mybatis的依赖jar包
c. 数据库的驱动包
d.Build Path 管理外部的jar资源
选中所有的jar包,右键build path->add to build pat
4. Mybatis配置文件
mybatis提供两种配置文件, 核心配置文件 mybatis-config.xml|mybatis.xml 与 SQL映射文件mapper.xml
5.Mybatis核心配置文件
是一个xml文件,命名无要求,位置无要求,一般定位mybatis.xml|mybatis-config.xml,放入src路径下
f(1)
dtd
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
f(2)
关联本地dtd文件
解压mybatis核心jar包,找到本地dtd文件
ide工具中关联mybatis配置文件的dtd约束
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">
<!-- mybatis的全局配置文件 -->
<configuration>
<!--
用于指明使用哪一个开发环境
default : 用于指定使用的环境的id属性值
-->
<environments default="ev">
<!-- 用户配置开发环境 id: 环境的唯一标识 -->
<environment id="ev">
<!--事务管理器 type : 设置mybatis采用何种方式管理事务
JBDC : 表示采用JDBC一样的事务管理方式
-->
<transactionManager type="JBDC"/>
<!--用于配置数据库连接吃和数据库连接参数
type : 用户设置mybatis是否采用连接池技术
POOLED : 表示mybatis采用连接池技术
-->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="SCOTT"/>
<property name="password" value="TIGER"/>
</dataSource>
</environment>
</environments>
<!-- SQL映射文件配置 -->
<mappers>
<!-- 指明SQL映射文件路径 resource : 包路径 com/shsxt.../xxxMapper.xml-->
<mapper resource="com/shsxt/mappers/DeptMapper.xml"/>
</mappers>
</configuration>
添加Dept类
src->com.shsxt.pojo
package com.shsxt.pojo;
import java.io.Serializable;
public class Dept implements Serializable{
private Integer deptno;
private String dname;
private String loc;
public Dept() {
// TODO Auto-generated constructor stub
}
public Dept(Integer deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((deptno == null) ? 0 : deptno.hashCode());
result = prime * result + ((dname == null) ? 0 : dname.hashCode());
result = prime * result + ((loc == null) ? 0 : loc.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dept other = (Dept) obj;
if (deptno == null) {
if (other.deptno != null)
return false;
} else if (!deptno.equals(other.deptno))
return false;
if (dname == null) {
if (other.dname != null)
return false;
} else if (!dname.equals(other.dname))
return false;
if (loc == null) {
if (other.loc != null)
return false;
} else if (!loc.equals(other.loc))
return false;
return true;
}
}
6. Mybatis SQL映射文件
在mybatis中推荐使用mappers作为报名,只需要写一个映射配置文件就可以DeptMapper.xml,用户定义执行sql语 句,同时可以设置参数|返回值的类型
<?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: 命名空间
要求: 全局唯一,在整个应用中不能出现其他的映射文件的命名空间与当前命名空间一致的
值设置方式:
1)随意定义,只要不重复就可以,但是不便于后期维护
2)推荐使用, 包+文件名(文件名不包含后缀) com.shsxt.mappers.DeptMapper 因为同一 包下不能存在同名的文件
-->
<mapper namespace="com.shsxt.mappers.DeptMapper">
<!--
查询标签: sleect 用于编写查询语句,又称Statement
id : 当前Statement唯一标识(sql语句的唯一标识),当前文件中保证唯一
resultType : 结果的类型 基本类型 String Date JavaBean Map List
如果返回值类型为Javabean类型, 写明类的权限定名
如果返回值类型集合,要定义集合的泛型
parameterType : 入参类型 基本类型 String Date JavaBean Map List 数组
-->
<select id="queryAll" resultType="com.shsxt.pojo.Dept">
select * from dept
</select>
</mapper>
注意: 不要忘记mybatis核心xml文件中的mapper配置