MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
学习优秀框架最好的方式就是阅读官网文档,经过初步理解和掌握,初试第一个mybatis程序。
根据官网文档。创造一个Maven项目并且在pom文件中进入如下必备的代码配置。
org.mybatis mybatisx.x.x
当然初次之外还需要mysql依赖和一个测试junit依赖,配置后的pom为(最后一个是为了解决maven的小缺陷,我认为是小缺陷,文件过滤(之后再深入学习)没有这个的话,mapper.xml无法加载进target然后报错 )
4.0.0 org.example Mybatis_first_studypom 1.0-SNAPSHOT mybatis-01 org.mybatis mybatis3.5.2 mysql mysql-connector-java5.1.36 junit junit3.8.2 test 8 8 src/main/java ***.xml ***.properties ** public class MybatisUtil { 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(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
获得一个构造sqlsession的方法,
然后了解到一个mybatis-config.xml文件,XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源。于是被迫进行一个xml文件的配置。如下,这个放在resources下。(具体的文件结构一会给出,不过没有认真整理还是比较乱,希望大家养成良好的目录习惯)
跟jdbc的properties的配置非常像,driver包,url路径,username和pwd。并且在这要注意下面的
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。如
try (SqlSession session = sqlSessionFactory.openSession()) {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}
但这是古老的方式现在大多不这么使用。
现在的都是获取到一个mapper(官网提倡使用这种方法)
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}
对于mapper和sqlsession到底做了什么,我来白话一下。
简单来说sqlsession就是要执行在数据库的所有方法,但是这里引进了xml定义语句。1个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式,事实上 MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现。
经过简单的实现完成一个mapper的配置。
namespace 对应着一个实体类,这个实体类所包含的成员对应着数据库的字段,并包含着getter和setter以及toString().
通过这个命名空间的映射就绑定住了一个接口文件,这个xml文件就类似于一个实现类、用全限名来调用映射语句就好像用全限定名调用一个java对象,这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。
与其绑定的Mapper类(接口)
package com.util.Mapper;
import com.util.doclass.teacher;
import java.util.List;
public interface UserMapper {
List selectAll();
}
然后进行一下测试
package com.util;
import com.util.Mapper.UserMapper;
import com.util.doclass.teacher;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List teachers = mapper.selectAll();
for (teacher t1:teachers
) {
System.out.println(t1);
}
}
}
获得成功!!



