MyBatis入门学习及常见问题处理

一、MyBatis是什么?

MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立mapping映射关系,是一种半自动化的 ORM 实现。其封装性低于Hibernate,但性能优秀、小巧、简单易学、应用广泛。

MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。MyBatis与其它持久性框架最大的不同是,MyBatis 强调使用 SQL,而其它框架(例如 Hibernate)通常使用自定义查询语言,即 HQL(Hibernate查询语言)或EJB QL(Enterprise JavaBeans查询语言)。

优点

  1. MyBatis是免费且开源的。
  2. 与 JDBC 相比,减少了 50% 以上的代码量。
  3. MyBatis是最简单的持久化框架,体积小巧并且学习门槛低。
  4. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。
  5. 提供 XML 标签,支持编写动态 SQL语句。
  6. 提供映射标签,支持实体对象与数据库的表字段关系映射。

缺点

  1. 编写 SQL语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

二、MyBatis 入门学习

第一步:准备工作

1. 下载并添加MyBatis依赖

官网地址:https://github.com/mybatis/mybatis-3/releases

下载完成后解压目录结构如下:

上图中的 mybatis-3.5.10.jar是 MyBatis的核心包,mybatis-3.5.10.pdf 是 MyBatis官方使用手册,lib 文件夹下的 jar 文件是 MyBatis的依赖包,如下图所示。

将核心包mybatis-3.5.10.jar和lib目录下的依赖包,全部添加至项目构建路径中。

2. 创建数据库表

3.创建实体类

在 src 目录下创建一个名为com.apesource.entity 的包,在该包中创建实体类 Website。

但是在这里特别需要注意的是,在类中声明的属性名称数据表 website 的字段名称,保持完全一致

第二步:SQL映射文件

在 src 目录下创建 com.apesource.mapper 包,在该包下创建映射文件 User.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是命名空间, 作用是对sql进行分类化管理-->

<!-- 如果使用mapper代理的方式进行开发,namespace会有特殊的作用-->

<mapper namespace="test">

  <!-- 在映射文件中会配置很多sql语句

      通过select标签执行数据库的查询

     id:标识映射文件中的sql语句

       由于将sql语句封装到mappedStatement对象中,所以id也称作statementid

     parameterType:输入参数的类型

     #{}表示一个占位符

     #{id}:其中id表示接收参数的名称,如果参数类型是基本数据类型,名称可以随意

     resultType:指定sql查询结果所输出的java对象类型

   -->

  <select id="findUserById" parameterType="int" resultType="cn.xync.pro.entity.UserInfo">

     select * from userinfo where id=#{id}

  </select>

</mapper>

上述代码中,<mapper> 元素是配置文件的根元素,它包含了 namespace属性,该属性值通常设置为“包名+SQL映射文件名”,用于指定唯一的命名空间。

子元素 <select> 中的信息用于执行查询操作。

在定义的 SQL语句中,“#{}”表示一个占位符,相当于“?”,而“#{name}”表示该占位符用于接收参数中的名称为 name的参数值。

第三步:配置核心文件

MyBatis 核心配置文件主要用于配置数据库连接和 MyBatis运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性。

在 src 目录下创建 MyBatis的核心配置文件 mybatis-config.xml,在该文件中配置了数据库环境和映射文件的位置,具体实现略;

第四步:日志文件

MyBatis 默认使用 log4j 输出日志信息,如果开发者需要查看控制台输出的 SQL 语句,可以在 classpath 路径下配置其日志文件。在 mybatisDemo 的 src 目录下创建 log4j.properties 文件,其内容如下:

# Global logging configuration

log4j.rootLogger=ERROR,stdout

# MyBatis logging configuration...

log4j.logger.com.apesource=DEBUG

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

第五步:测试类

在 src 目录下创建一个名为com.apesource.test 的包,在该包中创建 MyBatisTest 测试类。在测试类中首先使用输入流读取配置文件,然后根据配置信息构建 SqlSessionFactory 对象。接下来通过 SqlSessionFactory 对象创建 SqlSession 对象,并使用 SqlSession 对象的方法执行数据库操作,本小节的具体测试略。

三、问题处理——Mybatis入门学习中一些常见的问题及使用建议

1.mapper 映射文件导入出错,如下图所示:

一般是路径问题,mybatis-config.xml 配置文件中,配置 UserMapper.xml 的路径问题,很容易出错,可以使用以下技巧,在 IDEA 中右键点击 UserMapper.xml 获取相对于 Source root 的路径,拷贝后复制,然后到 mybatis 中配置 mapper 映射文件即可

2.实体类属性名与数据库表的字段名不一致,如下图所示

解决方案一是 SQL 语句中为不一致的字段起别名,但是这样会比较繁琐,不推荐

解决方案二是 Mapper 配置文件中添加 ResultMap 标签,将不一致的字段产生映射关系

result 标签中 column 属性对应数据库表中字段名,property 对应 实体类的属性名

id 标签是类似的,如果 id (主键)名称不一致,使用这个标签表示映射关系

<?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">

<mapper namespace="com.bugmaker.mapper.BrandMapper">

    <resultMap id="brandResultMap" type="Brand">

        <result column="brand_name" property="brandName"/>

        <result column="company_name" property="companyName"/>

<!--        <id column="id" property="id"/>-->

    </resultMap>

</mapper>

3.对于一些 type 属性,往往是需要使用全限定名的,比如 com.bugmaker.pojo.User,非常繁琐,因此可以在 mybaits-config.xml 配置文件中声明别名:

<!-- 类型别名 -->

<typeAliases>

    <typeAlias alias="User" type="com.bugmaker.pojo.User"/>

</typeAliases>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南北东西南北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值