Mybatis注意事项

配置文件

1、配置文件中<mapper>不论是parameterType属性还是resultType属性,简写的名称必须与<configuration>下<typeAliases>中的<typeAlias>里面的alias值一致。

2、配置文件中<mapper>下的增删改查parameterType属性可以不与数据库一致,但是配置文件必须与类中属性一致。例如:数据库id字段为String,parameterType可设置为int,类中id属性必须为int。需要满足的条件是,数据库中id的String为数字,转换后不会出现异常。

3、接口实现时,<mapper>的namespace属性必须对应接口所在位置。其余方式可不必要。

4、配置文件中标签的先后,必须按照顺序来。

单表:

1、返回集合时(不论list,set,map),<select>中的resultType属性改为resultMap,同时建立对应的<resultMap><result column="列名" property="类参数名"></resultMap>。

2、返回集合时,如果数据参数与类中参数一一对应,可设置resultType=类名,不必如第三条修改。

3、返回集合时,如果有多参数,一是可以作为一个对象传入,二是以#{0},#{1}的方式代表第一个参数第二个参数

1、插入数据时,<insert>标签中useGeneratedKeys属性设置为true,表示获取数据库自动生成的主键,keyProperty='id'指把获取到的主键放入id属性中。

2、插入数据时,类中属性与数据库字段可不一一对应。sql语句中参数以类属性名为主。

3、插入数据时,必须在执行方法后,提交事务:session.commit();否则不会被写入数据库。

4、插入数据时,可一次插入多条数据后,再提交事务。

5、插入数据时,insert into tablename values(#{name1},'${name2}'),以上两种参数方式都可以。注意单引号,双引号会报错。

1、修改数据时,同类似。参数有两种方式书写。同时修改后必须提交事务,否则不会被写入数据库。

1、删除数据时,同类似。参数有两种方式书写,同时删除后必须提交事务,否则不会被写入数据库。

User.xml配置文件代码如下

<?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">

<!-- <mapper namespace="com.yihaomen.mybatis.models.UserMapper"> -->
<mapper namespace="com.yihaomen.mybatis.inter.IUserOperation">
    <select id="selectUserByID" parameterType="String" resultMap="resultListUser">
        select * from lwt_goods where goodsid = #{id}
    </select>
    <resultMap type="User" id="resultListUser">
        <result column="goodsid" property="goodsid" />
        <result column="goodsname" property="goodsname" />
        <result column="storename1" property="storename" />
        <result column="oldprice" property="oldprice" />
    </resultMap>
        
    </resultMap>
    
    <insert id="addUser" parameterType="User" >
        insert into lwt_goods values(#{goodsid},#{goodsname},'null',#{storename},'${oldprice}','null',null,null,null)
    </insert>
    
    <update id="updateUser" parameterType="User">
        update lwt_goods set goodsname = #{goodsname},storename1 = #{storename} where goodsid = #{goodsid}
    </update>
    
    <delete id="deleteUser" parameterType="int">
       delete lwt_goods where goodsid = #{goodsid}
    </delete>
</mapper>

多表:

1、多表关联查询时,需要在一个映射类A的bean里,将另一个映射类B作为它的属性。返回结果以resultMap形式表示。同时在resultMap中以<association>标签配置属性B。返回出来的结果,是A的对象,或者A的对象的集合。需要注意的是:如果返回的数据所有属性的值相同,会被合并为一条数据(暂未寻找解决方法),类似于sql中unique约束。

方式1
    <resultMap type="ShopCar" id="resultListShopCar">
        <result column="num" property="num"/>
        <result column="type" property="type"/>
        <association property="user" javaType="User">
            <result column="goodsid" property="goodsid" />
  	        <result column="goodsname" property="goodsname" />
  		    <result column="storename1" property="storename" />
  		    <result column="oldprice" property="oldprice" />
        </association>
    </resultMap>
方式2
    <resultMap type="User" id="resultListUser">
        <result column="goodsid" property="goodsid" />
        <result column="goodsname" property="goodsname" />
        <result column="storename1" property="storename" />
        <result column="oldprice" property="oldprice" />
    </resultMap>
    <resultMap type="ShopCar" id="resultListShopCar">
        <result column="num" property="num"/>
        <result column="type" property="type"/>
        <association property="user" javaType="User" resultMap="resultListUser"/ 
    </resultMap>
原文地址:https://www.cnblogs.com/yxth/p/6625926.html