getResourceAsStream用法小结

本文详细介绍了Java中getResourceAsStream方法的三种使用方式及其路径解析规则,并通过实例演示如何正确加载不同位置的资源文件。

Java中getResourceAsStream用法小结

一、 Java中的getResourceAsStream主要有以下三种用法:

1.Class.getResourceAsStream(String path)

path 不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath根下获取。
其实是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

2.其实是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

默认则是从ClassPath根下获取,path不能以’/’开头,最终是由ClassLoader获取资源。

3、ServletContext.getResourceAsStream(String path)

默认从WebAPP根目录下取资源,Tomcat下path是否以’/’开头无所谓,当然这和具体的容器实现有关。
Jsp下的application内置对象就是上面的ServletContext的一种实现。

二、用法示例

1.要加载的文件和.class文件在同一目录下

例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml, 代码如下:

me.class.getResourceAsStream("myfile.xml"); 

2.在.class文件同级目录的子目录下

例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml, 代码如下:

me.class.getResourceAsStream("file/myfile.xml");

3.不在me.class目录下,也不在子目录下

例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml, 代码如下:

 me.class.getResourceAsStream("/com/x/file/myfile.xml"); 

三、总结

总结一下,可能只是两种写法:
1、前面有 “ / ”,“ / ”代表了工程的根目录
2、前面没有 “/”,代表当前类的目录

在 MyBatis 中,可以通过 **XML 映射文件** 或 **注解** 两种方式快速实现 **CRUD(增删改查)** 操作。MyBatis 提供了对数据库操作的良好封装,使得开发者可以专注于 SQL 语句的编写,而无需手动管理连接、事务等底层资源。 下面我将通过一个完整的示例来演示如何使用 MyBatis 快速实现 CRUD。 --- ## ✅ 示例:使用 MyBatis 实现 CRUD(XML 配置方式) ### 1. 环境准备 - JDK 1.8+ - MySQL 数据库 - Maven 项目 - MyBatis 核心依赖 --- ### 2. 添加 Maven 依赖 ```xml <dependencies> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies> ``` --- ### 3. 数据库表结构 ```sql CREATE DATABASE demo; USE demo; CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT ); ``` --- ### 4. Java 实体类:`User.java` ```java public class User { private int id; private String name; private int age; // 构造方法、getter/setter public User() {} public User(String name, int age) { this.name = name; this.age = age; } // getter/setter 省略 @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } } ``` --- ### 5. MyBatis 全局配置文件:`mybatis-config.xml` ```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:3306/demo?useSSL=false&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration> ``` --- ### 6. Mapper XML 文件:`UserMapper.xml` ```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="UserMapper"> <!-- 插入 --> <insert id="insertUser"> INSERT INTO user (name, age) VALUES (#{name}, #{age}) </insert> <!-- 查询 --> <select id="selectUserById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> <!-- 查询全部 --> <select id="selectAllUsers" resultType="User"> SELECT * FROM user </select> <!-- 更新 --> <update id="updateUser"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <!-- 删除 --> <delete id="deleteUserById"> DELETE FROM user WHERE id = #{id} </delete> </mapper> ``` --- ### 7. 工具类:`MyBatisUtil.java` ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class MyBatisUtil { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(true); // 自动提交 } } ``` --- ### 8. CRUD 操作接口调用示例:`TestMyBatisCRUD.java` ```java import org.apache.ibatis.session.SqlSession; import java.util.List; public class TestMyBatisCRUD { public static void main(String[] args) { SqlSession session = MyBatisUtil.getSqlSession(); // 插入 User user = new User("张三", 25); session.insert("UserMapper.insertUser", user); System.out.println("插入成功"); // 查询单个 User u = session.selectOne("UserMapper.selectUserById", 1); System.out.println("查询结果:" + u); // 查询全部 List<User> users = session.selectList("UserMapper.selectAllUsers"); for (User user1 : users) { System.out.println(user1); } // 更新 User updateUser = new User(); updateUser.setId(1); updateUser.setName("李四"); updateUser.setAge(30); session.update("UserMapper.updateUser", updateUser); System.out.println("更新成功"); // 删除 session.delete("UserMapper.deleteUserById", 1); System.out.println("删除成功"); session.close(); } } ``` --- ## ✅ 使用注解方式实现 CRUD(补充) 除了 XML 配置,MyBatis 也支持使用注解方式定义 SQL: ```java import org.apache.ibatis.annotations.*; import java.util.List; public interface UserMapper { @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})") void insertUser(User user); @Select("SELECT * FROM user WHERE id = #{id}") User selectUserById(int id); @Select("SELECT * FROM user") List<User> selectAllUsers(); @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}") void updateUser(User user); @Delete("DELETE FROM user WHERE id = #{id}") void deleteUserById(int id); } ``` 使用方式: ```java SqlSession session = MyBatisUtil.getSqlSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User("王五", 28); mapper.insertUser(user); ``` --- ## ✅ 小结 | 方法 | 优点 | 缺点 | |------|------|------| | XML 映射 | 灵活,适合复杂 SQL | 配置文件多,维护略复杂 | | 注解方式 | 简洁,适合简单 SQL | 不适合复杂查询和动态 SQL | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值