本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

本文使用IDEA和maven项目搭建,数据库使用MySQL 8。

定义:MyBatis

  • MyBatis 是一款优秀的持久层框架

  • 它支持自定义 SQL、存储过程以及高级映射

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  • 以上内容摘自官网和百度百科

获得MyBatis

数据库准备

1. 导入基本依赖

使用Maven项目导入基本依赖

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.19</version>
       </dependency>
       <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.4</version>
       </dependency>
           
           <!--这个是用于分步发布程序-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>test</scope>
       </dependency>

2. 配置mybatis-configxml文件

  在resources文件夹下新建一个mybatis-config.xml文件,文件名字不限,出于习惯使用这个名字。

<?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.cj.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3308/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true&amp;serverTimezone=GMT%2B8"/>
               <property name="username" value="root"/>
               <property name="password" value="mysql"/>
           </dataSource>
       </environment>
   </environments>

   <!--     每一个Mapper.xml都需要Mybatis核心配置文件中注册    -->
   <mappers>
       <mapper resource="com/rzp/dao/UserMapper.xml"/>
   </mappers>
</configuration>

3.创建sqlSessionFactory工具类及其对象

  创建MybatisUtils类,出于开发习惯按以下结构配置。

//创建sqlSessionFactory工具类
public class MybatisUtils {
   private static SqlSessionFactory sqlSessionFactory;
   static{
       InputStream inputStream = null;
       try {

           //使用Mybatis,就是利用该工具类获取sqlSessionFacitory对象
           String resource = "mybatis-config.xml";
           inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   
   //创建对象
   public static SqlSession getSqlSession(){
       return sqlSessionFactory.openSession();
  }
}

4.编写代码

示例

  • 注意事项:要把IDEA的编译方式改成UTF-8,否则编译出来的xml文件中文是乱码,导致程序执行会报错:1字节的UTF-8序列的字节1无效

  • 总览

  • 实体类User

package com.rzp.pojo;

public class User {
   private int id;
   private String name;
   private String pwd;

   public int getId() {
       return id;
  }

   public void setId(int id) {
       this.id = id;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getPwd() {
       return pwd;
  }

   public void setPwd(String pwd) {
       this.pwd = pwd;
  }

   public User() {
  }

   public User(int id, String name, String pwd) {
       this.id = id;
       this.name = name;
       this.pwd = pwd;
  }
}
  • Mapper接口(UserMapper)

public interface UserMapper {
   List<User> getUserList();
}
  • Mapper对应xml文件(UserMapper.xml)文件

    •   注意这个文件名字和路径必须和我们第一个xml配置文件:mybatis-config.xml中最后一项配置的Mapper路径一样。
<?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=绑定一个对应的Dao/Mapper接口-->
<!--namespace名字要与Mapper接口对应-->
<mapper namespace="com.rzp.dao.UserMapper">
   <!--
   id就是Mapper接口中方法的名字
    resultType就是返回的类型,严格来说现在返回的是list,这种情况下是返回的泛式
   -->
   <select id="getUserList" resultType="com.rzp.pojo.User">
   select * from mybatis.user
   </select>


</mapper>
  • 测试方法

    •   其实不必要用try catch来包围,但是官方推荐使用,主要是为了finally关闭资源
    @Test
   public void test(){
       //获得sqlSession对象

       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try{
           //执行SQL
           //方式一:getMapper
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
           List<User> userList = userMapper.getUserList();

           for (User user : userList) {
               System.out.println(user);
          }
      }catch (Exception e){
           e.printStackTrace();
      }finally {
           //关闭sqlSession
           sqlSession.close();

      }

测试结果

拓展1

  • java 7开始支持try-with-resource方法,写法是:

try(在这里放入要new的对象){
   
}catch(){
   
}
try catch执行完以后会自动关闭对象的资源,用于IO或者sqlSession都可以,其实就相当于省略了finally的关闭资源
  • 就可以改成这样


       try(SqlSession sqlSession = MybatisUtils.getSqlSession()){
           //执行SQL
           //方式一:getMapper
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
           List<User> userList = userMapper.getUserList();

           for (User user : userList) {
               System.out.println(user);
          }
      }catch (Exception e){
           e.printStackTrace();
      }

  • 但是如果是maven项目,pom文件要制定jdk版本,否则会发生编译错误:Try-with-resources are not supported at language level '5’

    <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>8</source>
                   <target>8</target>
               </configuration>
           </plugin>
       </plugins>
   </build>

拓展2

除了使用getMapper方法外,还可以使用以下方式调用:

//获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
   //方式二:
   List<User> usersList = sqlSession.selectList("com.rzp.dao.UserMapper.getUserList");
   for (User user : usersList) {
       System.out.println(user);
  }
}catch (Exception e){
   e.printStackTrace();
}finally {
   //关闭sqlSession
   sqlSession.close();

}
  • 这是旧版本的方法。

  • 显然,这个方法在编写的时候必须选择合适的方法,而且调用的UserMapper的方法时也没有那么方便。这个方法官方不推荐使用。

这是我的GitHub地址

https://github.com/renzhongpei?tab=repositories

MyBatis(一):第一个MyBatis程序的更多相关文章

  1. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...

  2. Mybatis-01-什么是Mybatis以及第一个Mybatis

    Mybatis-9.28 环境: jdk 1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JDBC Mysql Java基础 Maven Junit SSM框架:配置文件,最好的 ...

  3. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“internet”和“aba ...

  4. 我的第一个Mybatis程序

    第一个Mybatis程序 在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“i ...

  5. 第一个MyBatis程序(博客初写者)

    第一个Mybatis程序 一.环境: 1.JDK1.8 2.MYSQL5.7 3.IDEA 4.MAVEN 3.63 二.Mybatis认识: 1.查看官方文档 https://mybatis.org ...

  6. MyBatis-02-第一个Mybatis程序

    2.第一个Mybatis程序 思路:搭建环境-->导入Mybatis-->编写代码-->测试! 2.1.搭建环境 搭建数据库 CREATE DATABASE `mybatis`; u ...

  7. Mybatis【1】-- 第一个Mybatis程序

    1.框架是什么 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面 ...

  8. 由浅入深--第一个MyBatis程序

    话不多说,马上开始我们的第一个Mybatis程序: 第一个程序,当然要参考MyBatis的官网文档来搞,地址如下:https://mybatis.org/mybatis-3/zh/getting-st ...

  9. 使用idea创建第一个Mybatis程序及可能遇到的问题

    第一个Mybatis程序 思路:搭建环境->导入Mybatis->编写代码->执行 搭建环境 创建数据库 CREATE DATABASE `mybatis` USE `mybatis ...

随机推荐

  1. zabbix图表出现中文乱码

    搭建完成Zabbix监控服务器之后,切换到中文语言,图表展示出现乱码,如图所示 按照网上流传的上传windows下的字体的方法,还是不行,最后发现是PHP编译时的问题: php在编译时开启了-enab ...

  2. [日志分析]Graylog2采集mysql慢日志

    之前聊了一下graylog如何采集nginx日志,为此我介绍了两种采集方法(主动和被动),让大家对graylog日志采集有了一个大致的了解. 从日志收集这个角度,graylog提供了多样性和灵活性,大 ...

  3. 分享几个 PHP 编码的最佳实践

    对于初学者而言,可能很难理解为什么某些做法更安全. 但是,以下一些技巧可能超出了 PHP 的范围. 始终使用大括号 让我们看下面的代码: if (isset($condition) && ...

  4. JDBC 查询 模板

    JDBC 查询 与增删改不同的是SQL语句的不同,还有查询反回的是结果集  需要定义 利用 next()方法逐层查询数据 使用getXXX方法获取数据 代码相关参数根据个人设置进行修改!!!! pac ...

  5. 【Weiss】【第03章】队列例程

    前几个例程还是相当简单的,把链表即时改了一下就是队列了. 还有想了一下,决定这种例程的代码放法是:先把测试代码默认折叠放在前面,然后把实现代码默认展开放在后面. 测试代码如下: #include &l ...

  6. 聊一聊 React 中的 CSS 样式方案

    和 Angular,Vue 不同,React 并没有如何在 React 中书写样式的官方方案,依靠的是社区众多的方案.社区中提供的方案有很多,例如 CSS Modules,styled-compone ...

  7. Vulnhub 靶场 Os-hackNos WP

    About Os-hackNos 描述 Difficulty : Easy to Intermediate Flag : 2 Flag first user And second root Learn ...

  8. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  9. 【转】不怕难之BlockingQueue及其实现

    1. 前言 BlockingQueue即阻塞队列,它是基于ReentrantLock,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所 ...

  10. 前端CSS学习笔记

    一 CSS介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(超文本标记语言)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以 ...