狂神Mybatis笔记
文章目录
- 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&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&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笔记相关推荐
- 【狂神Mybatis笔记】配置解析
核心配置文件:mybatis-config.xml Mybatis的配置文件包含了会影响Mybatis行为的设置和属性信息 环境配置(environments) 要求:学会使用配置多套运行环境 MyB ...
- 【狂神MyBatis笔记】map作为参数传递类型进行增删改查模糊查询
接口中的参数传入map: 实现类的传入参数为map的键的名称,这个键可以自定义名称: 例:根据ID获取用户 接口: //根据ID获取用户User getUserById2(Map<String, ...
- 狂神mysql笔记 md_MyBatis狂神总结笔记
MyBatis狂神总结笔记 简介 分享自写源码和笔记 配置用的 jdk13.0.2 (jdk1.7以上均可) Maven 3.6.3 MySQL 5.7 (mysql5.6以上均可) 1. 配置 po ...
- JavaWeb(引用-->狂神学习笔记)2021-08
狂神学习笔记 1.基本概念(①) 1.1 前言 web开发: web,网页的意思,www.baidu.com· 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝, ...
- Spring5(引用-->狂神学习笔记)2021-08
狂神学习笔记 Spring5 1.Spring 1.1 简介 2002,首次推出Spring框架的雏形;interface21框架 Spring框架以interface21框架为基础,2004年发布1 ...
- mybatis笔记之一次插入多条数据sql语句写法
mybatis笔记之一次插入多条数据sql语句写法
- MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...
- MySQL(狂神说笔记)
MySQL(狂神说笔记) 1.初始数据库 1.1为什么学习数据库? 1.岗位需求 2.现在的世界,大数据时代,得数据库者得天下. 3.被迫需求: 存数据 4.数据库是所有软件体系中最核心的存在: DB ...
- ElasticSearch(狂神说笔记)
ElasticSearch(狂神说笔记) ES安装及head插件安装 声明:JDK 1.8以上,最低要求!ElasticSearch 客户端.界面工具! Java 开发,ElasticSearch的版 ...
- RabbitMQ狂神说笔记(RabbitMQ B站狂神说笔记、KuangStudy、学相伴飞哥)
一. 引用文章 RabbitMQ狂神说笔记(B站狂神说笔记.KuangStudy.学相伴飞哥) RabbitMQ狂神说笔记(B站狂神说笔记.KuangStudy.学相伴飞哥)百度云盘地址,提取码:07 ...
最新文章
- Firefox 网络调试工具
- ClassLoader 初步
- Golang 性能优化实战
- 根据 HTML 规范,以下代码中,外层容器 .outer 的宽高分别是:
- 【CF#505B】Mr. Kitayuta's Colorful Graph (并查集或Floyd或BFS)
- Android的Fragment介绍
- java8 循环jsonarray_JSONArray 遍历方式
- 动态污点分析——隐式流造成的漏报和误报
- java实现单链表常见操作,java面试题,java初级笔试题
- 统计代码行数的方法梳理
- Spring学习笔记(入门)
- 【图像去噪】基于matlab高通+低通+带通+方向滤波器图像滤波【含Matlab源码 1209期】
- Windows/Ubuntu 使用小技巧记录
- 【docker】ffmpeg本地转码三路推srs
- java项目包名理解
- 华盛顿道格拉斯县计划建立区块链创新园区
- 1500w播放下还藏着什么热点?B站2个未来趋势你不得错过
- libdmtx结合OpenCV识别DataMatrix二维码
- 每天一道大厂SQL题【Day01】
- 2016 版 Laravel 系列入门教程(二)【最适合中国人的 Laravel 教程】