一、MyBatis概述

首先就是之前Java web中的三层结构

界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果的。(jsp ,html ,servlet)

业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据

数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等的

三层中对应的包

界面层: controller包 (servlet)

业务逻辑层: service 包(XXXService类)

数据访问层: dao包(XXXDao类)

三层中类的交互

用户使用界面层--> 业务逻辑层--->数据访问层(持久层)-->数据库(mysql)

三层对应的处理框架

  • 界面层---servlet---springmvc(框架)
  • 业务逻辑层---service类--spring(框架)
  • 数据访问层---dao类--mybatis(框架)

1. MyBatis 解决的主要问题

减轻使用 JDBC 的复杂性,不用编写重复的创建 Connetion , Statement ; 不用编写关闭资源代码。

直接使用 java 对象,表示结果数据。让开发者专注 SQL 的处理。 其他分心的工作由 MyBatis 代劳

总的来说,mybatis就是增强版的JDBC

二、快速开始一个 MyBatis

首先就是搭建MyBatis的环境

1. 创建mysql数据库和表

数据库名:ssm,表名:student

2. 创建maven工程

这个就不详细的说了,可以看之前写的文章

https://www.cnblogs.com/mengd/p/13436355.html

3. 在pom.xml文件中添加信息

主要就是mybatis依赖,和mysql驱动

还有就是在build标签里添加maven插件,方便之后使用

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.md</groupId>
<artifactId>01-hello-mybatis</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <!--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> </dependencies> <build> <resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources> </build>
</project>

4. 编写对应的实体类

创建包com.md.domain,创建Student类

package com.md.domain;

/**
* @author MD
* @create 2020-08-05 9:04
*/ // 和数据库的表名一样,
public class Student { // 定义属性,属性名和列名一致
private Integer id;
private String name;
private String email;
private Integer age; public Student() {
} public Student(Integer id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
} // 对应的set和get方法以及toString() }

5. 编写Dao接口:StudentDao

创建包:com.md.dao

package com.md.dao;
import com.md.domain.Student;
import java.util.List; /**
* @author MD
* @create 2020-08-05 9:07
*/
public interface StudentDao { // 查询Student表中所有数据
public List<Student> selectStudents();
}

6. 编写 Dao 接口 Mapper 映射文件 StudentDao.xml

注意:

  • 在接口所在的包:com.md.dao里创建文件 StudentDao.xml
  • 这个映射文件的名称要和接口的名称一样

特别注意里面写的备注信息

<?xml version="1.0" encoding="UTF-8" ?>

<!--指定的约束文件,mybatis-3-mapper.dtd是约束文件的名称,扩展名是dtd
约束文件的作用:限制、检查当前文件中出现的标签,属性必须符号mybatis的要求
-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--
mapper:是当前文件的根标签
namespace :必须有值,自定义的唯一字符串,推荐使用: dao 接口的全限定名称
-->
<mapper namespace="com.md.dao.StudentDao">
<!--
<select>: 查询数据, 标签中必须是 select 语句
id: sql 语句的自定义名称,推荐使用 dao 接口中方法名称,
使用名称表示要执行的 sql 语句
resultType: 查询语句的返回结果数据类型,使用全限定类名
-->
<select id="selectStudents" resultType="com.md.domain.Student">
<!-- 要执行的 sql 语句 -->
select id,name,email,age from student
</select> <!--
<update>:表示更新数据库的操作,里面写的是update sql语句
<insert>:
<delete>:
--> </mapper>

7. 创建 MyBatis 主配置文件

注意:

  • 在项目 src/main 下创建 resources 目录,设置 resources 目录为 resources root
  • 创建主配置文件:名称为 mybatis.xml

特别注意里面写的备注信息

<?xml version="1.0" encoding="UTF-8" ?>

<!--
mybatis的主配置文件,上面还是约束文件的说明
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--根标签 --> <configuration> <!-- 配置 mybatis 环境
数据库的连接信息,default:必须和某个environment的id值一样
,告诉mybatis使用那个数据库的连接信息,也就是访问那个数据库
-->
<environments default="mysql">
<!--
一个数据库的配置信息
id: 数据源的名称,可以自定义
-->
<environment id="mysql">
<!-- 配置事务类型:使用 JDBC 事务(使用 Connection 的提交和回滚) -->
<transactionManager type="JDBC"/>
<!-- 数据源 dataSource :创建数据库 Connection 对象
type: POOLED 使用数据库的连接池
-->
<dataSource type="POOLED">
<!-- 连接数据库的四个要素,是固定的 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment> </environments> <!--sql映射文件的位置-->
<mappers>
<!-- 告诉 mybatis 要执行的 sql 语句的位置
一个标签指定一个文件的位置
-->
<mapper resource="com/md/dao/StudentDao.xml"/>
</mappers> </configuration>

如果是高版本的mysql,中文乱码可以使用下面的

支持中文的 url

jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8

基本就是如下的结构

8. 创建测试类 TestMybatis

在src/test/java/com/md/ 创建TestMybatis

特别注意里面写的备注信息

主要关心第六步和第七步,前面的都是一样的,后面直接封装方法

package com.md;

import com.md.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 org.junit.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; /**
* @author MD
* @create 2020-08-05 10:27
*/
public class TestMybatis { // 测试方法 @Test
public void testSelect() throws IOException {
// 访问mybatis读取student数据
//1.定义mybatis主配置文件的名称, 从类路径的根开始(target/clasess),编译之后的目录
String config = "mybatis.xml"; //2.读取这个config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3.创建了SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
//5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
SqlSession sqlSession = factory.openSession();
//6.【重要】指定要执行的sql语句的标识。 sql映射文件中的namespace + "." + 标签的id值
// String sqlId = "com.md.dao.StudentDao"+"."+"selectStudents";
String sqlId = "com.md.dao.StudentDao.selectStudents";
//7.【重要】执行sql语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId); //8.输出结果
studentList.forEach( stu -> System.out.println(stu));
//9.关闭SqlSession对象
sqlSession.close();
} }

如果运行找不到mybatis.xml文件,先检查是否在pom.xml中配置下面的信息没,

在pom.xml下的build标签中

<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

不行的话就重启项目,通常就可以解决问题

9. 配置日志功能

mybatis.xml 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数

在根标签里面添加

<settings>
<!-- 设置mybatis的输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>

然后运行项目,就可以在控制台看到输出了

三、总结

实现步骤

  1. 新建一个student表
  2. 加入maven的mybatis坐标,以及mysql驱动的坐标,看pom.xml文件中的信息
  3. 创建实体类,Student,保存表中一行的数据
  4. 创建持久层的dao接口,定义操作数据库的方法
  5. 创建一个mybatis使用的配置文件,叫做sql映射文件(mapper文件),一般一个表一个sql的映射文件,是xml文件,并且这个文件是在接口所在的目录,文件名和接口名一致
  6. 创建mybatis的主配置文件,一个项目就一个主配置文件,主配置文件提供了数据库的连接信息和sql映射文件的位置信息
  7. 创建测试类,使用mybatis访问数据库

四、insert

1. StudentDao 接口中增加方法

 // 插入方法
public int insertStudent(Student student);

2. StudentDao.xml 加入 sql 语句

<!-- 插入的时候要注意占位符,就是你传入对象的属性值-->
<insert id="insertStudent" > insert into student values(#{id},#{name},#{email},#{age}) </insert>

3. 增加测试方法

前面的都一样,主要就是第六步之后的

package com.md;

public class TestMybatis {

    // 测试方法

    @Test
public void testInsert() throws IOException { String config = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(config);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession sqlSession = factory.openSession(); //6.【重要】指定要执行的sql语句的标识。 sql映射文件中的namespace + "." + 标签的id值
// String sqlId = "com.md.dao.StudentDao"+"."+"selectStudents";
String sqlId = "com.md.dao.StudentDao.insertStudent";
//7.【重要】执行sql语句,通过sqlId找到语句
// 第一个参数是执行的sql语句,第二个是对象
int i = sqlSession.insert(sqlId,new Student(1004,"刘桑","ls@qq.com",18)); // 需要注意,mybatis默认不是自动提交事务,所以在写完insert、update、delete之后,手动的提交事务
sqlSession.commit(); //8.输出结果
System.out.println("执行insert影响的行数:"+i);
//9.关闭SqlSession对象
sqlSession.close();
} }

需要注意,mybatis默认不是自动提交事务,所以在写完insert、update、delete之后,手动的提交事务

五、update

和上面的都差不多,就直接写主要的步骤

1. StudentDao 接口中增加方法

int updateStudent(Student student);

2. StudentDao.xml 增加 sql 语句

<update id="updateStudent">
update student set age = #{age} where id=#{id}
</update>

3. 增加测试方法

//5. 创建保存数据的对象
Student student = new Student();
student.setId(1005);// 要修改的 id
student.setAge(30); // 要修改的年龄值
//6. 执行 更新 update
int rows = session.update(
"com.bjpowernode.dao.StudentDao.updateStudent",student);
//7. 提交事务
session.commit();
System.out.println(" 修改记录的行数:"+rows);
//8. 关闭 SqlSession
session.close();

六、delete

1. StudentDao 接口中增加方法

int deleteStudent(int id);

2. StudentDao.xml 增加 sql 语句

<delete id="deleteStudent">
delete from student where id=#{studentId}
</delete>

3. 增加测试方法

//5. 删除的 id
int id = 1001;
//6. 执行删除 delete
int rows = session.delete(
"com.bjpowernode.dao.StudentDao.deleteStudent",id);
//7. 提交事务
session.commit();
System.out.println(" 修改记录的行数:"+rows);
//8. 关闭 SqlSession
session.close();

搭建MyBatis开发环境及基本的CURD的更多相关文章

  1. 搭建mybatis开发环境

    1.创建工程 <groupId>com.hope</groupId>     <artifactId>day01_eesy_01mybatis</artifa ...

  2. asp.net搭建mybatis开发环境

    mybatis其实就是ibatis的升级版本不仅能在java上使用,asp.net照样可以使用mybatis来开发程序.mybatis是一个比较小巧的ORM框架,类似hibernate.自己试了一下用 ...

  3. MyBatis01 Idea中搭建MyBatis开发环境

    项目结构 POM模板 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  4. 搭建SpriBoot开发环境

      一.搭建springboot开发环境 需求:使用springboot搭建一个项目,编写一个controller控制器,使用浏览器正常访问 springboot1.x版本--> 基于sprin ...

  5. 自定义搭建PHP开发环境

    学习了一段时间php了,因为之前是刚接触php,所以用的是集成安装包(wamp).现在想进一步了解apache.mysql.php之间的关系以及提升自己所以进行自定义搭建PHP开发环境.废话不多说,请 ...

  6. 使用virtualenv搭建python3开发环境

    问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...

  7. Windows下搭建PHP开发环境

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...

  8. 搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)

    ——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将 ...

  9. mac os 下搭建android开发环境

    mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...

随机推荐

  1. python面试题五:Python 编程

    1.B Tree和B+ Tree的区别? 1.B树中同一键值不会出现多次,并且有可能出现在叶结点,也有可能出现在非叶结点中. 而B+树的键一定会出现在叶结点中,并有可能在非叶结点中重复出现,以维持B+ ...

  2. VMWare WorkStation中MacOS虛擬機無法啓動的問題

    關於MacOS虛擬機,在有VMWare重裝,升級以及MacOS更新時,都可能會造成破解補丁失效,因此儅Mac虛擬機無法啓動時,可以嘗試以下操作: 重新運行unlocker208中的win-instal ...

  3. 使用OpenCV对图片进行特征点检测和匹配(C++)

    背景 最近从不同网站下载了非常多的动漫壁纸,其中有一些内容相同,但是大小.背景颜色.色调.主人公的位置不同(例子如下).正因为如此,基础的均方误差.直方图检测等方法很难识别出这些相似的图片. 思路 O ...

  4. bzoj4300绝世好题

    bzoj4300绝世好题 题意: 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0.n≤100000,ai≤10^9. 题解: 用f[i]表示当前二进制i为1 ...

  5. 重装win7时遇到点小问题

         最近装系统的时候有个头疼的事,事情的起因是这样的,我在工作的时候用的win7,破解的时候各种工具都破解不了,说是有未分配的盘符.并且,当时装的是没更新的win7,工作上要用到ie11只能在w ...

  6. 计算机网络学习socket--day2

    1.TCP客户/服务器模型(C/S) 2.回射客户/服务器模型 3.socket.bind.listen.accept.connect ||------------------------------ ...

  7. GPO - Windows Server Update Services

    Windows Server Update Services Configuration Wizard: Approve procedure of these updates is very tiri ...

  8. 一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

    前言 公司有一个 Web 管理系统,使用 Tomcat 进行部署.由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作. 起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部 ...

  9. OGG19.1 oracle12c到oracle12c经典模式配置实施

    OGG19.1 oracle12c到oracle12c经典和集成模式配置实施 目的说明 本文提供Oracle GoldenGate在Oracle db到Oracle db的数据复制安装配置指导,适用于 ...

  10. Windows下安装Python 3.X 版本

    一. Python下载 Python官方下载地址 演示下载的版本为Python 3.8.3 ,你可以根据自己的选择安装其他版本的Python 二. Python 安装 下载完安装包双击安装时出错(Wi ...