1.使用
- 配置总配置文件mybatis-config.xml,将数据库连接所需参数写入
- 创建一个接口interface1,定义一个抽象方法fun1。
- 创建一个mapper.xml实现接口interface1
- 在mapper.xml中实现方法fun1
- 在总配置文件mybatis-config.xml中注册mapper.xml
- 使用SqlSessionFactoryBuilder加载总配置文件mybatis-config.xml建造SqlSessionFactory,使用SqlSessionFactory生产SqlSession
- 此时生产出的SqlSession即为与数据库的连接对象,相当于jdbc中的connection。使用SqlSession获取接口interface1
- 使用接口对象interface1去调用其中被实现了的方法fun1
2.总配置文件
2.1properties
一般将数据源的信息单独放在一个properties文件中,然后用这个标签引入,在下面environment标签中,就可以用${}占位符快速获取数据源的信息
2.2settings
用来开启或关闭mybatis的一些特性,比如可以用<.settings name=“cacheEnabled” value=“true”/>来开启二级缓存;用<.settings name=“logImpl” value=“STDOUT_LOGGING”/>来开启日志
2.3typeAliases
在mapper.xml中需要使用parameterType和resultType属性来配置SQL语句的输入参数类型和输出参数类型,类必须要写上全限定名,可以用别名来简化书写,比如
<typeAliases>
<typeAlias type="com.yogurt.po.Student" alias="student"/>
</typeAliases>
之后就可以在resultType上直接写student,mybatis会根据别名配置自动找到对应的类。
当然,如果想要一次性给某个包下的所有类设置别名,可以用如下的方式
<typeAliases>
<package name="com.yogurt.po"/>
</typeAliases>
如此,指定包下的所有类,都会以简单类名的小写形式,作为它的别名
另外,对于基本的Java类型 -> 8大基本类型、包装类以及String类型,mybatis提供了默认的别名。基本数据类型为前面加_,如_int;包装类和String的别名为其简单类名的小写,如integer
2.4environments
用来配置数据源
2.5mappers
用来配置mapper.xml映射文件,这些xml文件里都是SQL语句
3.细节
3.1ParamType传入参数的处理
- 无论传哪种参数给mybatis,他都会将参数转化为一个map:
-
传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。
-
如果传入对象: 对象的属性名作为key,属性值作为value,生成的元素个数与属性个数相同。
-
如果传入List: "list"作为key,这个List是value (这类参数可以迭代,利用标签实现循环)
-
如果传入数组: "array"作为key,数组作为value(同上)
-
如果传入Map: 键值不变。
- sql语句中若想获得该map中的value,可用#{key}
- 为了方便的传送字段,我们可以将想传输的字段封装为一个map传给ParamType
3.2ResultMap的使用
在使用ResultType返回一个自定义的Javabean时,数据库中的字段可能会和javabean中字段不同。此时就需要用ResultMap代替ResultType了。
<resultMap id="UserMap" type="User">
<!-- id为主键 -->
<id column="id" property="id"/>
<!-- column是数据库表的列名 , property是对应实体类的属性名 -->
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
3.3多对一、一对多的处理
多对一:使用resultMap标签下的association标签去封装“一”
<resultMap id="StudentTeacher2" type="Student">
<id property="id" column="sid"/>
<result property="name" column="sname"/>
<!--关联对象property 关联对象在Student实体类中的属性-->
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
一对多:使用resultMap标签下的collection标签去封装“多”
<resultMap id="TeacherStudent" type="Teacher">
<result property="name" column="tname"/>
<collection property="students" ofType="Student">
<result property="id" column="sid" />
<result property="name" column="sname" />
<result property="tid" column="tid" />
</collection>
</resultMap>
3.4动态sql
主要为WHERE/SET+if来操作
其中where能智能省略and,set能智能省略逗号
3.5缓存
MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存
- 默认情况下,只有一级缓存开启。
- 他是SqlSession级别的缓存(SqlSession可以用来执行已注册接口中的任一方法),即每个数据库连接对象都有自己的一个缓存,由该对象执行的查询操作都会先往自己的缓存中查询。
- 若该对象执行了删改类操作则会清空缓存
- 二级缓存需要在Setting标签中开启和配置
- 他是基于SqlSessionFactory级别的缓存。该SqlSessionFactory创造的所有SqlSession的查询操作都会先往自己的二级缓存汇总查询(二级>一级)
- 当该接口的一个数据库连接对象sqlsession关闭后,该对象会将自己的一级缓存提交到接口的二级缓存中
- 任何sqlsession执行的增删改都会清空二级缓存