当前位置: 首页 > 图灵资讯 > 技术篇> MyBatis入门

MyBatis入门

来源:图灵教育
时间:2023-04-24 10:17:49

第一个程序环境描述

  • jdk 8 +
  • MySQL 8
  • maven 3
  • IDEA 2021
学习前需要掌握:
  • JDBC
  • MySQL
  • Java 基础
  • Maven
  • Junit
什么是MyBatistis?
  • MyBatis 这是一个优秀的持久框架
  • MyBatis 几乎所有的东西都被避免了 JDBC 代码和手动设置参数以及获取结果集的过程
  • MyBatis 可使用简单的 XML 或注释配置和映射原始信息 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象]映射成数据库中的记录。
  • MyBatis ibatis是apache的开源项目, apachee2010年这个项目 迁移到google code,改名为MyBatiss 。
  • 2013年11月迁移到Githubbub .
  • Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
  • GitHub : https://github.com/mybatis/mybatis-3
持久化

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

  • 也就是说,将数据(如内存中的对象)存储在可永久存储的存储设备中(如磁盘)。持久性的主要应用程序是将内存中的对象存储在数据库中,或存储在磁盘文件中,XML数据文件中等。
  • JDBC是一种持久机制。文件IO也是一种持久机制。
  • 在生活中 : 冷藏鲜肉,吃的时候解冻。罐装水果的方法也是如此。

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

  • 也就是说,将数据(如内存中的对象)存储在可永久存储的存储设备中(如磁盘)。持久性的主要应用程序是将内存中的对象存储在数据库中,或存储在磁盘文件中,XML数据文件中等。
  • JDBC是一种持久机制。文件IO也是一种持久机制。
  • 在生活中 : 冷藏鲜肉,吃的时候解冻。罐装水果的方法也是如此。
持久层

什么是持久层?

  • 完成持久工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象]
  • 在大多数情况下,特别是企业应用程序中,数据持久性往往意味着将内存中的数据保存到磁盘上进行固化,而持久性的实现过程主要是通过各种关系数据库完成的。
  • 然而,这里有一个词需要特别强调,即所谓的“层”。对于应用系统来说,数据持久功能大多是必不可少的组成部分。也就是说,在我们的系统中,“持久层”的概念自然存在?也许是,但也许实际情况并非如此。“持久层”的概念是独立的,而不是“持久模块”和“持久单元”,这意味着我们的系统架构应该有一个相对独立的逻辑层面,专注于实现数据持久逻辑.
  • 与系统的其他部分相比,这个层面应该有一个相对清晰和严格的逻辑边界。【说白了就是用来操作数据库存的!】
为什么Mybatiss需要Mybatiss?
  • Mybatis是帮助程序猿将数据存储在数据库中 , 并从数据库中提取数据 .
  • 传统的jdbc操作 , 重复代码块很多 .比如 : 数据取出时的包装 , 建立连接数据库等... , 通过框架可以减少重复代码,提高开发效率 .
  • MyBatis ORM框架为半自动化 (Object Relationship Mapping) -->对象关系映射
  • 一切都可以在没有Mybatis的情况下完成,但是如果你使用它,所有的实现都会更简单!技术没有高低之分,只有使用这种技术的人有高低之分
  • MyBatis的优势
  • 简单易学:很小很简单。没有第三方依赖,最简单的安装只需要两个jar文件+几个sql映射文件,易于学习和使用。通过文档和源代码,可以充分掌握其设计思路和实现。
  • 灵活性:mybatis不会对应用程序或数据库的现有设计产生任何影响。sql写在xml中,便于统一管理和优化。操作数据库的所有需求都可以通过sql语句来满足。
  • 解除SQL与程序代码的耦合:通过提供DAO层,将业务逻辑与数据访问逻辑分离,使系统设计更加清晰、维护和单元测试。SQL与代码的分离提高了可维护性。
  • 提供xml标签,支持动态sql的编写。
  • ...
  • 最重要的是,有很多人使用它!公司需要它!
MyBatis第一个程序

思维过程:营造环境-->导入Mybatis--->编写代码--->测试

代码演示

1、构建实验数据库
CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(20) NOT NULL,`name` varchar(30) DEFAULT NULL,`pwd` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert  into `user`(`id`,`name`,`pwd`) values (1,狂神,123456),(二,张三',abcdef(3,李四,987654);
2、导入MyBatis相关的MyBatis jar 包
  • 在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>
3、编制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?useSSL=true&useUnicode=true&characterEncoding=utf8"/>               <property name="username" value="root"/>               <property name="password" value="123456"/>           </dataSource>       </environment>   </environments>   <mappers>       <mapper resource="com/kuang/dao/userMapper.xml"/>   </mappers></configuration>
4、编写MyBatis工具类
  • 查看帮助文档
import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;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();      }  }   //获得SqlSession连接   public static SqlSession getSession(){       return sqlSessionFactory.openSession();  }}
5、创建实体类
public class User {      private int id;  //id   private String name;   //姓名   private String pwd;   //密码      //结构,有参,无参   //set/get   //toString()   }
6、编写Mapper接口类
import com.kuang.pojo.User;import java.util.List;public interface UserMapper {   List<User> selectUser();}
7、编写Mapper.xml配置文件
  • namespace 很重要,不能写错!
<?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.kuang.dao.UserMapper"> <select id="selectUser" resultType="com.kuang.pojo.User">  select * from user </select></mapper>
8、编写测试类
  • Junit 包测试
public class MyTest {   @Test   public void selectUser() {       SqlSession session = MybatisUtils.getSession();       //方法1:       //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser");       方法二://方法二:       UserMapper mapper = session.getMapper(UserMapper.class);       List<User> users = mapper.selectUser();       for (User user: users){           System.out.println(user);      }       session.close();  }}
9、运行测试,成功查询我们的数据,ok!

问题说明

问题说明:Maven静态资源过滤问题

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