java 将查询到的值 存下_MyBatis3.x 从入门到精通(六)查询
概述:
在前面的章節(jié)中,對(duì)查詢已經(jīng)有過接觸,先做一下概述:接觸過的查詢有3種。第1種:根據(jù)id查詢(傳入1個(gè)參數(shù));第2種:多條件查詢(傳入多個(gè)參數(shù));第3種查詢:多條件查詢(傳入1個(gè)對(duì)象)。這里是在前面的基礎(chǔ)上,做擴(kuò)展介紹。
這里先以selectById方法為例,拿出之前的配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:命名空間,需要保持全局唯一,一般為對(duì)應(yīng)的持久層接口 --> <mapper namespace="com.xbjct.mapper.EmployeeMapper"><sql id="baseSql">id,name,sex,mobile,birthday,address,employee_nickname</sql><!-- mybatis使用接口動(dòng)態(tài)代理,這里的id值為持久層接口中定義的方法名稱,需保持一致。 --> <!-- <select id="selectById" resultType="com.xbjct.domain.Employee">--><select id="selectById" resultType="Employee">select <include refid="baseSql" />from tb_employeewhere id = #{id}<!-- #{} 中的值為接口方法中的參數(shù)@Param("")定義的值,注:大小寫敏感 --></select><!-- <select id="selectByDto" resultType="com.xbjct.domain.Employee">--><select id="selectByDto" resultType="Employee">select <include refid="baseSql" />from tb_employeewhere id = #{queryDto.id}and name like concat('%', #{queryDto.name},'%')and address like concat('%', #{queryDto.address}, '%')</select></mapper>上面的配置文件中有個(gè)<sql></sql>標(biāo)簽,這個(gè)稱之為:SQL片段。它的作用是抽取公共的sql語句,減少代碼冗余。如果不書序SQL片段,那么在上面的配置中,每個(gè)select標(biāo)簽中的select語句語句都要寫上 sql片段 里面的代碼,代碼會(huì)顯的冗余。當(dāng)然,該配置文件中可以書寫多個(gè)SQL片段,只要保證<sql></sql>標(biāo)簽的ID屬性值不唯一,即可。
上面的配置查看 selectById 這個(gè)方法(即 <select id="selectById" ... ></select>),在select標(biāo)簽中省寫了一個(gè) parameterType 它的作用是在接收入?yún)r(shí),指明參數(shù)的類型。比如selectById 是根據(jù)id查詢數(shù)據(jù),id類型,在接口中方法的參數(shù)上已經(jīng)定義了Long類型。
EmployeeMapper接口方法如下:
Employee selectById(@Param("id") Long id);EmployeeMapper.xml 文件較完整寫法:
<select id="selectById" parameterType="java.lang.Long" resultType="Employee">select <include refid="baseSql" />from tb_employeewhere id = #{id}<!-- #{} 中的值為接口方法中的參數(shù)@Param("")定義的值,注:大小寫敏感 --></select>上述配置調(diào)整后,運(yùn)行測(cè)試方法,程序正常執(zhí)行,輸出結(jié)果如下:
注意:
parameterType參數(shù)類型
- 可以是基本類型
- 也可以是java集合List或Map類型
- 還可以是java自定義的對(duì)象
上述配置文件,在進(jìn)行取參時(shí),代碼如下:
where id = #{id}可對(duì)其進(jìn)行調(diào)整,指明取餐類型,調(diào)整后代碼如下:
where id = #{id, jdbcType = BIGINT}注意:
一般情況下不加也是可以正常使用的,若出現(xiàn)報(bào)錯(cuò):無效的列類型時(shí),則是缺少jdbcType。
在查詢時(shí),一般不會(huì)查詢?yōu)閚ull值,若需要查詢字段為null,則需要jdbcType屬性。
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN boolean TINYINT byte SMALLINT short INTEGER INTEGER INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array DISTINCT mapping of underlying type STRUCT Struct REF Ref DATALINK java.net.URLparameterType參數(shù)類型為對(duì)象時(shí)
這里需要修改mapper.EmployeeMapper.xml文件,找到selectByDto的方法,給select標(biāo)簽加入parameterType屬性,如下:
<!-- <select id="selectByDto" resultType="com.xbjct.domain.Employee">--><select id="selectByDto" parameterType="Employee" resultType="Employee">select <include refid="baseSql" />from tb_employeewhere id = #{queryDto.id}and name like concat('%', #{queryDto.name},'%')and address like concat('%', #{queryDto.address}, '%')</select>運(yùn)行測(cè)試方法,程序正常執(zhí)行,輸出結(jié)果如下:
注意:
如果查詢條件:id、name、address其中一個(gè)為空時(shí),是檢索不到數(shù)據(jù)的。現(xiàn)在需要做的是,當(dāng)查詢條件為空時(shí)?可否將其過濾掉? 答案是:可以的。現(xiàn)在開始接觸mybatis的if標(biāo)簽,代碼調(diào)整如下:
<select id="selectByDto" parameterType="Employee" resultType="Employee">select <include refid="baseSql" />from tb_employee<!--where id = #{queryDto.id}and name like concat('%', #{queryDto.name},'%')and address like concat('%', #{queryDto.address}, '%')--><where><if test="queryDto.id != null">id = #{queryDto.id, jdbcType = BIGINT}</if><if test="queryDto.name != null and queryDto.name != ''">and name like concat('%', #{queryDto.name, jdbcType = VARCHAR},'%')</if><if test="queryDto.address != null and queryDto.address != ''">and address like concat('%', #{queryDto.address, jdbcType = VARCHAR}, '%')</if></where></select>上述配置修改,運(yùn)行測(cè)試方法,程序正常執(zhí)行,輸出結(jié)果如下:
之前demo查詢,其結(jié)果均為一個(gè)對(duì)象,可否查詢一個(gè)集合?也是可以的。代碼改動(dòng)如下:
EmployeeMapper.xml文件中的方法不需要做改動(dòng)
修改接口EmployeeMapper中selectByDto方法返回類型,
修改之前:
Employee selectByDto(@Param("queryDto") EmployeeQueryDTO queryDTO);修改之后:
List<Employee> selectByDto(@Param("queryDto") EmployeeQueryDTO queryDTO);運(yùn)行測(cè)試方法,程序正常執(zhí)行,輸出結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的java 将查询到的值 存下_MyBatis3.x 从入门到精通(六)查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 字符串解析_MySQL 动态
- 下一篇: mybatis转义反斜杠_Shell e