mybatis select返回多条记录即返回类型为list时,resultType的写法

本文介绍在MyBatis中如何正确配置查询多个实体对象的返回类型,避免使用List作为resultType,而应该指定具体的实体类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询出的结果可能有好多条记录,返回类型即是list。但resultType还是写成resultType="user"(user为集合list中的实体类),而不是写成resultType="java.util.List"

### MyBatis 基本写法和使用指南 MyBatis 是一个基于 Java 的持久层框架,它简化了数据库操作,同保留了对 SQL 的完全控制。相比于传统的 JDBC 编程,MyBatis 封装了底层的数据库访问细节,同允许开发者编写原生 SQL,提高了开发效率和代码可维护性。 #### 1. 环境配置 MyBatis 的核心是 `SqlSessionFactory`,它负责创建 `SqlSession`,后者用于执行 SQL 语句。配置文件 `mybatis-config.xml` 通常用于配置数据库连接信息、事务管理器以及映射文件的位置。 ```xml <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/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/MyMapper.xml"/> </mappers> </configuration> ``` 通过该配置文件,可以创建 `SqlSessionFactory` 实例: ```java String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); ``` #### 2. 映射器接口与 XML 配置 MyBatis 使用接口与 XML 映射文件配合来执行数据库操作。接口定义了方法,而 XML 文件则定义了 SQL 语句。 **Mapper 接口示例:** ```java public interface UserMapper { User selectUser(int id); } ``` **对应的 XML 映射文件:** ```xml <mapper namespace="com.example.mapper.UserMapper"> <select id="selectUser" resultType="com.example.model.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` #### 3. 动态 SQL MyBatis 提供了强大的动态 SQL 功能,可以根据条件构建 SQL 语句。例如 `<if>`、`<choose>`、`<when>`、`<otherwise>` 等标签可用于条件判断。 ```xml <select id="selectUsers" resultType="User"> SELECT * FROM user <where> <if test="name != null"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> </select> ``` 此外,`<foreach>` 标签可用于处理集合数据,例如批量插入: ```xml <insert id="insertBatch"> INSERT INTO user (name, age) VALUES <foreach collection="list" item="user" separator=","> (#{user.name}, #{user.age}) </foreach> </insert> ``` #### 4. 自增主键处理 在插入记录后获取自增主键,可以使用 `<selectKey>` 标签。例如,在插入后获取 MySQL 的自增 ID: ```xml <insert id="insert"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO comment (USER_ID, CONTENT, TIMETAG) VALUES (#{userId}, #{content}, #{timetag}) </insert> ``` 插入操作后,实体类的 `id` 属性将被自动填充。 #### 5. 批量操作 MyBatis 支持批量插入和更新操作。例如,使用 `<foreach>` 标签进行批量插入: ```xml <insert id="insertBatch"> INSERT INTO user (name, age) VALUES <foreach collection="list" item="item" separator=","> (#{item.name}, #{item.age}) </foreach> </insert> ``` 对于批量更新,可以结合 `<foreach>` 和 `<if>` 使用: ```xml <update id="updateBatch"> <foreach collection="list" item="item"> UPDATE user SET name = #{item.name}, age = #{item.age} WHERE id = #{item.id}; </foreach> </update> ``` #### 6. 缓存机制 MyBatis 支持一级缓存(本地缓存)和二级缓存(跨 SqlSession 的缓存)。二级缓存需要在映射文件中启用: ```xml <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/> ``` 启用后,相同 `SqlSessionFactory` 下的多个 `SqlSession` 可以共享缓存数据。 #### 7. 插件机制 MyBatis 提供了插件扩展机制,允许拦截执行过程,如拦截 `Executor`、`StatementHandler`、`ParameterHandler` 和 `ResultSetHandler`。插件可用于实现日志记录、性能监控、分页等功能。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

和光同其尘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值