【MyBatis配置文件】

MyBatis常见问题汇总

<mapper namespace="对应于Dao层的接口名称"></mapper>

sql语句的正确格式

insert

INSERT 
INTO table_name
(column1, column2,...columnN)
VALUES  ( value1, value2,...valueN )

mybatis->insert

xml中的语法格式与sql中的类似
insert标签:是插入的意思,默认返回值为数据库影响行数,所以在mybatis中我们不用特意声明返回值类型
if标签:test中填写字段的判断条件,若满足则sql语句拼接if标签中的字段,否则不会拼接
trim标签:这个标签用来拼接我们需要的字段
prefix是前缀的意思,比如下面的插入语句,前面已经有了insert into table_name,接下来我们需要(作为前缀拼接,所以这里放(
suffix为后缀的意思,有了(,我们需要),所以将**)**放在这最后,中间放我们需要的数据库字段
suffixOverrides是当if标签中的判断条件为空时,去掉多余的suffixOverrides标签中所填写的后缀内容(这种情况只有在最后1个或几个if标签中的字段都不满足if标签的判断条件时才会出现)
jdbcType:数据库中该字段的类型

<insert id="对应方法名" parameterType="java中所对应的参数类型">
	insert into table_name
	<trim prefix="(" suffix=")" suffixOverrides=",">
		<if test="后端字段名1 != null">
			数据库字段名称1,
		</if>
		<if test="后端字段名2 != null">
			数据库字段名称2
		</if>
	</trim>
	<trim prefix="values (" suffix=")" suffixOverrieds=",">
		<if test="后端字段名1 != null">
			#{后端字段名1,jdbcType=VARCHAR}
		</if>
		<if test="后端字段名2 != null">
			#{后端字段名2,jdbcType=VARCHAR}
		</if>
	</trim>
</insert>

delete

DELETE 
FROM table_name
where  
table_name.var1='字符串1'
and table_name.var2='字符串2'

mybatis->delete

delete默认返回值为影响数据库行数,所以不用写返回类型
注意
delete一定要判断清楚条件是否为空,若为空可能删掉表中的所有字段
delete在只有一个删除条件时,不能与if标签连用,否则会报错
delete 的where语句中连接符为and不能忘记了,trim标签中的prefix与suffix是在trim标签所包含的一大段内容的最前面与最后面拼接prefix与suffix,所以delete中的and不能使用

<delete id="对应方法名" parameterType="java中所对应的参数类型">
	delete  
	from table_name
	where
	<trim suffixOverrieds="and">
		<if test="后端字段名1 != null">
			数据库字段名称1=#{后端字段名1,jdbcType=VARCHAR} and
		</if>
		<if test="后端字段名2 != null">
			数据库字段名称2=#{后端字段名2,jdbcType=VARCHAR}
		</if>
	</trim>
</delete>

select

SELECT col1,col2,col3
FROM table_name
WHERE 条件
[group by column]
[having 条件]
[order by DESC]
[limit 条件]

mybatis->select

resultMap标签:结果集
id:resultMap的唯一标识,可以放在select语句中的resultMap属性
resultMap中的id:这个里面放对应表的主键(这个)
resultMap中的association :这个标签可以用来嵌套新的对象(即为对象中的对象)
注意:
当我们的返回值中含有对象的对象时,注意两层resultMap的返回值可能会有问题,只返回一条数据
注意当我们有两条数据时,外层对象中所对应的内容若完全相同,则内层对象中的内容即使不同,也只会返回一条数据
解决方法:
1、让外层对象所对应的返回值值变得不同,resultMap加一个主键,但后端的实体类不写该主键字段对应的属性

<select id="对应方法名" parameterType="java中所对应的参数类型" resultMap="要调用的resultMap的名字">
	select 
	from table_name
	where
	<trim suffixOverrieds="and">
		<if test="后端字段名1 != null">
			数据库字段名称1=#{后端字段名1,jdbcType=VARCHAR} and
		</if>
		<if test="后端字段名2 != null">
			数据库字段名称2=#{后端字段名2,jdbcType=VARCHAR}
		</if>
	</trim>
</select>

<resultMap id="这个resultMap的唯一标识" type="对应的结果类型">
	<id column="" jdbcType=""/>
	<result column="" jdbcType=""/>
	<result column="strVar" jdbcType="VARCHAR" property="url"/>
	<result column="timeVar" jdbcType="TIMESTAMP" property="createTime"/>
	<result column="jsonObjectVar"
	                typeHandler="com.hisense.higw.message.config.json.ObjectJsonHandler"
	                jdbcType="VARCHAR"
                	property="dataPackage"/>      
    <association javaType= "大对象中的小对象"
					property="后台参数名"
					resultMap="这个小对象所对应的resultMap的id"

	/>
</resultMap>
<resultMap id="这个resultMap的唯一标识" type="对应的结果类型">
	<id column="" jdbcType=""/>
	<result column="" jdbcType=""/>  
</resultMap>

猜你喜欢

转载自blog.csdn.net/ABidMan/article/details/127567629