【mybatis】——动态sql

来源:互联网 发布:mac dosbox debug.exe 编辑:程序博客网 时间:2024/06/04 18:35

什么是动态sql

mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

MyBatis的强大特性之一便是它的动态 SQL 能力。

通常使用动态 SQL不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意映射的 SQL 语句中。

<!-- 用户信息综合查询#{userCustom.sex}:取出pojo包装对象中性别值${userCustom.username}:取出pojo包装对象中用户名称 --><select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">SELECT * FROM USER<!-- where可以自动去掉条件中的第一个and --><where><!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace --><include refid="query_user_where"></include><!-- 在这里还要引用其它的sql片段  --></where>

测试代码:

//用户信息的综合 查询@Testpublic void testFindUserList() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//创建UserMapper对象,mybatis自动生成mapper代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//创建包装对象,设置查询条件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();//由于这里使用动态sql,如果不设置某个值,条件不会拼接在sql中//userCustom.setSex("1");userCustom.setUsername("小明");//传入多个idList<Integer> ids = new ArrayList<Integer>();ids.add(1);ids.add(10);ids.add(16);//将ids通过userQueryVo传入statement中userQueryVo.setIds(ids);userQueryVo.setUserCustom(userCustom);//调用userMapper的方法List<UserCustom> list = userMapper.findUserList(userQueryVo);System.out.println(list);}