这篇博客主要是将自己之前在学习mybatis的时候在typora做的笔记放在自己的博客上,感觉就像是复习一下(也是该好好写一下博客了)
mybatis的官方文档
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
这里说到的持久层,就是把持久的动作封装成一个独立的层,这是为了降低功1653能代码之间的关联。创建一个更清版晰的抽象,提高代码的内聚力,降低代码的耦合度,从而增强代码的要劳动局生和可重用性。
这里使用maven项目管理来实现
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.5
mysql
mysql-connector-java
public class Student {
private String sno;
private String sname;
private String sage;
}
3.mapper接口构建
public interface StudentMapper {
public List selectStudent(@Param("sname") String sname);
}
注意:这里使用resources里面的时候没有加文件后缀的话会出现错误,建议加上。我有一个测试没有加后缀出现了问题,但是有一个没有加却没有问题不知道什么原因。
6. 创建一个工具类,获得SqlSession、初始化配置
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession(true);
}
}
这里添加配置文件的时候会出现的问题同上
7.测试代码能否运行
SqlSession session = MybatisUtils.getSession();
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
List students = studentMapper.selectStudent("achao");
System.out.println(students);
session.close();
运行成功!
其他说明:MyBatis当然还提供了不使用xml配置文件配置环境的方法,就是使用它的配置类,详情请见官方文档,这里不展示。
需要注意的是,在配置文件中这些标签的顺序不能改变,否则会报错
在这里一些比较容易记住的就不在这里记录了,只是简单的讲解一下它的作用就好了
主要是改变使用MyBatis时候的一些运行时行为。详情见官方文档的一个表格
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
这个时候MyBatis会扫描这个包下的注解,使用@Aliases(name)可以将特定类设置别名为name。没有添加注解的类默认使用类名的小写作为别名使用
可以设置多种配置文件环境(比如当需要连接两个数据库的时候),但是一个SqlSessionFactory实例只能选择一种环境
关键点
作用 告诉MyBatis去哪里找SQL映射语句
实现的方式有四种:
需要现在mapper标签里面设置命名空间与对应的mapper接口形成映射关系
例如
id里面的值映射着对应mapper接口中的查询函数,parameterType里面的值是mapper对应函数中参数的类型,resultType是返回结果的类型。传递的参数使用#{id}的方式拼接到sql语句中。
这里主要讲一下resultMapper的使用(与parameterMap对应):
resultMapper的类型一般的对应着一个pojo实体类,基本作用是改变使用resultType的时候需要自己检查属性与字段的一致性问题。
除此之外,select中还有很多的属性,比如flushCache,useCache,timeout等等。
有两种方式:
有两种方式: