Mybatis select查询

传递参数

Mybatis 入门示例,我们直接传递简单参数,可以在xml中直接使用。多个参数也可以同样传递。如果要传递复杂参数,我们需要适应select标签的parameterType属性。

传递JavaBean对象参数

	<select id="selectEmp" parameterType="com.yyoo.mybatis.beans.Emp" resultType="com.yyoo.mybatis.beans.Emp">
           select * from emp where empno = #{empno}
  	</select>

parameterType指定参数对象,这里就是Emp对象。

传递map对象参数

    <select id="selectEmpByMap" parameterType="map" resultType="com.yyoo.mybatis.beans.Emp">
        select * from emp where empno = #{empno}
    </select>

这里的parameterType我们只用了map来表示,其实其就是java.util.Map。那么我们上面的Emp对象可以这样表示吗?答案当然可以,但是需要我们在mybatis-config.xml中做些配置。

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>
    <!-- 读取配置文件 -->
    <properties resource="DBPool.properties"></properties>

    <!-- 
    注意定义的位置,可以有多个package标签,多个包下有相同名称的bean可以使用@Alias注解定义名称 
    -->
    <typeAliases>
        <package name="com.yyoo.mybatis.beans"/>
    </typeAliases>

    <!-- 定义执行环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property name="driver" value="${my.mybatis.driver}"/>
            <property name="url" value="${my.mybatis.url}"/>
            <property name="username" value="${my.mybatis.user}"/>
            <property name="password" value="${my.mybatis.password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 加载mappers,也就是映射文件 -->
    <mappers>
        <mapper resource="mapper/EmpMapper.xml"/>
    </mappers>
</configuration>

注意我们添加的typeAliases标签,这里我们别名了一个包,就是Emp对应所在的包。这样我们就可以直接使用emp来作为com.yyoo.mybatis.beans.Emp的替代了。(注意:emp是对应JavaBean的首字母小写名称,这是Mybatis约定的,如果想要改变一个名称请使用@Alias注解在对应的JavaBean来修改,建议是不做修改)

// 将别名定义为myEmp
@Alias("myEmp")
public class Emp 

直接别名对应的JavaBean

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

定义好别名后,我们的xml中用到Emp对象的配置简化如下

<?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我们对应到了我们的EmpMapper接口 -->
<mapper namespace="com.yyoo.mybatis.mapper.EmpMapper">

    <!-- 注意id对应EmpMapper的方法 -->
    <select id="selectEmpByNo" resultType="emp">
        select * from emp where empno = #{empno}
    </select>

    <select id="selectEmp" parameterType="emp" resultType="emp">
        select * from emp where empno = #{empno}
    </select>

    <select id="selectEmpByMap" parameterType="map" resultType="emp">
        select * from emp where empno = #{empno}
    </select>

</mapper>

查询结果

select标签中结果映射主要使用如下两个属性resultType或resultMap

<select id="selectEmpByNo" resultType="emp">
    select * from emp where empno = #{empno}
</select>

查询结果会自动映射到Emp对象上

我们前面的Mapper接口的返回值都是Emp对象,但是查询来说,如果不是通过id(主键)查询,一般情况下我们的接口方法都应该是一个集合对象。所以我们的Mapper接口的定义应该如下:

    Emp selectEmpByNo(@Param("empno") Long id);

    List<Emp> selectEmp(Emp emp);

    List<Emp> selectEmpByMap(Map<String,Object> map);

目前我们的查询是把所有满足条件的数据全部查询出来,当结果数据量特别大的时候这也是个问题,需要进行分页查询,所以此处还不满足我们实际项目中的查询的要求,关于分页,我们将在后续讲解。

使用resultType映射规则

  1. MyBatis 会在幕后自动创建一个 ResultMap,再根据属性名来映射列到 JavaBean 的属性上。
  2. 数据库字段我们一般是下划线隔开的命名,如:user_name,那么自动映射到JavaBean上的字段名称一般为userName。(如果数据库字段名称和JavaBean字段名称不对应,我们可以在select查询语句中使用sql别名的方式将之对应起来)如下:
<select id="selectEmpByNo" resultType="emp">
    select name as userName from emp where empno = #{empno}
</select>

综上,我们一般情况下直接使用JavaBean进行自动映射即可,但实际项目中往往比较复杂,JavaBean自动映射,在处理复杂映射关系是还是不够灵活,所以我们还是需要自定义ResultMap来实现。关于ResultMap,我们在下一篇讲解。

上一篇:Mybatis XML映射文件
下一篇:Mybatis resultMap复杂查询结果映射

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值