目錄
mybatis的全局配置文件--sqlMapConfig.xml
列;動態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 查詢參數是數組