# 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 ## 缓存