MyBatis入门

一款半自动的ORM持久层框架。

ORM : Object Relation Mapping 对象关系映射。在Java对象和数据库的关系模型之间建立一种对应关系。

半自动:手动编写SQL语句。提供了输入映射和输出映射,可以方便地进行SQL参数设置,以及结果集封装。

持久层:可以立即保存在磁盘上,在这里可以理解为与数据库相关操作。

Hibernate : 全自动,只需定义ORM映射关系,就可直接进行CRUD操作。

步骤

  1. 编写全局配置文件

  2. 编写mapper映射文件

  3. 加载全局配置文件,生成SqlSessionFactory

  4. 创建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” 支持懒加载


__EOF__

本文作者3DG
本文链接https://www.cnblogs.com/3-DG/p/17832542.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   3DG  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示