# Mybatis_notes
**Repository Path**: trying326/Mybatis_notes
## Basic Information
- **Project Name**: Mybatis_notes
- **Description**: 记录MyBatis的学习记录,练习实例。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-05-28
- **Last Updated**: 2024-11-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Mybatis_notes
#### 介绍
MyBatis的学习记录,实例练习,对于MyBatis的使用做了一些详细的介绍,并附带示例,以及详细的注释,能够快速入门。
这些都是我个人学习MyBatis的经验,最近做了一些整理,并不涉及深层次的原理,只能作为MyBatis的基础入门级别的参考,如果有错误的地方,欢迎指正。
笔记如果不够详尽,或者有表述不清楚,逻辑混乱的地方,希望看到的人能够包含,并且希望能够给出修改意见。
不胜感激!!!
## Mybatis--【入门示例】
1)导包
2)可新配置文件,configuration.xml
配置和数据库相关的信息,driver / url / username / password ...
3)提供SqlSession对象,对数据库进行操作
4)传递参数,实现增删改查。
MyBatis默认手动提交事务
5)配置--mybatis核心配置文件
```xml
```
6)配置--mapper文件
```xml
sql : insert
sql : update
sql : delete
```
7)MyBatis--新增[简单示例--静态参数]
```java
package cn.qzbook.dao.Student;
import cn.qzbook.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 java.io.IOException;
import java.io.InputStream;
public class StudentDao {
//新增 [简单实现,没有传递参数,只在配置文件中写死sql]
public void insert() throws IOException {
//将核心配置文件读取到输入流
InputStream resourceAsStream = Resources.getResourceAsStream("configuration.xml");
//获取SqlSessionFactoryBuilder[sql会话工厂建造者]
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//通过builder获取SqlSessionFactory[sql会话工厂] 并加载核心配置文件[输入流]
SqlSessionFactory sqlSessionFactory = builder.build(resourceAsStream);
//获取一个sql连接[会话] MyBatis默认开启事务,并且需要手动提交,可以改为自动提交[arg == true]
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//sqlSession 执行insert方法 [arg == mapper中insert标签的id]
sqlSession.insert("insert");
//如果没有修改MyBatis的手动提交事务,手动提交[sqlSession.commit()]
}
```
## MyBatis--【初始化 / 获取连接】
```java
//将核心配置文件读取到输入流
InputStream resourceAsStream = Resources.getResourceAsStream("configuration.xml");
//获取SqlSessionFactoryBuilder[sql会话工厂建造者]
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//通过builder获取SqlSessionFactory[sql会话工厂] 并加载核心配置文件[输入流]
SqlSessionFactory sqlSessionFactory = builder.build(resourceAsStream);
//获取一个sql连接[会话] MyBatis默认开启事务,并且需要手动提交,可以改为自动提交[arg == true]
SqlSession sqlSession = sqlSessionFactory.openSession(true);
```
##MyBatis--【增/ 删 / 改 / 静态参数】
##MyBatis--【增/ 删 / 改 / 动态参数】
##MyBatis--【简单查询 / 静态参数】
1)单条查询
配置文件--添加select标签 [简单实现,不传递参数]
```xml
```
实现--java代码
```java
public Student selectOne() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("configuration.xml");
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sfb.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//前面流程一样
//查询单条记录,调用selectOne方法 [多条selectList]
Student student = sqlSession.selectOne("selectOne");
return student;
}
```
2)多条查询
配置文件--添加select标签 [简单实现,无条件参数]
```xml
```
实现--java代码
```java
public List selectList() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("configuration.xml");
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sfb.build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//前面流程一样
//查询多条记录,调用selectList [单条selectOne方法]
List students = sqlSession.selectList("selectList");
return students;
}
```
3)自定义查询[统计查询]
配置文件----添加select标签 [简单实现,无条件参数,查询记录条数,返回值为基本数据类型]
```xml
```
实现--java代码
```java
public int selectCount(){
//获取session对象省略 ...
int num = sqlSession.selectOne("selectCount");
return num;
}
```
MyBatis支持对象,也支持基本数据类型,只需要在select标签的resultType中填写sql结果集对应的数据类型即可。
4)自定义查询[拼接的结果集]
配置文件--添加select标签[无参,结果集没有对应的domain实体,且不止一个,使用map作为结果集容器]
```xml
```
实现--java代码
```java
/**
查询一个结果还是多个结果,取决于调用selectOne还是selectList
这里是调用selectList,所以返回结果是List结合,hashMap则表示其中单行记录
list是一个结果集,map是一行的记录
*/
public List