背景知识
mybatis是什么
MyBatis 是一款优秀的持久层框架<br>
它支持自定义 SQL、存储过程以及高级映射。
为什么要使用mybatis
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
一个mybatis程序<br>
1、搭载环境<br>
1、新建Maven项目
2、删除src目录
3、导入Maven依赖
mysql依赖
mybatis依赖
junit依赖
2、创建一个子模块
1、在resources目录下创建mybatis-config.xml文件
2、配置mybatis-config.xml
⭐每一个Mapeer.xml都需要在Mybatis.xml核心配置文件中注册!<br>
3、编写工具类
3、编写测试代码
1、编写接口
2、编写接口实现类
4、使用junit测试代码
1、@Test注解<br>
2、使用MybatisUtils获得sqlSession<br>
3、使用sqlSession.getMapper获得mapper
4、使用mapper调用方法
5、关闭mapper
配置解析
Mybatis默认是事务管理器是JDBC,还有一个已经不再使用了
属性配置
properties外部配置文件
<!--引入外部配置文件--><br><properties resource="db.properties"><br> <property name="user" value="root"/><br> <property name="pwd" value="root"/><br></properties>
如果propertie和外部文件重名,优先使用外部配置文件
typeAlies别名设置
扫描实体类
<!--类别名--><br> <typeAliases><br> <typeAlias type="com.learning.pojo.User" alias="user"/><br> </typeAliases><br>
扫描pojo包
默认别名是类名(首字母小写)
<!--类别名--><br> <typeAliases><br> <package name="com.learning.pojo"/><br> </typeAliases>
可以使用注解起别名@Alias
映射器
1、resource绑定
2、class绑定
3、通过包绑定
注意:接口和xml需要同名同包<br>
生命周期
SqlSessionFactoryBulider<br>
一旦创建了SqlSessionFactory后就不再需要了
SqlSession
类似于线程池的一个线程<br>
用完后必须关闭
日志
日志工厂
标准的日志工厂配置
<settings><br> <setting name="logImpl" value="STDOUT_LOGGING"/><br> </settings>
LOG4J
1、先导入LOG4J的依赖
<dependency><br> <groupId>log4j</groupId><br> <artifactId>log4j</artifactId><br> <version>1.2.17</version><br></dependency>
2、创建LOG4J的配置文件
3、mybatis-config.xml注册LOG4J的日志实现
4、在需要使用LOG4J的类中导包
5、获取LOG4J对象,参数是当前类.class
分页
1、limit startIndex,pageSize
2、RowBounds实现分页,官方不推荐<br>
3、Mybatis PageHelaper分页插件<br>
Lombok
配置
1、IDEA安装lombok插件<br>
2、导入依赖
使用
@Data //所有的get、set、equals、hashcode<br>@AllArgsConstructor //有参构造<br>@NoArgsConstructor //无参构造
多对一查询
association
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
一对多查询
collection
<collection property="students" column="tid" <u style=""><b style=""><font color="#f68b1f">javaType="ArrayList"</font></b></u> select="getStudents"/>
动态SQL
if标签
<if test="anything != null"><br> and anything = #{anything}<br></if>
其他常用标签
choose-when-otherwise
trim
sql片段
1、定义sql片段<br>
<<b><font color="#0076b3">sql id="if-title"</font></b>><br> <if test="title != null"><br> and title = #{title}<br> </if><br> </sql>
2、引用sql片段
<<font color="#0076b3"><b>include refid</b></font>="<b><font color="#0076b3">if-title</font></b>"></include>
foreach
<foreach item="item" index="index" collection="list"<br> open="(" separator="," close=")"><br> #{item}<br> </foreach>
等价于(item1=item2=...)