1 案例
传递pojo综合查询用户信息
2 UserMapper.xml
< select id="findUserList" parameterType="UserBean" resultType="UserBean">
select * from user where 1=1
< if test="id!=null and id!=''">
and id=#{id}
< /if>
< if test="username!=null and username!=''">
and username like "%#{username}%"
< /if>
< /select>
3 UserMapper.java
package net920vip.mapper;
import net920vip.bean.UserBean;
import java.util.List;
public interface UserMapper {
public UserBean findUserById(int id) throws Exception;
public List<UserBean> findUserByUsername(String username)throws Exception;
public int insertUser(UserBean user) throws Exception;
public int updateUserById(UserBean user) throws Exception;
public int deleteUserById(int id) throws Exception;
public List<UserBean> findUserList(UserBean USER) throws Exception;
}
4 Test.java
List<UserBean> userList = userMapper.findUserList(null);
UserBean user = new UserBean();
user.setId(10);
List<UserBean> userList1 = userMapper.findUserList(user);
System.out.println(userList1.toString());
5 加入where对UserMapper.xml升级
sql只接收一个数组参数,这时sql解析参数的明湖曾mybatis固定为array,如果数组是通过一个pojo传递到sql则参数的名称为poji中的属性名。
<select id="findUserList" parameterType="UserBean" resultType="UserBean">
select * from user
< where>
< if test="id!=null and id!=''">
and id=#{id}
< /if>
< if test="username!=null and username!=''">
and username like "%#{username}%"
< /if>
</ where>
< /select>
6 foreach
向sql传递数组或List,mybatis使用foreach解析,如下
UserMapper.xml
<select id="selectUserByIds" parameterType="java.util.List" resultType="UserBean">
select * from user
<where>
<if test="list != null">
<foreach collection="list" item="id" open="and id in(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
如果数组中是简单类型,则写为#{item},不用通过ognl获取对象属性值了
接口:UserMapper.java
package net920vip.mapper;
import net920vip.bean.UserBean;
import java.util.List;
public interface UserMapper {
public List<UserBean> selectUserByIds(List<Integer> list) throws Exception;
}
Test.java
ArrayList<Integer> list = new ArrayList<>();
List<UserBean> users = userMapper.selectUserByIds(Arrays.asList(1,10));
System.out.println(users.toString());
7 sql片段
sql中可将重复的sql提取出来,使用时用include即可,最终达到sql重用的目的,如:
<sql id="query_user_sql">
<if test="id!=null and id!=''">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like "%#{username}%"
</if>
</sql>
<select id="findUserList" parameterType="UserBean" resultType="UserBean">
select * from user
<where>
<include refid="query_user_sql"/>
</where>
</select>
注意:如果引用其他mapper.xml的片段,则在引用时需要加上namspace,如下
<include refid="namespace.sql片段id"/>
gitee地址:https://gitee.com/net920vip/mybatis-demo01.git
<h2><a id="1__0"></a>1 案例</h2>
<p>传递pojo综合查询用户信息</p>
<h2><a id="2_UserMapperxml_3"></a>2 UserMapper.xml</h2>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-comment"><!-- 传递pojo综合查询用户信息 --></span>
< select id="findUserList" parameterType="UserBean" resultType="UserBean">
select * from user where 1=1
< if test="id!=null and id!=''">
and id=#{id}
< /if>
< if test="username!=null and username!=''">
and username like "%#{username}%"
< /if>
< /select>
</code></div></pre>
<h2><a id="3_UserMapperjava_18"></a>3 UserMapper.java</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> net920vip.mapper;
<span class="hljs-keyword">import</span> net920vip.bean.UserBean;
<span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-comment">/**
* 接口文件 对应UserMapper.xml文件
* 用户管理mapper
* */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">interface</span> <span class="hljs-title class_">UserMapper</span> {
<span class="hljs-comment">// 根据id查询user</span>
<span class="hljs-keyword">public</span> UserBean <span class="hljs-title function_">findUserById</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span> <span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 根据用户名模糊查询</span>
<span class="hljs-keyword">public</span> List<UserBean> <span class="hljs-title function_">findUserByUsername</span><span class="hljs-params">(String username)</span><span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 新增user 返回类型 int或void均可</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">insertUser</span><span class="hljs-params">(UserBean user)</span> <span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 新增user 返回类型 int或void均可</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">updateUserById</span><span class="hljs-params">(UserBean user)</span> <span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 根据user删除user</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">deleteUserById</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span> <span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 传递pojo综合查询用户信息</span>
<span class="hljs-keyword">public</span> List<UserBean> <span class="hljs-title function_">findUserList</span><span class="hljs-params">(UserBean USER)</span> <span class="hljs-keyword">throws</span> Exception;
}
</code></div></pre>
<h2><a id="4_Testjava_47"></a>4 Test.java</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">// 使用sql片段,综合查询测试</span>
List<UserBean> userList = userMapper.findUserList(<span class="hljs-literal">null</span>);
<span class="hljs-comment">// 查询所有</span>
<span class="hljs-comment">//System.out.println(userList.toString());</span>
<span class="hljs-comment">//</span>
<span class="hljs-type">UserBean</span> <span class="hljs-variable">user</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">UserBean</span>();
user.setId(<span class="hljs-number">10</span>);
List<UserBean> userList1 = userMapper.findUserList(user);
System.out.println(userList1.toString());
</code></div></pre>
<h2><a id="5_whereUserMapperxml_60"></a>5 加入where对UserMapper.xml升级</h2>
<p>sql只接收一个数组参数,这时sql解析参数的明湖曾mybatis固定为array,如果数组是通过一个pojo传递到sql则参数的名称为poji中的属性名。</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-comment"><!-- 传递pojo综合查询用户信息 --></span>
<span class="hljs-comment"><!--< select id="findUserList" parameterType="UserBean" resultType="UserBean">--></span>
<span class="hljs-comment"><!-- select * from user where 1=1--></span>
<span class="hljs-comment"><!-- < if test="id!=null and id!=''">--></span>
<span class="hljs-comment"><!-- and id=#{id}--></span>
<span class="hljs-comment"><!-- < /if>--></span>
<span class="hljs-comment"><!-- < if test="username!=null and username!=''">--></span>
<span class="hljs-comment"><!-- and username like "%#{username}%"--></span>
<span class="hljs-comment"><!-- < /if>--></span>
<span class="hljs-comment"><!--</ select>--></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserList"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"UserBean"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"UserBean"</span>></span>
select * from user
< where>
< if test="id!=null and id!=''">
and id=#{id}
< /if>
< if test="username!=null and username!=''">
and username like "%#{username}%"
< /if>
</ where>
< /select>
</code></div></pre>
<h2><a id="6_foreach_88"></a>6 foreach</h2>
<p>向sql传递数组或List,mybatis使用foreach解析,如下</p>
<p>UserMapper.xml</p>
<pre><div class="hljs"><code class="lang-java"><select id=<span class="hljs-string">"selectUserByIds"</span> parameterType=<span class="hljs-string">"java.util.List"</span> resultType=<span class="hljs-string">"UserBean"</span>>
select * from user
<where>
<<span class="hljs-keyword">if</span> test=<span class="hljs-string">"list != null"</span>>
<foreach collection=<span class="hljs-string">"list"</span> item=<span class="hljs-string">"id"</span> open=<span class="hljs-string">"and id in("</span> separator=<span class="hljs-string">","</span> close=<span class="hljs-string">")"</span>>
#{id}
</foreach>
</<span class="hljs-keyword">if</span>>
</where>
</select>
</code></div></pre>
<p>如果数组中是简单类型,则写为#{item},不用通过ognl获取对象属性值了</p>
<p>接口:UserMapper.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> net920vip.mapper;
<span class="hljs-keyword">import</span> net920vip.bean.UserBean;
<span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-comment">/**
* 接口文件 对应UserMapper.xml文件
* 用户管理mapper
* */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">interface</span> <span class="hljs-title class_">UserMapper</span> {
<span class="hljs-comment">// 批量根据ids查询</span>
<span class="hljs-keyword">public</span> List<UserBean> <span class="hljs-title function_">selectUserByIds</span><span class="hljs-params">(List<Integer> list)</span> <span class="hljs-keyword">throws</span> Exception;
}
</code></div></pre>
<p>Test.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">// 使用foreach动态sql,批量查询 传空 null:查询所有</span>
ArrayList<Integer> list = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><>();
<span class="hljs-comment">// list.add(1);</span>
<span class="hljs-comment">// list.add(10);</span>
<span class="hljs-comment">// List<UserBean> users = userMapper.selectUserByIds(list);</span>
List<UserBean> users = userMapper.selectUserByIds(Arrays.asList(<span class="hljs-number">1</span>,<span class="hljs-number">10</span>));
System.out.println(users.toString());
</code></div></pre>
<h2><a id="7_sql_140"></a>7 sql片段</h2>
<p>sql中可将重复的sql提取出来,使用时用include即可,最终达到sql重用的目的,如:</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-comment"><!-- 抽取模板--></span>
<span class="hljs-tag"><<span class="hljs-name">sql</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"query_user_sql"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"id!=null and id!=''"</span>></span>
and id=#{id}
<span class="hljs-tag"></<span class="hljs-name">if</span>></span>
<span class="hljs-tag"><<span class="hljs-name">if</span> <span class="hljs-attr">test</span>=<span class="hljs-string">"username!=null and username!=''"</span>></span>
and username like "%#{username}%"
<span class="hljs-tag"></<span class="hljs-name">if</span>></span>
<span class="hljs-tag"></<span class="hljs-name">sql</span>></span>
<span class="hljs-comment"><!-- 传递pojo综合查询用户信息 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserList"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"UserBean"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"UserBean"</span>></span>
select * from user
<span class="hljs-tag"><<span class="hljs-name">where</span>></span>
<span class="hljs-comment"><!-- <if test="id!=null and id!=''">--></span>
<span class="hljs-comment"><!-- and id=#{id}--></span>
<span class="hljs-comment"><!-- </if>--></span>
<span class="hljs-comment"><!-- <if test="username!=null and username!=''">--></span>
<span class="hljs-comment"><!-- and username like "%#{username}%"--></span>
<span class="hljs-comment"><!-- </if>--></span>
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"query_user_sql"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">where</span>></span>
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
</code></div></pre>
<p>注意:如果引用其他mapper.xml的片段,则在引用时需要加上namspace,如下</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"namespace.sql片段id"</span>/></span>
</code></div></pre>
<p>gitee地址:https://gitee.com/net920vip/mybatis-demo01.git</p>
留言