Mybatis最强大的特性之一就是它的动态语句功能。中文文档中这部分写的很全,可以参考文档学习。
动态sql根据不同的查询条件,生成不同的sql语句
举个简单的例子:
Mapper文件
<mapper namespace="cn.sxt.entity.UserMapper">
<select id="getUserByCondition" parameterType="Map" resultType="User">
select * from User
<where>
<if test="name!=null">
name like concat('%',#{name},'%')
</if>
</where>
</select>
</mapper>
当name为null时where不会加上去,concat是mysql的拼接字符串的函数
Dao
public List<User> getUser(Map<String,Object> map) throws IOException{
SqlSession sqlSession=MyBatisUtil.getSqlSession();
List<User> list= sqlSession.selectList("cn.sxt.entity.UserMapper.getUserByCondition",map);
sqlSession.close();
return list;
}
使用
public static void main(String[] args) throws IOException {
UserDao userDao=new UserDao();
Map<String,Object> map=new HashMap<String,Object>();
map.put("name", "张");
List<User> list=userDao.getUser(map);
for(User u:list){
System.out.println(u);
}
}