# MybatisLearn
**Repository Path**: chmingx/mybatis-learn
## Basic Information
- **Project Name**: MybatisLearn
- **Description**: 学习Mybatis
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-05-18
- **Last Updated**: 2021-09-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Mybatis笔记
## 第一个Mybatis程序
- pom中导入依赖
```xml
mysql
mysql-connector-java
8.0.20
org.mybatis
mybatis
3.5.6
```
如有必要,需要解决Maven静态资源过来问题
```xml
src/main/resources
**/*.properties
**/*.xml
true
src/main/java
**/*.properties
**/*.xml
true
```
- 编写Mybatis核心配置文件 `mybatis-config.xml`
```xml
```
- 编写Mybatis工具类
```java
package com.cm.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;
/**
* Mybatis Utils get sqlSessionFactory
* sqlSessionFactor get sqlSession
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* get SqlSession
* set auto commit
* @return SqlSession
*/
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession(true);
}
}
```
说明:
1. 利用SqlSessionFactorBuilder构建SqlSessionFactory
2. 从SqlSession中获取SqlSession, 再进行数据库操作
3. SqlSessionFactor相当于是连接池,需要使用单例模式
4. SqlSession是连接,用完放回连接池
- 创建实体类
```java
package com.cm.pojo;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String name;
private String pwd;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
```
- 编写Mapper接口
类似于DAO
```java
package com.cm.dao;
import com.cm.pojo.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
public User getUserById(@Param("id") int id);
}
```
- 编写Mapper.xml配置文件
```xml
```
- 在Mybatis核心配置文件中注册Mapper
见`mybatis-config.xml`的 `` 标签
- 测试
```java
package com.cm.dao;
import com.cm.pojo.User;
import com.cm.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class UserMapperTest {
@Test
public void testGetUserById() {
// 获取SqlSession, 建议写在try-resource中
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 获取Mapper
// 方法一
// User user = sqlSession.selectOne("com.cm.dao.UserMapper.getUserById", 1);
// 方法二
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
}
```
## CRUD
## Mybatis核心配置说明
## 复杂sql, 一对多,多对一问题
## 动态sql
## 缓存