<!--
resultType :
用于指定结果集的属性
parameterType :
指定传入参数的类型,如果是包装类,要写明具体的包,比如java.lang.Integer
#{}介绍:
表示占位符,相当于原来 jdbc 的‘?’(问号),都是用于执行语句时替换的数据,具体的数据有#{}里面的内容决定
#{}中内容的写法:
ognl 表达式:语法格式就是使用 #{对象.对象}的方式
#{user.id}它会先去找 user 对象,然后在 user 对象中找到 id 属性,并调用 getid()方法把值取出来。
但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user. 而直接写 id
--><selectid="findByUserId"resultType="com.zsc.domain.User"parameterType="int">
select * from user where id = #{id}
</select>
模糊查询
在持久层接口中添加模糊查询方法
List<User>findByName(String username);
在用户的映射配置文件中配置
<!--实现模糊查询,username的值要在调用方法时放在两个%中间--><!--比如说findByName("%王%")--><selectid="findByName"resultType="com.zsc.domain.User"parameterType="String">
select * from user where username like #{username}
</select>
模糊查询的另一种配置方式
<!--${value}的写 法就是固定的,不能写成其它名字--><!--相当于把value拼接到两个%中间--><selectid="findByName"resultType="com.zsc.domain.User"parameterType="String">
select * from user where username like '%${value}%'
</select>
<selectid="findTotal"resultType="int">
select count(*) from user;
</select>
保存
在持久层接口中添加新增方法
intsaveUser(User user);
在用户的映射配置文件中配置
<!--
标签属性和上面的查询一样
--><insertid="saveUser"parameterType="com.zsc.domain.User">
insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
</insert>
问题扩展:新增用户 id 的返回值
<insertid="saveUser"parameterType="com.zsc.domain.User"><!-- 配置保存时获取插入的 id --><selectKeykeyColumn="id"keyProperty="id"resultType="int">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
</insert>
更新
在持久层接口中添加更新方法
intupdateUser(User user);
在用户的映射配置文件中配置
<updateid="updateUser"parameterType="com.zsc.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
删除
在持久层接口中添加删除方法
intdeleteUser(Integer userId);
在用户的映射配置文件中配置
<deleteid="deleteUser"parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>