<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
select * from userinfo where username='${name}'
${} VS #{}
UserInfo userInfo = userMapper.login("admin","' or 1='1");
mysql> select * from userinfo where username = 'admin' and password ='' or 1='1';
+----+----------+----------+-------+---------------------+---------------------+-------+
| id | username | password | photo | createtime | updatetime | state |
+----+----------+----------+-------+---------------------+---------------------+-------+
| 1 | admin | admin | | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 | 1 |
+----+----------+----------+-------+---------------------+---------------------+-------+
1 row in set (0.00 sec)
用concat進行字串拼接
<select id="findListByName" resultMap="BaseMap"> select * from userinfo where username like concat('%',#{name},'%') </select>
一對一的多表查詢:需要設定resultMap中有個association標籤,property對應實體類的屬性名,resultMap是關聯屬性的字典對映(必須要設定),columnPrefix是設定字首,當多表查詢中有相同的欄位的話,就會報錯
<?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.example.demo.mapper.ArticleInfoMapper"> <resultMap id="BaseMap" type="com.example.demo.model.ArticleInfo"> <!--主鍵--> <id property="id" column="id"></id> <!--普通屬性--> <result property="updatetime" column="updatetime"></result> <result property="title" column="title"></result> <result property="content" column="content"></result> <result property="createtime" column="createtime"></result> <result property="rcount" column="rcount"></result> <!--自定義物件屬性--> <association property="user" resultMap="com.example.demo.mapper.UserMapper.BaseMap" columnPrefix="u_"> </association> </resultMap> <select id="getAll" resultType="com.example.demo.model.ArticleInfo"> select a.*,u.id from articleinfo as a left join userinfo as u on a.uid = u.id; </select> <select id="getAll2" resultMap="BaseMap"> select a.*,u.id as u_id ,u.username as u_username,u.password as u_password from articleinfo as a left join userinfo as u on a.uid = u.id; </select> </mapper>
collection標籤,用法同association
<resultMap id="BaseMapper2" type="com.example.demo.model.UserInfo"> <!--對映主鍵的)(表中主鍵和程式實體類中的主鍵)--> <id column="id" property="id"></id> <!--普通列的對映--> <result column="username" property="name"></result> <result column="password" property="password"></result> <result column="photo" property="photo"></result> <result column="createtime" property="createtime"></result> <result column="updatetime" property="updatetime"></result> <!--外部關聯--> <collection property="artlist" resultMap="com.example.demo.mapper.ArticleInfoMapper.BaseMap" columnPrefix="a_"></collection> </resultMap> <select id="getAll3" resultMap="BaseMapper2"> select u.*,a.id a_id,a.title a_title from userinfo u left join articleinfo a on u.id=a.uid </select>
註冊分為必填和選填,如果在新增使用者的時候有不確定的欄位傳入,就需要使用動態標籤if來判斷
//p是傳遞過來的引數名,並不是表的欄位名 <insert id="add3"> insert into userinfo(username,password, <if test="p!=null"> photo, </if> state) values(#{username},#{password}, <if test="p!=null"> #{p}, </if> #{state}) </insert>
trim標籤的屬性
<insert id="add4"> insert into userinfo <trim prefix="(" suffix=")" suffixOverrides=","> <if test="username!=null"> username, </if> <if test="password!=null"> password, </if> <if test="p!=null"> photo, </if> <if test="state!=null"> state, </if> </trim> values <trim prefix="(" suffix=")" suffixOverrides=","> <if test="username!=null"> #{username}, </if> <if test="password!=null"> #{password}, </if> <if test="p!=null"> #{p}, </if> <if test="state!=null"> #{state}, </if> </trim> </insert>
where標籤首先可以幫助我們生成where,如果有查詢條件,那麼就生成where,如果沒有查詢條件,就會忽略where
其次where標籤可以判斷第一個查詢條件前面有沒有and,如果有則會刪除
<select id="login2" resultType="com.example.demo.model.UserInfo"> select * from userinfo <where> <if test="username!=null"> username=#{username} </if> <if test="password!=null"> and password=#{password} </if> </where> </select>
和where的使用基本一樣
可以自動幫助你處理最後一個逗號,並且自動寫set
<update id="update" parameterType="map"> update blog <set> <if test="newTitle != null"> title=#{newTitle}, </if> <if test="newAuthor != null"> author=#{newAuthor}, </if> <if test="newViews != null"> views = #{newViews} </if> </set> <where> <if test="id != null"> id=#{id} </if> <if test="title != null"> and title=#{title} </if> <if test="author != null"> and author=#{author} </if> <if test="views != null"> and views = #{views} </if> </where> </update>
<delete id="dels"> delete from userinfo where id in <foreach collection="list" item="item" open="(" close=")" separator="," > #{item} </foreach> </delete>
到此這篇關於Mybatis詳解動態SQL以及單表多表查詢的應用的文章就介紹到這了,更多相關Mybatis動態SQL內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45