mybatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
mybatis配置
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
安装
- 导包
使用 Maven 构建项目,需在 pom.xml 文件中导入mybatis依赖
- 从xml中构建SqlSessionFactory
创建mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入外部jdbc配置文件-->
<properties resource="jdbc.properties"/>
<!-- 设置-->
<settings>
<!-- 一级缓存默认开启,开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--设置别名-->
<typeAliases>
<!--为一个类起别名-->
<!--<typeAlias type="com.whh.pojo.Teacher" alias="teacher"></typeAlias>-->
<!--为某个包下的所有类起别名 类名(首字母小写)-->
<package name="com.whh.pojo"/>
</typeAliases>
<!--插件-->
<plugins>
<!--分页插件 需要导包pagehelper-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<environments default="development">
<!-- 可以配置多个-->
<environment id="development">
<!--决定事务作用域和控制方式的事务管理器(TransactionManager)-->
<transactionManager type="JDBC"/>
<!--配置数据源-->
<dataSource type="POOLED">
<property name="url" value="${url}"/>
<property name="driver" value="${driver}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射文件路径地址 mapper(映射器)-->
<mapper resource="mapper/TeacherMapper.xml"/>
</mappers>
</configuration>
- 创建 jdbc.properties属性配置文件
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/stu? characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
username=root password=123456
- 创建sqlMapper.xml —>sql映射文件
我创建的TeacherMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace命名空间,通常使用接口的全限定类名-->
<mapper namespace="com.whh.dao.TeacherMapper">
<!-- id 当前reslutMap的唯一标识
type 当前 对应的实体类的全限定类名/可以给别名-->
<resultMap id="" type="">
<!-- column 结果集的主键 property 属性名-->
<id column="" property=""></id>
<!-- column 结果集的普通列 property 属性名-->
<result column="" property=""></result>
<!--使用构造器进行映射
必须要在实体类中含有 有参构造
顺序与映射文件保持一致-->
<constructor>
<!-- 映射主键 javaType主键的类型-->
<idArg column="" javaType=""></idArg>
<!-- 映射普通列 javaType主键的类型-->
<arg column="" javaType=""></arg>
</constructor>
<!--一对一
Teacher中有private Classes aClass属性-->
<association property="aClass" javaType="classes">
<id></id>
<result></result>
...
</association>
<!-- 一对多或者多对多
Teacher中有private List<Student> studentlist属性 -->
<collection property="studentlist" ofType="student"></collection>
</resultMap>
<!--
id 对应接口中的方法名 注意:保持唯一性
paramaterType 传入的类型
传参的方式:
1.传入基本类型 直接获取
2.传入的多个基本类型,通过下标 或者时 #{paramter1}
3.通过Map 中的key来获取
4.通过注解获取 @Param("key")
5.传入实体类,通过属性名获取 #{属性名}
resultType|resultMap
使用resultType时,说明数据库中的列明与实体类的属性名保持一致,直接赋值
resultMap 数据库中的列明与属性名不一致,需要使用建立好的映射关系
useGeneratedKeys
-->
<select id="" paramaterType=“” resultType|resultMap="" ></select>
<!--
useGeneratedKeys
当新增完成后,使用mybatis的 useGeneratedKeys获取到新增的主键
keyProperty 标识主键的列明
-->
<insert id="" paramterType="" useGeneratedKeys="true" keyProperty="id" ></insert>
<update id="" paramterType=""></update>
<delete id="" paramterType=""></delete>
</mapper>
日志(log4j)
- 导入log4j的jar包
- 在配置文件夹下创建log4j.properties配置文件
# 全局日志配置
log4j.rootLogger=ERROR, stdout
# MyBatis 日志配置
log4j.logger.com.whh.dao=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
使用
下图这里open Session(true)自动提交,默认false
一般查询不用开启自动提交
缓存
一级缓存默认开启
要使用二级缓存,需要在sql映射文件中Mapper.xml文件加入一行
<cache/>
<settings>
<!--默认为true-->
<setting name="cacheEnabled" value="true"/>
</settings>