一、MyBatis的介绍

1.什么是MyBatis?

MyBatis是一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和java的POJOs(普通的java对象)映射成数据库中的记录。

2.MyBatis和hibernate的比较对象

关系映射(英语:Object Relational Mapping ,简称ORM)

MyBatis Hibernate
半自动ORM框架 全自动ORM框架
必须写SQL 可以不写SQL
事务处理 事务处理
缓存都支持 缓存都支持,二级缓存比MyBatis更好

二、MyBatis的基本使用

1.创建Maven项目并引入依赖

要引入MyBatis的依赖,因为其中要对数据库进行操作,所以要引入对应的数据库依赖

<!--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>8.0.17</version></dependency>

2.创建全局配置文件(在Resource文件夹创建)

XML 配置文件中包含了对MyBatis系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器。(就是连接数据库和去配置映射文件)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/shop?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

3.定义User对象(在pojo文件夹创建)

因为MyBatis是一个ORM框架,那么会将数据库中的user表中的数据映射位Java中的对象,所以要创建对象与之对应。

package com.biao.pojo;public class user {private Integer id;private String username;private String address;private String gender;public user() {}public user(String username, String address, String gender) {this.username = username;this.address = address;this.gender = gender;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "user{" +"id=" + id +", username='" + username + '\'' +", address='" + address + '\'' +", gender='" + gender + '\'' +'}';}
}

4.创建映射文件(这里是创建在上面那个user类一个文件夹pojo文件夹,然后在全局配置文件中配置这个映射文件)

MyBatis要操作数据库,那么需要在映射文件中来写SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.biao.pojo.user"><!--添加用户信息--><insert id="addUser" parameterType="com.biao.pojo.user">insert into t_user (username,address,gender) values (#{username},#{address},#{gender})</insert>
</mapper>

mapper标签中的namespace作用:
1.定义mapper接口,面向接口编程。
2.在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。
为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件中的每个SQL语句就成了定义在这个命名空间中的一个ID。只要我们能够保证每个命名空间中这个ID是唯一的,即使在不同映射文件中的语句ID相同,也不会再产生冲突了。
(就是说例如想用不同的Insert的时候,不需要去为定义的Insert语句起不同的id,只需要引用不同的命名空间里的Insert即可)

5.要在全局配置文件中关联配置文件

6.测试代码

import java.io.InputStream;public class testDemo1 {@Testpublic void test1() throws Exception{//1.读取核心配置文件InputStream in= Resources.getResourceAsStream("dataSource.xml");//2.获取一个SqlSessionFactory对象,生产SqlSession对象的工厂SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);//3.获取一个SqlSession ,SqlSession专门去维护我们跟数据库通信的一个对象SqlSession sqlSession = sqlSessionFactory.openSession();//添加数据 ORM 框架,面向对象操作User user=new User("海绵宝宝","海底","男");//执行数据库操作 statement:(制定命名控制的那个方法)namespace+"."+idint count = sqlSession.insert("com.biao.pojo.User.addUser", user);System.out.println("影响的行数..."+count);}
}

7.若出现这个错误


原因:在Maven项目中默认的src/main/java目录下面指挥打包Java编译后的class文件,所以对于UserMapper映射文件是不会打包进去的
解决方法:这种情况我们需要在pom文件中特别之处要处理的文件
,在pom文件中加入

<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>
</build>

8.数据库时区错误

org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
### The error may exist in com/biao/pojo/UserMapper.xml
### The error may involve com.biao.pojo.User.addUser
### The error occurred while executing an update
### Cause: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.


解决方法:在连接数据库配置文件后面加上时区的配置

jdbc:mysql://localhost:3306/shop?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8

9.数据表没有更新数据(提交数据)

10.增删改查

package com.biao.test;import com.biao.pojo.User;
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;public class testDemo1 {@Testpublic void test1() throws Exception{//1.读取核心配置文件InputStream in= Resources.getResourceAsStream("dataSource.xml");//2.获取一个SqlSessionFactory对象,生产SqlSession对象的工厂SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);//3.获取一个SqlSession ,SqlSession专门去维护我们跟数据库通信的一个对象SqlSession sqlSession = sqlSessionFactory.openSession();//添加数据 ORM 框架,面向对象操作User user=new User("派大星","广州","男");//执行数据库操作 statement:(制定命名控制的那个方法)namespace+"."+idint count = sqlSession.insert("com.biao.pojo.User.addUser", user);System.out.println("影响的行数..."+count);//MyBatis 中默认是不会自动提交DML操作的数据的sqlSession.commit();//关闭会话sqlSession.close();}@Testpublic void tsetUpdate() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("dataSource.xml");SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();User user=new User(2,"李白","北京","男");int update = sqlSession.update("com.biao.pojo.User.updateUser", user);System.out.println("影响行数:" + update);sqlSession.commit();sqlSession.close();}@Testpublic void testDelete() throws Exception{InputStream resourceAsStream = Resources.getResourceAsStream("dataSource.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();int delete = sqlSession.delete("com.biao.pojo.User.deleteUser", 3);System.out.println("影响行数" + delete);sqlSession.commit();sqlSession.close();}@Testpublic void queryAll() throws Exception{InputStream resourceAsStream = Resources.getResourceAsStream("dataSource.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();List<User> list=sqlSession.selectList("com.biao.pojo.User.queryAll");for (User u :list) {System.out.println(u);}sqlSession.close();}@Testpublic void queryById() throws Exception{InputStream resourceAsStream = Resources.getResourceAsStream("dataSource.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();List<User> list=sqlSession.selectList("com.biao.pojo.User.queryById",2);for (User u :list) {System.out.println(u);}sqlSession.close();}
}

1.1 MyBatis的简单介绍和基本使用相关推荐

  1. JDBC与Druid简单介绍及Druid与MyBatis连接数据库

    序言 java程序与数据建立连接,首先要从jdbc说起,然后直接上阿里认为宇宙最好的数据库连接池druid,然后再说上层程序对象与数据源映射关联关系的orm-mybatis. JDBC介绍 JDBC( ...

  2. Mybatis 拦截器介绍

    Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 拦截器的一个作用就是我们 ...

  3. 1112_Vue+SpringBoot+Mybatis的简单员工管理项目

    Vue+SpringBoot+Mybatis的简单员工管理项目 本文项目参考自:https://github.com/boylegu/SpringBoot-vue https://www.cnblog ...

  4. 《转载》Mybatis 拦截器介绍

    Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2 拦截器的一个作用 ...

  5. 简单介绍【spring.factories】的使用

    前言 starter的使用在springboot项目中可以说是非常常见,可能有些朋友在使用springboot项目的时候只是在网络上找了一篇如何创建一个springboot,如何又和mybatis或m ...

  6. mybatis框架的介绍和使用

    1. 正文 1. 介绍mybatis框架. 2. 为什么使用mybatis框架. 3. 如何使用mybatis框架. 4. mybatis完成crud操作. 5. mybatis的一些优化和一些插件的 ...

  7. MyBatis 的简单应用(转载)

    MyBatis 的简单应用 博客分类: MyBatis MyBatis.callresultMapdynamic sql  在做测试的时候本来加入oscache ,但是在使用的时候 ,发下 初始化异常 ...

  8. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  9. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

最新文章

  1. Android 图片(ImageView)设置透明的方法
  2. android读取xml 字符串,Android 读取本地Xml文件,并转换成String
  3. Entity Framework
  4. layui 隐藏工具栏打印按钮_PDF如何打印?为什么点打印没反应?
  5. C# WPF MVVM开发框架Caliburn.Micro View / View Model 命名⑨
  6. java 工厂方法模式_Java中的工厂方法模式
  7. 计算机管理设置,win10系统打开计算机管理的设置步骤
  8. 14-angular.isDefined
  9. 【matlab】随意记录
  10. Java虚拟机工作原理具体解释
  11. python不规则切片_python的切片(slice)机制
  12. Visual Studio开发环境下的中文GBK内码获取
  13. SpringBoot上传文件报The field file exceeds its maximum permitted size of 1048576 bytes.
  14. 手机网站支付唤起支付宝app
  15. linux 根目录设置777,linux 把根目录设置成777权限的补救方法
  16. java spider爬虫_一个简单的java网络爬虫(spider)
  17. 微软浏览器如何安装addon(插件)
  18. 首先下载安装data.table包_首次揭秘“超级签”与企业包行业内幕
  19. 常用的几款幕墙BIM软件
  20. 【实拍电机】保时捷PPE平台解析

热门文章

  1. The push refers to repository [xxx] An image does not exist locally with the tag:xxx
  2. 弥补学生时代的遗憾~C#注册表情缘
  3. svchost.exe占用大量资源
  4. mysql查询 展示横纵坐标_sql 分组统计查询并横纵坐标转换
  5. 突破次元壁,AIGC从玩具到工具的跨世纪进阶
  6. 小米手环导出心率_小米手环给卫生纸测出心率?这回真相了
  7. 手势识别功能(Gesture Recognizer)
  8. 抓取摩拜单车车辆位置数据
  9. ip-guard苹果Mac客户端安装步骤
  10. pro7 plus android8,魅族PRO7 Plus是什么系统_魅族PRO7 Plus统更新-太平洋IT百科