MyBatis入门
一款半自动的ORM持久层框架。
ORM : Object Relation Mapping 对象关系映射。在Java对象和数据库的关系模型之间建立一种对应关系。
半自动:手动编写SQL语句。提供了输入映射和输出映射,可以方便地进行SQL参数设置,以及结果集封装。
持久层:可以立即保存在磁盘上,在这里可以理解为与数据库相关操作。
Hibernate : 全自动,只需定义ORM映射关系,就可直接进行CRUD操作。
步骤
-
编写全局配置文件
-
编写mapper映射文件
-
加载全局配置文件,生成SqlSessionFactory
-
创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作
例子
创建数据库
创建maven项目
导入依赖jar包
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.10</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies>
根据数据表创建POJO类
import lombok.*;
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @ToString public class Student {
private Integer id;
private String name;
private Integer score;
private Integer age;
private Integer gender;
} 编写mapper映射文件(编写SQL)
<!-- StudentMapper.xml --> <?xml version="1.0" encoding="UTF-8" ?>
<mapper namespace="test"> <select id="findAll" resultType="com.yogurt.po.Student"> SELECT * FROM student; </select>
<insert id="insert" parameterType="com.yogurt.po.Student">
INSERT INTO student (name,score,age,gender) VALUES (#{name},#{score},#{age},#{gender});
</insert>
<delete id="delete" parameterType="int">
DELETE FROM student WHERE id = #{id};
</delete>
</mapper>
编写数据源properties文件
db.url=jdbc:mysql://192.168.183.129:3306/yogurt?characterEncoding=utf8
db.user=root
db.password=root
db.driver=com.mysql.jdbc.Driver
编写全局配置文件(主要是配置数据源信息)
db.url=jdbc:mysql://192.168.183.129:3306/yogurt?characterEncoding=utf8 db.user=root db.password=root db.driver=com.mysql.jdbc.Driver
1
2
3
4
编写全局配置文件(主要是配置数据源信息)
<?xml version="1.0" encoding="UTF-8" ?>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 从配置文件中加载属性 -->
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载前面编写的SQL语句的文件 -->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
编写dao类
测试
注意:
1.编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数 2.编写全局配置文件,配置数据源,以及要加载的mapper.xml文件 3.通过全局配置文件,创建SqlSessionFactory 4.每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession 5.调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数 6.全局配置文件中各个标签按以下顺序配置(因为mybatis加载配置文件的源码按此顺序解析)
<configuration> <!-- 配置顺序如下 properties
<!--一般将数据源的信息单独放在一个properties文件中,然后用这个标签引入,在下面environment标签中,就可以用`${}`占位符快速获取数据源的信息-->
settings
<!--用来开启或关闭mybatis的一些特性,比如可以用<setting name="lazyLoadingEnabled" value="true"/>来开启延迟加载,可以用<settings name="cacheEnabled" value="true"/>来开启二级缓存-->
typeAliases
<!--在mapper.xml中需要使用parameterType和resultType属性来配置SQL语句的输入参数类型和输出参数类型,类必须要写上全限定名,比如一个SQL的返回值映射为Student类,则resultType属性要写com.yogurt.po.Student,这太长了,所以可以用别名来简化书写-->
typeHandlers
<!--用于处理Java类型和Jdbc类型之间的转换,mybatis有许多内置的TypeHandler,比如StringTypeHandler,会处理Java类型String和Jdbc类型CHAR和VARCHAR。这个标签用的不多-->
objectFactory
<!--mybatis会根据resultType或resultMap的属性来将查询得到的结果封装成对应的Java类,它有一个默认的DefaultObjectFactory,用于创建对象实例,这个标签用的也不多-->
plugins
<!--可以用来配置mybatis的插件,比如在开发中经常需要对查询结果进行分页,就需要用到pageHelper分页插件,这些插件就是通过这个标签进行配置的。在mybatis底层,运用了责任链模式+动态代理去实现插件的功能-->
environments
<!--用来配置数据源-->
environment
transactionManager
dataSource
mappers
<!--用来配置mapper.xml映射文件,这些xml文件里都是SQL语句-->
-->
</configuration>
别名映射
起因:parameterType 和 resultType 的值 需要使用类的完全限定名 太麻烦 希望使用 简短的名字来替代 类的完全限定名
清空某个表
truncate 某个;
侵入式延迟 积极加载
侵入式延迟 访问主对象及主对象里面的属性时,不光会加载主对象(即从数据库中查询主对象的信息),还会一同加载关联对象。 积极加载
深度延迟 访问主对象属性时,只加载主,只有当访问关联对象的属性时,才会去加载关联对象。 按需加载
映射配置文件中子查询设置fetchType
fetchType=“eager” 不支持懒加载
fetchType=“lzsy” 支持懒加载

浙公网安备 33010602011771号