文章目录

  • Mybatis
  • 1.简介
    • 什么是 MyBatis?
  • 2.创建一个Mybatis程序
    • 2.1搭建环境
    • 2.2编写mybatis.config核心配置文件
    • 2.3编写mybatis工具类
    • 2.4编写实体类
    • 2.5编写Dao接口
    • 2.6编写Mapper(相当于JDBC的Dao接口的实现类)
  • 3.测试
  • 4.添加功能
    • 4.1增删改操作 必须提交事务
    • 注意事项!!!
    • 4.2编写接口
    • 4.3编写对应的mapper中的sql语句
    • 测试
  • 5.分析错误

Mybatis

1.简介

什么是 MyBatis?

1.MyBatis 是一款优秀的持久层框架

2.它支持自定义 SQL、存储过程以及高级映射

3.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

4.MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java

POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

中文文档: https://mybatis.org/mybatis-3/zh/sqlmap-xml.html
Github: https://github.com/search?q=mybatis

2.创建一个Mybatis程序

2.1搭建环境

搭建数据库

create database mybatis;
use mybatis;create table user(id int(20) not null primary key,name varchar(30) default null,pwd  varchar(30) default null
)engine=innodb default charset=utf8;insert into user (id,name,pwd) values
(1,'k','123456'),
(2,'z','123456')

创建Maven项目 (父工程)

1.删除src
2.Maven配置文件导入依赖
3.在父工程下导入依赖(子工程均可使用)

 <!--导入依赖--><dependencies><!--    mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--        mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--        junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

创建子工程

maven由于他的约定大于配置,解决配置文件无法被导出或者生效的问题,子工程Maven配置文件中导入 在父工程导入是没用的

<build><resources><!--        手动指定java文件夹为resources文件夹--><!--        当xml文件在java文件夹而不在resources文件夹时,该xml文件不能被编译进target目录,--><!--        又因为代码在执行时是执行的target中编译过的文件,所以加载不到该xml文件。因此必须进行指定。--><resource><directory>src/main/java</directory><includes><!--                    指定java文件夹下子包中的所有.xml文件--><include>**/*.xml</include></includes></resource><!--            上述的指定是将原有的编译资源resources目录覆盖掉了,而不是添加编译目录,因此需要补充原有的编译资源目录--><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource></resources></build>

2.2编写mybatis.config核心配置文件

<?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/mybatis?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true&amp;allowPublicKeyRetrieval=true"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--   每一个Mapper.xml都需要在Mybatis核心文件配置中注册 --><mappers><mapper resource="com/kz/dao/UserMapper.xml"/></mappers>
</configuration>

2.3编写mybatis工具类

package com.kz.utils;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 java.io.IOException;
import java.io.InputStream;//sqlSessionFactory --> sqlSession
public class MyBatisUtils {private static SqlSessionFactory sqlSessionFactory;//获取sqlSession对象static {try {String resource = "mybatis-config.xml";InputStream inputStream = null;inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}}

2.4编写实体类

package com.kz.pojo;public class User {private int id;private String name;private String pwd;public User() {}public int getId() {return id;}public User(int id, String name, String pwd) {this.id = id;this.name = name;this.pwd = pwd;}public void setId(int id) {this.id = id;}public String getName() {return name;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}
}

2.5编写Dao接口

public interface UserMapper{//查询public List<User> getUserList();
}

2.6编写Mapper(相当于JDBC的Dao接口的实现类)

<?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接口-->
<mapper namespace="com.kz.dao.UserMapper">
<!--      返回     方法名                          实体类   --><select id="getUserList" resultType="com.kz.pojo.User">select * from mybatis.user</select>
</mapper>

3.测试

规范写法

    @Testpublic void getUserList(){//获取sqlSession对象SqlSession sqlSession = MyBatisUtils.getSqlSession();// 方式1: getMapperUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();for (User user:userList) {System.out.println(user);}//关闭sqlSession.close();}

4.添加功能

4.1增删改操作 必须提交事务

注意事项!!!

id:就是对应namespace中的方法名
resultTyoe:Sql执行的返回类型
parameterTyoe:参数类型

1.编写接口

//添加public int addUser(User user);

2.编写对应的mapper中的sql语句

   <!--        方法名                 输入类型 --><insert id="addUser" parameterType="com.kz.pojo.User">insert into  mybatis.user (id,name,pwd)  value (#{id},#{name},#{pwd});</insert>

3.测试

//增删改必须提交事务@Testpublic void addUser(){//获取sqlSessionSqlSession sqlSession = MyBatisUtils.getSqlSession();//获取接口UserMapper mapper = sqlSession.getMapper(UserMapper.class);int insert = mapper.addUser(new User(4, "张国荣", "123456"));//事务提交sqlSession.commit();sqlSession.close();}

4.2编写接口

public interface UserMapper {//查询public List<User> getUserList();//通过id查询public User selectById(int i);//添加public int addUser(User user);//修改public int updateUser(User user);//删除public int deleteUser(int i);//万能mapint addUser2(Map<String,Object> map);//模糊查询List<User> selectLike(String value);
}

4.3编写对应的mapper中的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接口-->
<mapper namespace="com.kz.dao.UserMapper">
<!--      返回     方法名                          实体类   --><select id="getUserList" resultType="com.kz.pojo.User">select * from mybatis.user</select>
<!--                         输入类型             输出类型--><select id="selectById" parameterType="int" resultType="com.kz.pojo.User">select * from mybatis.user where id=#{id};</select><!--                         输入类型             输出类型--><insert id="addUser" parameterType="com.kz.pojo.User">insert into  mybatis.user (id,name,pwd)  value (#{id},#{name},#{pwd});</insert><update id="updateUser" parameterType="com.kz.pojo.User">update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};</update><delete id="deleteUser" parameterType="int">delete  from mybatis.user where id=#{id};</delete><insert id="addUser2" parameterType="map">insert into mybatis.user (id,name,pwd) values (#{uid},#{uname},#{upwd})</insert><select id="selectLike" parameterType="map" resultType="com.kz.pojo.User">select * from mybatis.user where name like "%"#{value}"%";</select>
</mapper>

测试

package com.kz.dao;import com.kz.pojo.User;
import com.kz.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class UserMapperTest {@Testpublic void getUserList(){//获取sqlSession对象SqlSession sqlSession = MyBatisUtils.getSqlSession();// 方式1: getMapperUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();for (User user:userList) {System.out.println(user);}//关闭sqlSession.close();}@Testpublic void selectById(){//获取SqlSessiionSqlSession sqlSession = MyBatisUtils.getSqlSession();//获取接口UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.selectById(2);System.out.println(user);sqlSession.close();}
//万能的Map@Testpublic void addUser2(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> objectStringMap = new HashMap<>();objectStringMap.put("uid",10);objectStringMap.put("uname","123");mapper.addUser2(objectStringMap);sqlSession.commit();sqlSession.close();}
//模糊查询@Testpublic void selectLike(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectLike("1");for (User user : users) {System.out.println(user);}sqlSession.close();}//增删改必须提交事务@Testpublic void addUser(){//获取sqlSessionSqlSession sqlSession = MyBatisUtils.getSqlSession();//获取接口UserMapper mapper = sqlSession.getMapper(UserMapper.class);int insert = mapper.addUser(new User(4, "张国荣", "123456"));//事务提交sqlSession.commit();sqlSession.close();}@Testpublic void updateUser(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int i = mapper.updateUser(new User(1, "刘德华", "123456"));sqlSession.commit();System.out.println("修改成功");sqlSession.close();}@Testpublic void deleteUser(){SqlSession sqlSession = MyBatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int i = mapper.deleteUser(4);sqlSession.commit();System.out.println("删除成功");sqlSession.close();}}

5.分析错误

1.标签不要匹配错

2.resouce绑定mapper,需要使用路径

3.程序配置文件必须符合规范

4.NullPoinException,没有注册资源

5.输出的xml文件中存在中文乱码

6.maven资源没有导出问题

狂神Mybatis笔记相关推荐

  1. 【狂神Mybatis笔记】配置解析

    核心配置文件:mybatis-config.xml Mybatis的配置文件包含了会影响Mybatis行为的设置和属性信息 环境配置(environments) 要求:学会使用配置多套运行环境 MyB ...

  2. 【狂神MyBatis笔记】map作为参数传递类型进行增删改查模糊查询

    接口中的参数传入map: 实现类的传入参数为map的键的名称,这个键可以自定义名称: 例:根据ID获取用户 接口: //根据ID获取用户User getUserById2(Map<String, ...

  3. 狂神mysql笔记 md_MyBatis狂神总结笔记

    MyBatis狂神总结笔记 简介 分享自写源码和笔记 配置用的 jdk13.0.2 (jdk1.7以上均可) Maven 3.6.3 MySQL 5.7 (mysql5.6以上均可) 1. 配置 po ...

  4. JavaWeb(引用-->狂神学习笔记)2021-08

    狂神学习笔记 1.基本概念(①) 1.1 前言 web开发: web,网页的意思,www.baidu.com· 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝, ...

  5. Spring5(引用-->狂神学习笔记)2021-08

    狂神学习笔记 Spring5 1.Spring 1.1 简介 2002,首次推出Spring框架的雏形;interface21框架 Spring框架以interface21框架为基础,2004年发布1 ...

  6. mybatis笔记之一次插入多条数据sql语句写法

    mybatis笔记之一次插入多条数据sql语句写法

  7. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  8. MySQL(狂神说笔记)

    MySQL(狂神说笔记) 1.初始数据库 1.1为什么学习数据库? 1.岗位需求 2.现在的世界,大数据时代,得数据库者得天下. 3.被迫需求: 存数据 4.数据库是所有软件体系中最核心的存在: DB ...

  9. ElasticSearch(狂神说笔记)

    ElasticSearch(狂神说笔记) ES安装及head插件安装 声明:JDK 1.8以上,最低要求!ElasticSearch 客户端.界面工具! Java 开发,ElasticSearch的版 ...

  10. RabbitMQ狂神说笔记(RabbitMQ B站狂神说笔记、KuangStudy、学相伴飞哥)

    一. 引用文章 RabbitMQ狂神说笔记(B站狂神说笔记.KuangStudy.学相伴飞哥) RabbitMQ狂神说笔记(B站狂神说笔记.KuangStudy.学相伴飞哥)百度云盘地址,提取码:07 ...

最新文章

  1. Firefox 网络调试工具
  2. ClassLoader 初步
  3. Golang 性能优化实战
  4. 根据 HTML 规范,以下代码中,外层容器 .outer 的宽高分别是:
  5. 【CF#505B】Mr. Kitayuta's Colorful Graph (并查集或Floyd或BFS)
  6. Android的Fragment介绍
  7. java8 循环jsonarray_JSONArray 遍历方式
  8. 动态污点分析——隐式流造成的漏报和误报
  9. java实现单链表常见操作,java面试题,java初级笔试题
  10. 统计代码行数的方法梳理
  11. Spring学习笔记(入门)
  12. 【图像去噪】基于matlab高通+低通+带通+方向滤波器图像滤波【含Matlab源码 1209期】
  13. Windows/Ubuntu 使用小技巧记录
  14. 【docker】ffmpeg本地转码三路推srs
  15. java项目包名理解
  16. 华盛顿道格拉斯县计划建立区块链创新园区
  17. 1500w播放下还藏着什么热点?B站2个未来趋势你不得错过
  18. libdmtx结合OpenCV识别DataMatrix二维码
  19. 每天一道大厂SQL题【Day01】
  20. 2016 版 Laravel 系列入门教程(二)【最适合中国人的 Laravel 教程】

热门文章

  1. javaEE自驾游旅游景点管理系统ssm
  2. 初生牛犊不怕虎,管他呢! 干就是了。
  3. 欧拉公式以及凉鞋问题
  4. TCP全连接端口扫描器
  5. html修改progress背景色,html5 progress标签如何更改进度条颜色?progress进度条详解...
  6. mysql 查看校对集,MySQL校对集
  7. fNIRS | 非平稳波形的预处理方法
  8. 运维工程师被墨菲定律的各种打脸之DXX问题
  9. css中导入自定义字体库
  10. 系统清理维护与安全防护软件