目录
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 查询参数是数组