Mybatis介绍及环境搭建

Mybatis介绍及环境搭建

1 三层架构和ssm框架的对应关系
1.1 什么是框架
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
使用框架的好处:
框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
1.2 框架要解决的问题
框架要解决的最重要的一个问题是技术整合的问题,在 J2EE 的 框架中,有着各种各样的技术,不同的软件企业需要从 J2EE 中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技术的风险性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。
框架一般处在低层应用平台(如 J2EE)和高层业务逻辑之间的中间层。
1.3 软件开发的分层重要性
框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的MVC 软件设计思想就是很好的分层思想。 如图所示:在这里插入图片描述
通过分层更好的实现了各个部分的职责,在每一层将再细化出不同的框架,分别解决各层关注的问题。
1.4 三层架构
表现层:
是用于展示数据的。
业务层:
是处理业务需求。
持久层:
是和数据库交互的。
如图所示:在这里插入图片描述
1.5 持久层技术解决方案
JDBC技术:
Connection
PreparedStatement
ResultSet
Spring的JdbcTemplate:
Spring中对jdbc的简单封装。
Apache的DBUtils:
它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装。
以上这些都不是框架。
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils都只是工具类。
1.6 MyBatis 框架概述
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与 jdbc api打交道,就可以完成对数据库的持久化操作。
为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义 Mybatis 框架开始来学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础。
mybatis是一个持久层框架,用java编写的。
它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程。
它使用了ORM思想实现了结果集的封装。
ORM:
Object Relational Mappging 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表。
user User
id userId
user_name userName
今天我们需要做到实体类中的属性和数据库表的字段名称保持一致。
user User
id id
user_name user_name
1.7 mybatis环境搭建-前期准备
首先创建数据库和表结构的代码如下:

CREATE DATABASE mybatis;  -- 创建数据库
use mybatis;         -- 使用数据库
CREATE TABLE `user` (  -- 创建user表
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入数据
insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'学无止路','2018-03-04 12:04:06','男','贵州省六盘水市'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
-- 查询数据
SELECT * FROM user;

1.打开IDEA工具如图所示,并点击Create New Project。在这里插入图片描述
2.选择Maven工程和JDK的版本,点击Next,如图所示:在这里插入图片描述
3.填写项目名称和保存的地址,并点击Finish。如图所示:在这里插入图片描述
4.导入相应的依赖jar包的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.txw</groupId>
    <artifactId>day01_01mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包的方式-->
    <packaging>jar</packaging>
    <dependencies>
        <!--mybatis的依赖jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>
</project>

5.编写用户的实体类代码如下:

package com.txw.domain;

import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
/**
 * 用户的实体类
 * @author:Adair
 * @QQ:1578533828
 */
@Data    //  自动生成set和get方法
@ToString  // 重写toString方法
@SuppressWarnings("all")       //  注解警告信息
public class User implements Serializable {
    private Integer id;      // 用户的id
    private String username;    // 用户名
    private Date birthday;      // 用户的生日
    private String sex;         //  用户的性别
    private String address;     // 用户的地址
}

6.编写实体类的持久层接口的代码如下:

package com.txw.dao;

import com.txw.domain.User;
import java.util.List;
/**
 * 实体类的持久层接口
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public interface UserDao {
    /**
     * 查询所有操作
     * @return
     */
    List<User> findAll();
}

7.在resources目录下创建SqlMapConfig.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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="com/txw/dao/UserDao.xml"/>
    </mappers>
</configuration>

8.在resources目录下创建com.txw.dao.UserDao.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.txw.dao.UserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.txw.domain.User">
        select * from user
    </select>
</mapper>

9.编写测试代码如下:

package com.txw.test;

import com.txw.dao.UserDao;
import com.txw.domain.User;
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.InputStream;
import java.util.List;
/**
 * 测试
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args)throws Exception {
        // 1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        // 4.使用SqlSession创建Dao接口的代理对象
        UserDao userDao = session.getMapper(UserDao.class);
        // 5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        // 6.释放资源
        session.close();
        in.close();
    }
}

运行结果如图所示:在这里插入图片描述
注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中。
配置的方式:指定实体类的全限定类名。
mybatis的环境搭建
第一步:创建maven工程并导入坐标。
第二步:创建实体类和dao的接口。
第三步:创建Mybatis的主配置文件。
SqlMapConifg.xml。
第四步:创建映射配置文件
UserDao.xml。
环境搭建的注意事项:
第一个:创建UserDao.xml 和 UserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper。
所以:UserDao 和 IUserMapper是一样的。
第二个:在idea中创建目录的时候,它和包是不一样的。
包在创建时:com.txw.dao它是三级结构。
目录在创建时:com.txw.dao是一级目录。
第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同。
第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名。
第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名。
当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
入门分析如图所示:在这里插入图片描述
1.8 mybatis注解开发和编写dao实现类的方式
1.8.1 mybatis注解开发
1.点击File,选择New,并点击Project。如图所示:在这里插入图片描述
2.选择Maven工程和JDK的版本,点击Next,如图所示:在这里插入图片描述
3.填写项目名称和保存的地址,并点击Finish。如图所示:在这里插入图片描述
4.导入相应的依赖jar包的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.txw</groupId>
    <artifactId>day01_02mybatis_annotation</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包的方式-->
    <packaging>jar</packaging>
    <dependencies>
        <!--mybatis的依赖jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>
</project>

5.编写实体类的代码如下:

package com.txw.domain;

import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
/**
 * 用户的实体类
 * @author:Adair
 * @QQ:1578533828
 */
@Data    //  自动生成set和get方法
@ToString  // 重写toString方法
@SuppressWarnings("all")       //  注解警告信息
public class User implements Serializable {
    private Integer id;      // 用户的id
    private String username;    // 用户名
    private Date birthday;      // 用户的生日
    private String sex;         //  用户的性别
    private String address;     // 用户的地址
}

6.编写实体类持久层的代码如下:

package com.txw.dao;

import com.txw.domain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;
/**
 * 实体类的持久层接口
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public interface UserDao {
    /**
     * 查询所有操作
     * @return
     */
    @Select("select * from user")
    List<User> findAll();
}

7.在resources目录下创建SqlMapConfig.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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
        如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名
    -->
    <mappers>
        <mapper class="com.txw.dao.UserDao"/>
    </mappers>
</configuration>

8.编写测试的代码如下:

package com.txw.test;

import com.txw.dao.UserDao;
import com.txw.domain.User;
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.InputStream;
import java.util.List;
/**
 * 测试
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args)throws Exception {
        // 1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        // 4.使用SqlSession创建Dao接口的代理对象
        UserDao userDao = session.getMapper(UserDao.class);
        // 5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        // 6.释放资源
        session.close();
        in.close();
    }
}

运行结果如图所示:在这里插入图片描述
mybatis基于注解的入门案例:
把UserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
明确:
我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
不管使用XML还是注解配置。
但是Mybatis它是支持写dao实现类的。
1.8.2 编写dao实现类的方式
1.点击File,选择New,并点击Project。如图所示:在这里插入图片描述
2.选择Maven工程和JDK的版本,点击Next,如图所示:在这里插入图片描述
3.填写项目名称和保存的地址,并点击Finish。如图所示:在这里插入图片描述
4.导入相应的依赖jar包的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.txw</groupId>
    <artifactId>day01__03mybatis_dao</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包的方式-->
    <packaging>jar</packaging>
    <dependencies>
        <!--mybatis的依赖jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>
</project>

5.编写实体类的代码如下:

package com.txw.domain;

import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
/**
 * 用户的实体类
 * @author:Adair
 * @QQ:1578533828
 */
@Data    //  自动生成set和get方法
@ToString  // 重写toString方法
@SuppressWarnings("all")       //  注解警告信息
public class User implements Serializable {
    private Integer id;      // 用户的id
    private String username;    // 用户名
    private Date birthday;      // 用户的生日
    private String sex;         //  用户的性别
    private String address;     // 用户的地址
}

6.编写实体类持久层的接口代码如下:

package com.txw.dao;

import com.txw.domain.User;
import java.util.List;
/**
 * 实体类的持久层接口
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public interface UserDao {
    /**
     * 查询所有操作
     * @return
     */
    List<User> findAll();
}

7.编写实体类持久层的实现类代码如下:

package com.txw.dao.impl;

import com.txw.dao.UserDao;
import com.txw.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
/**
 * 实体类的持久层实现类
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public class UserDaoImpl implements UserDao {
    // 声明SqlSessionFactory∵东西
    private SqlSessionFactory factory;
    // 构造方法
    public UserDaoImpl(SqlSessionFactory  factory){
        this.factory = factory;
    }
    /**
     * 查询所有操作
     * @return
     */
    public List<User> findAll() {
        // 1.使用工厂创建SqlSession对象
        SqlSession session = factory.openSession();
        // 2.使用session执行查询所有方法
        List<User> users = session.selectList("com.txw.dao.UserDao.findAll");
        session.close();
        // 3.返回查询结果
        return users;
    }
}

8.在resources目录下创建SqlMapConfig.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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="com/txw/dao/UserDao.xml"/>
    </mappers>
</configuration>

9.在resources目录下创建com.txw.dao.UserDao.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.txw.dao.UserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.txw.domain.User">
        select * from user
    </select>
</mapper>

10.编写测试代码如下:

package com.txw.test;

import com.txw.dao.UserDao;
import com.txw.dao.impl.UserDaoImpl;
import com.txw.domain.User;
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.InputStream;
import java.util.List;
/**
 * 测试
 * @author:Adair
 * @QQ:1578533828
 */
@SuppressWarnings("all")       //  注解警告信息
public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args)throws Exception {
        // 1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3.使用工厂创建dao对象
        UserDao userDao = new UserDaoImpl(factory);
        // 4.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        // 5.释放资源
        in.close();
    }
}

运行结果如图所示:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学无止路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值