在MyBatis中,select标签是最常用也是功能最强大的SQL语言,用于执行查询操作。 select示例语句如下。selectidselectAllWebsiteresultTypecom。kaikeba。po。WebsiteparameterTypestringSELECTid,NAME,urlFROMwebsiteWHERENAMELIKECONCAT(,{name},)select123复制代码类型:〔java〕 以上是一个id为selectAllWebsite的映射语句,参数类型为string,返回结果类型为Website。 执行SQL语句时可以定义参数,参数可以是一个简单的参数类型,例如int、float、String;也可以是一个复杂的参数类型,例如JavaBean、Map等。MyBatis提供了强大的映射规则,执行SQL后,MyBatis会将结果集自动映射到JavaBean中。 为了使数据库的查询结果和返回值类型中的属性能够自动匹配,通常会对MySQL数据库和JavaBean采用同一套命名规则,即Java命名驼峰规则,这样就不需要再做映射了(数据库表字段名和属性名不一致时需要手动映射)。 参数的传递使用{参数名},相当于告诉MyBatis生成PreparedStatement参数。对于JDBC,该参数会被标识为?。以上SQL语句可以使用JDBC实现,实现代码如下。StringsqlSELECTid,NAME,urlFROMwebsiteWHERENAMELIKECONCAT(,?,);PreparedStatementpsconn。prepareStatement(sql);ps。setString(1,userName);123复制代码类型:〔java〕select标签常用属性 下面介绍select标签中常用的属性。 属性名称 描述 备注 id 它和Mapper的命名空间组合起来使用,是唯一标识符,供MyBatis调用 如果命名空间id不唯一,那么MyBatis抛出异常 parameterType 表示传入SQL语句传入参数类型的全限定名或别名。它是一个可选属性,MyBatis能推断出具体传入语句的参数 支持基本数据类型和JavaBean、Map等复杂数据类型 resultType SQL语句执行后返回的类型(全限定名或者别名)。如果是集合类型,返回的是集合元素的类型,返回时可以使用resultType或resultMap之一 resultMap 它是映射集的引用,与元素一起使用,返回时可以使用resultType或resultMap之一 是MyBatis最复杂的元素,可以配置映射规则、级联、typeHandler等 flushCache 用于设置在调用SQL语句后是否要求MyBatis清空之前查询的本地缓存和二级缓存 默认值为false,如果设置为true,则任何时候只要SQL语句被调用都将清空本地缓存和二级缓存 useCache 启动二级缓存的开关,默认值为true,表示将査询结果存入二级缓存中 timeout 用于设置超时参数,单位是秒(s),超时将抛出异常 fetchSize 获取记录的总条数设定 默认值是数据库厂商提供的JDBC驱动所设置的条数 statementType 告诉MyBatis使用哪个JDBC的Statement工作,取值为STATEMENT(Statement)、PREPARED(PreparedStatement)、CALLABLE(CallableStatement) resultSetType 这是针对JDBC的ResultSet接口而言,其值可设置为FORWARDONLY(只允许向前访问)、SCROLLSENSITIVE(双向滚动,但不及时更新)、SCROLLJNSENSITIVE(双向滚动,及时更新) 传递多个参数 现在需要根据id和name来模糊查询网站信息,显然这涉及到了两个参数。给映射器传递多个参数分为以下三种方法。 1、使用Map传递参数 2、使用注解传递参数 3、使用JavaBean传递参数 下面分别讲解这3种方法的具体实现。 1。使用Map传递参数 使用MyBatis提供的Map接口作为参数实现,如下所示。!根据name和url模糊查询网站信息selectidselectWebsiteByMapresultTypecom。kaikeba。po。WebsiteparameterTypemapSELECTid,NAME,urlFROMwebsiteWHEREnameLIKECONCAT(,{name},)ANDurlLIKECONCAT(,{url},)select123456复制代码类型:〔html〕 在WebsiteMapper接口中,方法如下。publicListWebsiteselectWebsiteByMap(MapString,Stringparams);1复制代码类型:〔java〕 测试代码如下。MapString,StringparamsMapnewHashMapString,String();paramsMap。put(name,开课吧);paramsMap。put(url,kaikeba);websiteMapper。selectWebsiteByMap(paramsMap);1234复制代码类型:〔html〕 使用Map传递参数虽然简单易用,但是由于这样设置参数需要键值对应,业务关联性不强,开发人员需要深入到程序中看代码,造成可读性下降。 2。使用注解传递参数 使用MyBatis的注解Param()传递参数,如下所示。!根据name和url模糊查询网站信息selectidselectWebsiteByAnresultTypecom。kaikeba。po。WebsiteSELECTid,NAME,urlFROMwebsiteWHEREnameLIKECONCAT(,{name},)ANDurlLIKECONCAT(,{url},)select123456复制代码类型:〔java〕 WebsiteMapper接口中方法如下。publicListWebsiteselectWebsiteByAn(Param(name)Stringname,Param(url)Stringurl);1复制代码类型:〔java〕 当我们把参数传递给后台时,MyBatis通过Param提供的名称就会知道{name}代表name参数,提高了参数可读性。但是如果这条SQL拥有10个参数的查询,就会造成可读性下降,增强了代码复杂性。 3。使用JavaBean传递参数 在参数过多的情况下,MyBatis允许组织一个JavaBean,通过简单的setter和getter方法设置参数,提高可读性。如下所示。!根据name和url模糊查询网站信息selectidselectWebsiteByAnresultTypecom。kaikeba。po。WebsiteSELECTid,NAME,urlFROMwebsiteWHEREnameLIKECONCAT(,{name},)ANDurlLIKECONCAT(,{url},)select123456复制代码类型:〔java〕 WebsiteMapper接口中方法如下。publicListWebsiteselectWebsiteByAn(Websitewebsite);1复制代码类型:〔java〕 这就是通过JavaBean传递多个参数的方式。区别 以上3种方式的区别如下。 使用Map传递参数会导致业务可读性的丧失,继而导致后续扩展和维护的困难,所以在实际应用中我们应该果断废弃该方式。 使用Param注解传递参数会受到参数个数的影响。当n5时,它是最佳的传参方式,因为它更加直观;当n5时,多个参数将给调用带来困难。 当参数个数大于5个时,建议使用JavaBean方式。 开课吧广场人才学习交流平台