mybatis返回某一字段_Mybatis

原始JDBC存在的问题

  • 数据库连接,释放频繁造成系统资源浪费,影响系统性能。
  • sql语句在代码中硬编码,不易维护
  • 查询结果封装到实体需要手动封装

解决办法

  • 使用数据库连接池初始化连接资源
  • 将sql语句抽取到xml配置文件中
  • 使用反射,内省等底层技术,自动将实体与表的字段进行映射

Mybatis

  • Mybatis是一个基于java的持久层框架,内部封装了jdbc,使开发者只需要关注sql语句本身。通过xml或者注解的方式将要执行的statement配置起来。会将结果映射为java对象并返回。

Mybatis开发步骤

  • 添加mybatis的坐标
  • 创建数据库表
  • 编写数据库表对应的java实体类
  • 编写映射文件UserMapper.xml(sql语句)
  • 编写核心配置文件SqlMapConfig.xml(Mybatis默认事务是不提交的)

00904c0fb4d6dbe365a14a32064d9b5a.png

9cb22303bdc6fec5ad8009d4714a9e05.png

MyBatis的xml加载外部properties配置文件

<properties resource="文件名.properties"/>

Spring的xml加载外部properties配置文件

<context:property-placeholder location="classpath:jdbc.properties"/>

709a6a988f9b617bb075ca2eefc21d57.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis支持通过结果集映射来解决复杂SQL查询结果的映射问题。如果查询结果集是多表联合查询的情况,需要进行结果集映射,可以使用MyBatis提供的嵌套查询或者嵌套结果映射。 下面以两个表的联合查询为例,介绍MyBatis如何进行结果集映射: 首先,我们假设有两个表:user和order。 user表的结构如下: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` order表的结构如下: ``` CREATE TABLE `order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `order_no` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 其中,order表的user_id字段与user表的id字段相关联。 接下来,我们需要进行两个表的联合查询,并将查询结果映射到一个Java对象中。Java对象的结构如下: ``` public class UserOrder { private int id; private String name; private int age; private List<Order> orders; // getter、setter方法 } ``` UserOrder对象包含了user表和order表的字段信息,并且使用List类型的orders属性来保存order表的相关信息。 在MyBatis的Mapper文件中,我们可以使用嵌套查询来实现两个表的联合查询,并将查询结果映射到UserOrder对象中,具体实现如下: ``` <select id="getUserOrder" resultMap="userOrderMap"> SELECT u.id, u.name, u.age, o.id as order_id, o.order_no FROM user u LEFT JOIN order o ON u.id = o.user_id WHERE u.id = #{id} </select> <resultMap id="userOrderMap" type="UserOrder"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <collection property="orders" ofType="Order"> <id column="order_id" property="id"/> <result column="order_no" property="orderNo"/> </collection> </resultMap> ``` 在getUserOrder查询语句中,我们使用了LEFT JOIN关键字来进行两个表的联合查询,并使用了WHERE子句来指定查询条件。在resultMap中,我们使用了collection标签来映射orders属性,并使用了ofType属性来指定orders集合元素的类型为Order对象。 需要注意的是,在resultMap中使用collection标签来映射orders属性时,需要使用id标签来映射order表的主键,使用result标签来映射order表的其他字段信息。 最后,我们通过调用session.selectOne方法来执行getUserOrder查询语句,并将查询结果映射到UserOrder对象中: ``` UserOrder userOrder = session.selectOne("getUserOrder", 1); ``` 以上就是在MyBatis中进行复杂结果集映射的方法。通过使用嵌套查询或嵌套结果映射,可以轻松地实现多表联合查询,并将查询结果映射到Java对象中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值