<!--模糊查询的百分号操作由函数提供--> <selectid="findByName"parameterType="String"resultType="top.tyzhang.domain.User"> select * from userm where username like #{name} <!--select * from userm where username like '%${value}%' 其中value是固定名称,了解不推荐--> </select>
1 2 3 4 5 6
@Test publicvoidtestFindName(){ List<User> users=userDao.findByName("%王%"); for (User user:users) System.out.println(user); }
使用value法时,SQL执行的语句为select * from userm where username like '%王%',即字符串的拼接。而使用name法时,SQL执行的语句为select * from userm where username like ?,参数为%王%(String),即使用的PreparedStatement的参数占位符,更好一些。
查询总数
1
intfindTotal();
1 2 3
<selectid="findTotal"resultType="int"> select count(id) from userm </select>
参数深入
parameterType(输入类型)
传递简单类型
传递pojo对象
使用orgl表达式解析对象字段的值,#{}或${}括号中的值为pojo属性名称,上述即为示例。
传递pojo包装对象,利用一个对象的多个属性查询单个或多个对象。
创建接口
1
List<User> findUserByVo(QueryVo vo);
创建QueryVo实体对象
1 2 3 4 5 6 7 8 9
publicclassQueryVo { private User user; public User getUser() { return user; } publicvoidsetUser(User user) { this.user = user; } }
配置xml
1 2 3 4
<selectid="findUserByVo"parameterType="top.tyzhang.domain.QueryVo"resultType="top.tyzhang.domain.User"> <!--使用QueryVo中的user的username属性--> select * from userm where username like #{user.username} </select>
测试
1 2 3 4 5 6 7 8 9 10
@Test publicvoidtestFindVo(){ QueryVovo=newQueryVo(); User user=newUser(); user.setUsername("%王%"); vo.setUser(user); List<User> users=userDao.findUserByVo(vo); for (User userq:users) System.out.println(userq); }
<!--配置查询所有 其中id不能乱写必须是dao接口中的方法 resultType写的是实体类的全路径--> <selectid="findAll"resultType="top.tyzhang.domain.User"> <!--实体类中的属性名和数据库表中元素名字匹配不上时,使用别名即可匹配。id为数据库中表的列名,userId为实体类中属性名--> select id as userId,username as userName,address as userAddress ,sex as userSex, birthday as userBirthday from user </select>
配置查询结果中的列名
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<!--配置查询结果的列名和实体类的属性名的对应关系--> <resultMapid="userMap"type="top.tyzhang.domain.User"> <!--主键字段的对应--> <idproperty="userId"column="id"></id> <!--非主键字段的对应--> <resultproperty="userName"column="username"></result> <resultproperty="userAddress"column="address"></result> <resultproperty="userSex"column="sex"></result> <resultproperty="userBirthday"column="bithday"></result> </resultMap> <!--再在查询的sql语句的xml中加入配置--> <selectid="findAll"resultMap="userMap"> select * from user </select>