MyBatis基础操作

Posted LXMJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis基础操作相关的知识,希望对你有一定的参考价值。

MyBatis基础操作

一、Mybatis简介

1.1 MyBatis背景

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java对象映射成数据库中的记录。

1.2 MyBatis特点

  • MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。

  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 映射成数据库中的记录。

  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。

  • MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

  • 解除sql与程序代码的耦合,通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

1.3 持久化

  • 持久化是将程序数据在持久状态和瞬时状态间转换的机制。

    1. 即把数据保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等。

    2. JDBC就是一种持久化机制。文件IO也是一种持久化机制。

  • 由于内存本身的缺陷导致需要持久化服务。

    1. 内存断电后数据会丢失,但有些对象是不能够丢失的。

    2. 内存的价格过于昂贵,而且维持成本也高,所以即使对象不需要永久保存,也需要持久化地缓存到外存。

1.4 持久层

  • 持久层是完成持久化工作的代码块 。

    1. 数据持久化意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系型数据库来完成。

    2. 对于应用系统而言,数据持久功能大多是必不可少的组成部分。我们的系统架构中,应该有一个相对独立的逻辑层面,专著于数据持久化逻辑的实现。

1.5 MyBatis的优势

  • Mybatis能够方便地将数据存入数据库中 ,以及从数据库中读取出数据。

  • Mybatis可以减少重复代码,提高开发效率。传统的jdbc操作,有很多重复代码块 (比如 :数据库的建立连接等)。

  • MyBatis 是一个半自动化的ORM框架 -->对象关系映射框架

二、MyBatis实践

2.1 操作流程:

  • 搭建数据库,创建相关实验表。

  • 导入MyBatis相关jar包。

    1. Maven仓库中下载

    2. Github中下载

    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.2</version>
    </dependency>
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.47</version>
    </dependency>
  • 编写MyBatis核心配置文件。

<?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>
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?
use SSL=true&amp;use Unicode=true&amp;character Encoding=utf8"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <mapper resource="com/mybatis/dao/Mapper.xml"/>
   </mappers>
</configuration>
  • 编写MyBatis工具类。

public class MybatisUtils 
  private static SqlSessionFactory sqlSessionFactory;
  static
      try
          String resource = "mybatis-config.xml";
          InputStream inputStream = Resources.getResourceAsStream(resource);
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      catch (IOException e)
          e.printStackTrace();
     
 
  //获取Sql Session连接
  public static SqlSession getSession()
      return sqlSessionFactory.openSession();
 
  • 创建数据库实体类。

public class User 

  private int id; //id
  private String name;   //姓名
  private String pwd;   //密码

//构造,有参,无参
  //set/get()
  //toString()
  public User()
 
...
  • 编写Mapper接口类。

public interface Mapper 
  List<User> selectUser();
  • 编写Mapper.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">
<mapper namespace="com.mybatis.dao.Mapper">
   <select id="selectUser" resultType="com.mybatis.pojo.User" >
  select * from user
 </select>
</mapper>
  • 编写测试类,Junit包测试。

public class MapperTest 
  @Test
  public void selectUser()
      SqlSession session = MybatisUtils.getSession();
      //方法一:
      //List<User> users = session.select List("com.mybatis.mapper.Mapper.select User");
      //方法二:
      Mapper mapper = session.getMapper(Mapper.class);
      List<User> users = mapper.selectUser();
      for (User user: users)
          System.out.println(user);
     
      session.close();
 

  • 运行测试结果

注意:Maven静态资源过滤问题

  • 项目结构图:

2.2 错误及解决

  1. IDEA连接数据库失败:

    • 原因:该问题的原因是MySQL驱动jar中的默认时区是UTC,UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。

    • 解决方法:在“高级”标签中手工设置“serverTimezon"属性值。

  2. IDEA运行失败,报如下错误:Type interface com.mybatis.dao.Mapper is not known to the MapperRegistry.

    • 解决方法:在mybatis-config.xml文件中添加如下代码:

        <mappers>
           <mapper resource="com/mybatis/dao/Mapper.xml"/>
       </mappers>
  3. IDEA运行失败,报如下错误:Could not find resource com/mybatis/dao/Mapper.xml

    • 解决方法:在父工程的pom文件中添加如下代码:

    <build>
       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
           <resource>
             <directory>src/main/resources</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
       </resources>
    </build>  

以上是关于MyBatis基础操作的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis源码阅读: MyBatis基础模块-反射模块

MyBatis从入门到精通—MyBatis基础知识和快速入门

Mybatis基础Dao代理实现CURD操作

mybatis 基础_mybatis介绍

Mybatis 基础篇-- 深入了解 XML 配置(概述)

Mybatis Plus超详解-p1(常用操作&基础配置)