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>