mybatis動態sql、sql片段

 

 

 

 

目錄

列;動態sql練習

mybatis的全局配置文件--sqlMapConfig.xml

創建po對象

創建接口

sql映射文件--Goods.xml

工具類Utils.java

測試

結果


列;動態sql練習

mybatis的全局配置文件--sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <!-- 配置數據源事務,連接池 -->
   <properties resource="db.properties"></properties>
   <typeAliases>
       <!-- 單個別名 -->
      <!--  <typeAlias type="com.iotek.po.Goods" alias="goods"/> -->
       <!--批量別名:掃描整個包下的類,類的別名就是類名(首字母大寫或者小寫都可以) -->
       <package name="com.iotek.po" />
   </typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加載sql語句映射文件 -->
	<mappers>
	     <mapper resource="com/iotek/po/Goods.xml"/>	     
	</mappers>
</configuration>

創建po對象

創建接口

public interface GoodsMapper {
    List<Goods> queryGoodsByIf(Goods goods);//if查詢
    List<Goods> queryGoodsByWhere(Goods goods);//2 where查詢(重點)
    List<Goods> queryGoodsByChoose(Goods goods);//3 多分支查詢
    List<Goods> queryGoodsByForeach(int[] ids);//4向sql傳遞數組
    List<Goods> queryGoodsByForeach2(List<Integer> ids);//5查詢參數是集合
    List<Goods> queryGoodsByForeach3(List<Goods> goods);//6查詢參數是集合對象
}

sql映射文件--Goods.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.iotek.dao.GoodsMapper">
    <!--1 if查詢 -->
	<select id="queryGoodsByIf" parameterType="Goods" resultType="Goods">
	     select id,goodName,price,num from tb_goods where 1=1
	     <if test="goodName!=null and goodName!=''">
	      and goodName like '%' #{goodName} '%'
	     </if>
	     <if test="price>3500">
	        and price>#{price}
	     </if>
	</select>
	<!--2 where查詢(重點) -->
	 <select id="queryGoodsByWhere" parameterType="Goods" resultType="Goods">
	     select id,goodName,price,num from tb_goods 
	     <where>
	     <if test="goodName!=null and goodName!=''">
	      and goodName like '%' #{goodName} '%'
	     </if>
	     <if test="price>3500">
	        and price>#{price}
	     </if>
	     </where>
	</select>
	<!--3 多分支查詢 -->
	 <select id="queryGoodsByChoose" parameterType="Goods" resultType="Goods">
	     select id,goodName,price,num from tb_goods 
	     <where>
	       <choose>
	           <when test="goodName!=null and goodName!=''">
	              and goodName like '%' #{goodName} '%'
	           </when>
	           <when test="price>3500">
	               and price>#{price}
	           </when>
	           <otherwise>
	              1=2
	           </otherwise>
	       </choose>
	     </where>
	</select>
	<!--4 向sql傳遞數組  parameterType可以不寫
	      index:爲數組的下標。 
          item:爲數組每個元素的名稱,名稱隨意定義
          open:循環開始
          close:循環結束
          separator:中間分隔輸出-->
	<select id="queryGoodsByForeach" parameterType="object[]" resultType="Goods">
	     select id,goodName,price,num from tb_goods
	     <if test="array.length>0">
	         where id in
	         <foreach collection="array" item="myid" open="(" close=")" separator=",">
	             #{myid}
	         </foreach>
	     </if>
	
	</select>
	<!--5查詢參數是集合-->
	<select id="queryGoodsByForeach2" resultType="Goods">
	     select id,goodName,price,num from tb_goods
	     <if test="list.size()>0">
	         where id in
	         <foreach collection="list" item="myid" open="(" close=")" separator=",">
	             #{myid}
	         </foreach>
	     </if>
	</select>
	
	<!--6查詢參數是集合對象 -->
	<select id="queryGoodsByForeach3" resultType="Goods">
	     <include refid="mysql"></include><!--7.1 當查詢語句重複出現時 -->
	     <if test="list.size()>0">
	         where id in
	         <foreach collection="list" item="goods" open="(" close=")" separator=",">
	             #{goods.id}
	         </foreach>
	     </if>	
	</select>
	<!--7 sql片段 當查詢語句重複出現時 -->
	<sql id="mysql">
	   select id,goodName,price,num from tb_goods
	</sql>
</mapper>

工具類Utils.java

public class Utils {
     private static SqlSessionFactory sqlSessionFactory;
     public static SqlSessionFactory getSqlSessionFactory() throws IOException{
    	 InputStream inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
          sqlSessionFactory =
         		new SqlSessionFactoryBuilder().build(inputStream);
          return sqlSessionFactory;
     }
}

測試

public class MybatisTest {
	@Test
	public void queryGoodsByIf() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		Goods goods = new Goods("", 3600, 10);
		List<Goods> goodsList = gm.queryGoodsByIf(goods);
		System.out.println(goodsList);
	}
    //2 where查詢(重點)
	@Test
	public void queryGoodsByWhere() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		Goods goods = new Goods("p", 3600, 10);
		List<Goods> goodsList = gm.queryGoodsByWhere(goods);
		System.out.println(goodsList);
	}
    //3 多分支查詢
	@Test
	public void queryGoodsByChoose() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		Goods goods = new Goods("", 3400, 10);
		List<Goods> goodsList = gm.queryGoodsByChoose(goods);
		System.out.println(goodsList);
	}
    //4 向sql傳遞數組
	@Test
	public void queryGoodsByForeach() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		int ids[] = { 2, 3, 4 };
		List<Goods> goodsList = gm.queryGoodsByForeach(ids);
		System.out.println(goodsList);
	}
    // 5查詢參數是集合
	@Test
	public void queryGoodsByForeach2() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		List<Integer> ids = new ArrayList();
		ids.add(2);
		ids.add(3);
		ids.add(4);
		List<Goods> goodsList = gm.queryGoodsByForeach2(ids);
		System.out.println(goodsList);
	}
    //6查詢參數是集合對象
	@Test
	public void queryGoodsByForeach3() throws IOException {
		SqlSession sqlSession = Utils.getSqlSessionFactory().openSession();
		GoodsMapper gm = sqlSession.getMapper(GoodsMapper.class);
		List<Goods> goods = new ArrayList();
		Goods g1 = new Goods();
		g1.setId(2);
		Goods g2 = new Goods();
		g2.setId(3);
		goods.add(g1);
		goods.add(g2);
		List<Goods> goodsList = gm.queryGoodsByForeach3(goods);
		System.out.println(goodsList);
	}
}

結果

4 查詢參數是數組

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章