Mybatis笔记整理

所需要的基础知识

JDBC

Mysql

Java基础

Maven

Junit

框架:是有配置文件的。最好的方式:看官网文档

1、简介

1.1、什么是MyBatis

简介

什么是 MyBatis?

  1. MyBatis 是一款优秀的持久层框架
  2. 它支持定制化 SQL、存储过程以及高级映射。
  3. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  4. MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJOPlain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

如何获得MyBatis?

  1. Maven仓库
  2. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  3. <dependency>
  4. <groupId>org.mybatis</groupId>
  5. <artifactId>mybatis</artifactId>
  6. <version>3.5.3</version>
  7. </dependency>
  8. githubhttps://github.com/mybatis/mybatis-3/releases
  9. 中文文档:https://mybatis.org/mybatis-3/zh/index.html

1.2、持久化

数据持久化

  1. 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
  2. 内存:断电即失
  3. 数据库(JDBC),io文件持久化。
  4. 生活中:冷藏、罐头。

为什么需要持久化?

  1. 有一些对象,不能让他丢掉。

1.3、持久层

Dao层、Service层、Controller层…

  1. 完成持久化工作的代码块
  2. 层界限十分明显

1.4、为什么需要Mybatis?

  1. 帮助程序员将数据存入到数据库中。
  2. 方便
  3. 传统的JDBC代码太复杂了。简化、框架、自动化。
  4. 不用Mybatis也可以。更容易上手。技术没有高低之分
  5. 优点:
  6. 简单易学
  7. 灵活
  8. sql和代码的分离,提高了可维护性。
  9. 提供映射标签,支持对象与数据库的orm字段关系映射
  10. 提供对象关系映射标签,支持对象关系组建维护
  11. 提供xml标签,支持编写动态sql

最重要的一点:使用的人多!

Spring

SpringMVC

SpringBoot

2、第一个Mybatis程序

思路:搭建环境–>导入Mybatis–>编写代码–>测试!

2.1、搭建环境

搭建数据库

  1. CREATE DATABASE mybatis;
  2. use mybatis;
  3. CREATE TABLE user(
  4. id INT(20) not null PRIMARY KEY,
  5. name VARCHAR(30) DEFAULT NULL,
  6. pwd VARCHAR(30) DEFAULT NULL
  7. )ENGINE=INNODB DEFAULT CHARSET=utf8;
  8. INSERT INTO user (id,name,pwd) VALUES
  9. (1,'浴血','123456'),
  10. (2,'张三','123456'),
  11. (3,'李四','123890')

新建项目

  1. 新建一个普通的maven项目
  2. 删除src目录
  3. 导入maven依赖

之后建立maven的父工程与子工程

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <!--父工程-->
  7. <groupId>com.yuxue</groupId>
  8. <artifactId>Mybatis-study</artifactId>
  9. <packaging>pom</packaging>
  10. <version>1.0-SNAPSHOT</version>
  11. <modules>
  12. <module>mybatis-01</module>
  13. </modules>
  14. <!--导入依赖-->
  15. <dependencies>
  16. <!--mysql驱动-->
  17. <dependency>
  18. <groupId>mysql</groupId>
  19. <artifactId>mysql-connector-java</artifactId>
  20. <version>5.1.47</version>
  21. </dependency>
  22. <!--mybatis-->
  23. <dependency>
  24. <groupId>org.mybatis</groupId>
  25. <artifactId>mybatis</artifactId>
  26. <version>3.5.2</version>
  27. </dependency>
  28. <!--junit-->
  29. <dependency>
  30. <groupId>junit</groupId>
  31. <artifactId>junit</artifactId>
  32. <version>4.12</version>
  33. </dependency>
  34. <!--log4j-->
  35. <dependency>
  36. <groupId>log4j</groupId>
  37. <artifactId>log4j</artifactId>
  38. <version>1.2.17</version>
  39. </dependency>
  40. </dependencies>

子工程

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>Mybatis-study</artifactId>
  7. <groupId>com.yuxue</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>mybatis-01</artifactId>

2.2、创建一个模块

  1. 首先在main/resources下建立一个mybatis-config.xml文件,里面写建立数据库时的配置
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <!--configuration核心配置文件-->
  6. <configuration>
  7. <!--environments配置环境组-->
  8. <!--default默认环境-->
  9. <environments default="development">
  10. <!--environment单个环境-->
  11. <environment id="development">
  12. <!--transactionManager配置事务管理器-->
  13. <transactionManager type="JDBC"/>
  14. <!--配置连接池-->
  15. <dataSource type="POOLED">
  16. <property name="driver" value="com.mysql.jdbc.Driver"/>
  17. <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;serverTimezone=UTC"/>
  18. <property name="username" value="root"/>
  19. <property name="password" value="123456"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. </configuration>
  1. 之后编写mybatis的工具类utils,目录为main/java新建package:com.yuxue.utils
  1. package com.yuxue.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. /**
  9. * @author yuxue
  10. * sqlSessionFactory --> sqlSession
  11. */
  12. public class MybatisUtils {
  13. private static SqlSessionFactory sqlSessionFactory;
  14. static {
  15. try{
  16. //使用mybatis第一步、获取sqlSessionFactory对象
  17. String resource = "mybatis-config.xml";
  18. InputStream inputStream = Resources.getResourceAsStream(resource);
  19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  20. }catch(IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. //既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
  25. // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
  26. // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
  27. public static SqlSession getSqlSession(){
  28. return sqlSessionFactory.openSession();
  29. }
  30. }

2.3、编写代码

  1. 编写实体类,目录为main/java新建package:com.yuxue.pojo,新建一个User类
  1. package com.yuxue.pojo;
  2. public class User {
  3. private int id;
  4. private String name;
  5. private String pwd;
  6. public User() {
  7. }
  8. public User(int id, String name, String pwd) {
  9. this.id = id;
  10. this.name = name;
  11. this.pwd = pwd;
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public String getPwd() {
  26. return pwd;
  27. }
  28. public void setPwd(String pwd) {
  29. this.pwd = pwd;
  30. }
  31. @Override
  32. public String toString() {
  33. return "User{" +
  34. "id=" + id +
  35. ", name='" + name + '\'' +
  36. ", pwd='" + pwd + '\'' +
  37. '}';
  38. }
  39. }
  1. 之后编写Dao当中的代码,首先编写UserMapper的抽象接口,目录为main/java新建package:com.yuxue.dao
  1. package com.yuxue.dao;
  2. import com.yuxue.pojo.User;
  3. import java.util.List;
  4. public interface UserMapper {
  5. //查询所有用户
  6. List<User> getUserList();
  7. }
  1. 之后再Dao文件夹下新建UserMapper.xml文件对SQL语句进行编写
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--namespace=绑定一个对应的Dao/Mapper接口-->
  6. <mapper namespace="com.yyz.dao.UserMapper">
  7. <select id="getUserList" resultType="com.yyz.pojo.User">
  8. select * from mybatis.user
  9. </select>
  10. </mapper>
  1. 要让这个配置文件在mybatis-config.xml文件中注册,于是加上
  1. <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
  2. <mappers>
  3. <mapper resource="com/yyz/dao/UserMapper.xml"></mapper>
  4. </mappers>
  1. 在子工程以及父工程的pom文件中加上一段话让其识别文件夹中的xml文件
  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/resources</directory>
  5. <includes>
  6. <include>**/*.properties</include>
  7. <include>**/*.xml</include>
  8. </includes>
  9. <filtering>true</filtering>
  10. </resource>
  11. <resource>
  12. <directory>src/main/java</directory>
  13. <includes>
  14. <include>**/*.properties</include>
  15. <include>**/*.xml</include>
  16. </includes>
  17. <filtering>true</filtering>
  18. </resource>
  19. </resources>
  20. </build>

2.4、测试

使用juint进行测试

  1. package com.yuxue.dao;
  2. import com.yuxue.pojo.User;
  3. import com.yuxue.utils.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Test;
  6. import java.util.List;
  7. public class UserMapperTest {
  8. @Test
  9. public void test(){
  10. //第一步:获得SqlSession对象
  11. SqlSession sqlSession = MybatisUtils.getSqlSession();
  12. //执行SQL
  13. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  14. List<User> userList = mapper.getUserList();
  15. for (User user : userList) {
  16. System.out.println(user);
  17. }
  18. //关闭SqlSession
  19. sqlSession.close();
  20. }
  21. }
  1. 可能会遇到的问题:
  2. 配置文件没有注册
  3. 绑定接口错误
  4. 方法名不对
  5. 返回类型不对
  6. Maven导出资源问题

以上就是我们所写的第一个Mybatis程序

3、CRUD

3.1、namespace

namespace中的包名要和dao/mapper接口的包名保持一致

  1. <mapper namespace="com.yuxue.dao.UserMapper">

3.2、select

选择查询语句;以下在select当中的参数非常重要

id:就是对应的namespace中的方法名;

resultType:Sql语句执行的返回值!

parameterType:参数类型!

编写接口

  1. package com.yuxue.dao;
  2. import com.yuxue.pojo.User;
  3. import java.util.List;
  4. public interface UserMapper {
  5. //根据id查询用户
  6. User getUserById(int id);
  7. }

编写对应的mapper中的sql语句

  1. <select id="getUserById" resultType="com.yuxue.pojo.User" parameterType="int">
  2. select * from mybatis.user where id = #{id};
  3. </select>

测试

  1. @Test
  2. public void getUserById(){
  3. SqlSession sqlSession = MyBatisUtils.getSqlSession();
  4. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  5. User user = mapper.getUserById(1);
  6. System.out.println(user);
  7. sqlSession.close();
  8. }

3.3、Insert

3.4、Update

3.5、Delete

注意点:增删改需要提交事务

3.6、分析错误

  1. resource绑定mapper,需要使用路径!
  2. 程序配置文件必须符合规范
  3. NullPointerException,没有注册到资源
  4. 输出的xml文件中存在中文乱码问题
  5. maven资源没有导出问题

Mybatis入门及第一个Mybatis程序的更多相关文章

  1. Mybatis-01-什么是Mybatis以及第一个Mybatis

    Mybatis-9.28 环境: jdk 1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JDBC Mysql Java基础 Maven Junit SSM框架:配置文件,最好的 ...

  2. Cesium入门2 - Cesium环境搭建及第一个示例程序

    Cesium入门2 - Cesium环境搭建及第一个示例程序 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 验 ...

  3. Conda安装及第一个py程序

    Conda安装及第一个py程序 安装Conda 下载安装 在Anaconda官网下载Anaconda 打开Conda安装程序 设置好安装目录(这个一定要记好,后边要用),比如我的目录就是 D:\Pro ...

  4. Node.js入门以及第一个helloworld程序

    1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...

  5. Python 开篇及第一个Python程序

    本节内容 python 简单介绍 python 2.x 或者python 3.x python 安装 第一个python程序 一.python简单介绍 python的创始人为吉多.范罗苏姆(Guido ...

  6. git环境搭建以及第一个PHP程序

    使用mac下的sublime等编辑器帮助代码编写,然后到linux下运行网页代码.可以通过/vagrant共享目录完成,但是默认apache默认目录为/var/www/html,不想改变该目录,同时为 ...

  7. day1 安装jdk8环境及第一个java程序

    安装jdk8 第一步:下载jdk安装包,我们这里下载orical官网的jdk8版本.

  8. Python初学者第一天 Python安装及第一个Python程序

    Python基础: 1day: 1.Python基础: A.编程语言介绍:     a. 计算机只能理解0和1.编程即写一段按照一定规则写代码,让计算机帮你干活:     b.机器语言:最底层的语言, ...

  9. Java语言入门-第一个HelloWorld程序

    1.官网下载Jdk 这里给出官网下载网址:https://www.oracle.com/technetwork/java/javase/downloads . 1.1 打开之后出现如下界面: 1.2选 ...

随机推荐

  1. NB-IoT应用分类与技术特点分析

      NB-Iot作为一种窄带物联网技术在各大行业脱颖而出,其应用涵盖多个领域.此文计讯小编将讲解NB-IoT的主要应用分类及相关特点.   一.NB-IoT是什么   NB-IoT是指窄带物联网(Na ...

  2. Photoshop CC 习惯设置

    安装后,一般设置: 1.编辑--首选项--常规 2.一般更改内容为: 性能 内存使用情况在50%-80%之间 暂存盘:除去C盘意外的其他盘 单位和标尺:以px为单位 其他根据喜好设定!

  3. 【Redis】Redis 持久化之 RDB 与 AOF 详解

    一.Redis 持久化 我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会一位宕机而丢失.Redis 为我们提供了两种持久化方案, ...

  4. Netty源码解析 -- ChannelOutboundBuffer实现与Flush过程

    前面文章说了,ChannelHandlerContext#write只是将数据缓存到ChannelOutboundBuffer,等到ChannelHandlerContext#flush时,再将Cha ...

  5. Linux Capabilities 入门教程:进阶实战篇

    原文链接:https://fuckcloudnative.io/posts/linux-capabilities-in-practice-2/ 该系列文章总共分为三篇: Linux Capabilit ...

  6. 你知道MySQL的LRU链表吗?

    相信大家对LRU链表是不陌生的,算是一种基础的数据结构! LRU:Least Recently Used 一.简述传统的LRU链表 LRU:Least Recently Used 相信大家对LRU链表 ...

  7. dpdk网卡收包分析

    一个网络报文从网卡接收到被应用处理,中间主要需要经历两个阶段: 阶段一:网卡通过其DMA硬件将收到的报文写入到收包队列中(入队)阶段二:应用从收包队列中读取报文(出队)由于目前正在使用vpp/dpdk ...

  8. Cephfs 操作输出到日志查询系统

    前言 文件系统当中如果某些文件不见了,有什么办法判断是删除了还是自己不见了,这个就需要去日志里面定位了,通常情况下是去翻日志,而日志是会进行压缩的,并且查找起来非常的不方便,还有可能并没有开启 这个时 ...

  9. 关于重写equals同时重写hashcode

    1.Object中equals方法和hashcode public boolean equals(Object obj) { return (this == obj); } public native ...

  10. 01、MyBatis HelloWorld

    1. MyBatis简介 1)MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架 2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 3)MyB ...