前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用MyBatis框架

使用MyBatis框架

作者头像
wolf
发布2020-09-18 17:50:47
4780
发布2020-09-18 17:50:47
举报
文章被收录于专栏:大数据分享大数据分享

一、什么是框架

1. 框架就是偷懒的程序员将代码进行封装,之后进行重复使用的过程

2. 框架其实是一个半成品,以框架为例,连接数据库使用的驱动,url,用户名,密码等必须要告诉框架的

3. 程序员在使用框架的时候,通常以配置文件的形式告诉框架,多数会使用xml作为框架的配置文件

4. 因此,在使用框架进行开发的时候,需要编写配置文件,代码的编写反而会更少一些

5. 框架其实都是第三方提供的,且都是jar包的形式,因此,使用框架前,需要将框架涉及到的一些jar包导入项目中

二、常见的java开发框架:

1. Mybatis ORM框架,底层是对jdbc的封装

2. Spring是一个容器,可以依赖、整合其他框架

3. SpringMVC分层框架,让条理更加清晰、项目的功能会更强大

4. Struts2功能类似SpringMVC的框架

5. Hibernate功能类似Mybatis

三、MyBatis框架的简介

MyBatis是一流的持久性框架,支持自定义SQL,存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码以及参数的手动设置和结果检索。MyBatis可以使用简单的XML或注释进行配置,并将图元,映射接口和Java POJO(普通的旧Java对象)映射到数据库记录。

官网地址:

https://mybatis.org/mybatis-3/zh/

四、Mybatis特点

(一)属于持久层的ORM框架

1. 持久层(将内存中对象数据,转移到数据库中的过程称为持久层)

Mybatis Hibernate Spring-Data-jpa

2. ORM Object Relational Mapping对象关系映射 框架

类 表

成员变量 字段

对象 记录

3. 半自动化VS自动化

Mybatis半自动化:

1) 表需要手动进行设计

主表从表

2) 提供sql

3) 依赖于数据库的平台

优点:上手简单(基于原生jdbc的封装),后期的优化、维护比较灵活,适合做互联网项目,也可以做传统项目

Hibernate自动化的ORM框架

1) 表可以通过框架自动创建

2) 省略基本的一些sql

3) 不依赖数据库平台

缺点:学习成本较高,优化难度大、不便于后期维护,适用于做传统框架(OA|图书管理系统...),不适合做大型的互联网项目。


从XML 中构建 SqlSessionFactory

每个基于MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

五、Mybatis的环境搭建

5.1创建项目

Java project项目

5.2导入jar包

项目下新建一个bin文件夹

5.2.1 Mybatis的核心jar包

mybatis-3.5.2.jar

5.2.2 Mybatis依赖的jar包

5.2.3数据库驱动包

ojdbc6.jar

5.2.4 Buid Path管理外部jar资源

选中所有jar包,右键build path -> add to build path

5.3 Mybatis核心配置文件

是一个xml文件,命名无要求,位置无要求,一般称为mybatis.xml,放在src路径下

5.3.1 dtd格式

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 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>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource="org/mybatis/example/BlogMapper.xml"/>

</mappers></configuration>

5.3.2关联mybatis配置文件的dtd约束

5.3.3 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="dev">

<!-- id : 开发环境的标识 定义唯一 -->

<environment id="dev">

<!--

事务管理器:

type : 设置mybatis采用什么方式管理事务

JDBC : 标识采用jdbc的事务管理方式

-->

<!-- 如果标签对中不添加内容,可以让它变成一个自闭合的标签 -->

<transactionManager type="JDBC"/>

<!--

用户配置数据库连接池和数据库连接参数

type : 用于设置mybatis是否采用连接池技术

POOLED:表示mybatis采用连接池技术

-->

<dataSource type="POOLED">

<!-- 设置连接数据库参数 -->

<property name="driver" value="oracle.jdbc.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>

<!-- 包路径:包名+文件名 -->

<mapper resource="com/shsxt/mappers/DeptMapper.xml"/>

</mappers>

</configuration>

5.4添加Dept|User类

Src->com.shsxt.pojo(实体类,javabean)

package com.shsxt.pojo;

import java.io.Serializable;

public class Dept implements Serializable{

private int deptno;

private String dname;

private String loc;

public Dept() {

super();

}

public Dept(int deptno, String dname, String loc) {

super();

this.deptno = deptno;

this.dname = dname;

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;

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 != 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;

}

}

5.5 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">

<!--

namespace命名空间

要求:全部唯一,在整个应用中不能出现其他的映射文件的命名空间相同情况,保证唯一

设置值方式:

1)随意定义,只要不重复就行,但是不便于后期维护

2)推荐使用当前的包名+文件名形式(不要文件名后缀)->com.shsxt.mappers.DeptMapper

-->

<mapper namespace="com.shsxt.mappers.DeptMapper">

<!--

查询标签:

id: 当前Statement的唯一标识,当前文件中不能重复

resultType: 入参类型(结束的数据类型)

-->

<select id="queryAll" resultType="com.shsxt.pojo.Dept"> <!-- 权限定名 -->

select * from Dept <!-- 不要加分号; -->

</select>

</mapper>

5.6 JAVA测试代码

package com.shsxt.test;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

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 com.shsxt.pojo.Dept;

public class DeptTest {

public static void main(String[] args) throws IOException {

// 1.加载mybatis全局配置文件

InputStream is = Resources.getResourceAsStream("mybatis.xml");

// 2.构建SqlSessionFactory对象

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

// 3.根据工厂构建SqlSession会话对象

SqlSession session = factory.openSession();

// 4.通过session中的方法执行查询

// 参数:命名空间+id

List<Dept> list = session.selectList("com.shsxt.mappers.DeptMapper.queryAll");

list.forEach(System.out::println);

// 5.关闭会话

session.close();

}

}

显示结果:

log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Dept [deptno=10, dname=ACCOUNTING, loc=NEW YORK]

Dept [deptno=20, dname=RESEARCH, loc=DALLAS]

Dept [deptno=30, dname=SALES, loc=CHICAGO]

Dept [deptno=40, dname=OPERATIONS, loc=BOSTON]

Dept [deptno=50, dname=lisa, loc=1234]

Dept [deptno=60, dname=lisa, loc=1234]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是框架
  • 二、常见的java开发框架:
  • 三、MyBatis框架的简介
  • 四、Mybatis特点
  • 从XML 中构建 SqlSessionFactory
  • 五、Mybatis的环境搭建
    • 显示结果:
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档