对Mapper 中几种update的区别说明
这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作
update
更新传回数据的所有字段,没有传回的字段保持原样。
updateByPrimaryKey
对实体类的字段全部更新(不判断是否为Null),即如果字段为空就更新为空;
updateByPrimaryKeySelective
会对实体类字段进行判断再更新(如果为Null就忽略更新),如果字段为空,忽略不更新;
补充知识:mapper中insert、update、delete、select、resultMap的用法
这里介绍mapper映射文件的配置,这是mybatis的核心之一,一定要学好。
在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有:select,insert,update,delete,cache,cache-ref,resultMap,sql。
先来看看insert,update,delete怎么配置,能配置哪些元素吧:
id="insertUser" parameterType="com.demo.User" flushCache="true" statementType="PREPARED" keyProperty="" keyColumn="" useGeneratedKeys="false" timeout="20">
以上就是一个模板配置,哪些是必要配置,哪些是根据自己实际需求,看一眼就知道了。
仔细观察上面parameterType,"com.dy.entity.User",包名要是再长点呢?那么这个地方,用上typeAliases别名,岂不是能跟长长的包名说拜拜了。在哪儿配?当然是在mybatis的全局配置文件(我这儿名字是mybatis-conf.xml),不要认为是在mapper的配置文件里面配置哈。
mybatis-conf.xml:
这样,一个别名就取好了,可以把上面的com.dy.entity.User都直接改为user了。
我这儿数据库用的是mysql,我把user表的主键id设置了自动增长,以上代码运行正常,那么问题来了(当然,我不是要问学挖掘机哪家强),我要是换成oracle数据库怎么办?oracle可是不支持id自增长啊?怎么办?请看下面:
selectseq_user_id.nextvalasidfromdual insertintouser(id,name,password,age,deleteFlag) values(#{id},#{name},#{password},#{age},#{deleteFlag})
同理,如果我们在使用mysql的时候,想在数据插入后返回插入的id,我们也可以使用selectKey这个元素:
SELECTLAST_INSERT_ID()asid insertintouser(id,name,password,age,deleteFlag) values(#{id},#{name},#{password},#{age},#{deleteFlag})
这儿,我们就简单提一下
keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED">
上面介绍了insert、update、delete的用法,下面介绍select、resultMap的用法。select无疑是我们最常用,也是最复杂的,mybatis通过resultMap能帮助我们很好地进行高级映射。下面就开始看看select以及resultMap的用法:
先看select的配置吧:
配置看起来总是这么多,不过实际常用的配置也就那么几个,根据自己的需要吧,上面都已注明是否必须配置。
下面是针对select的练手
其中,1个student可选择多个course进行学习。
selectcourse_idasid,course_nameasname,course_delete_flgasdeleteFlagfromt_coursewherecourse_id=#{courseId}
上面我们针对course,简单演示了select的用法,不过有个问题值得思考:一个student可以对应多个course,那么,在mybatis中如何处理这种一对多,甚至于多对多,一对一的关系呢?
这儿,就不得不提到resultMap这个东西,mybatis的resultMap功能可谓十分强大,能够处理复杂的关系映射,那么resultMap该怎么配置呢?别急,这就来了:
resultMap的配置:
以上这篇对Mapper中几种update的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。