model
public class User implements Serializable {
private Integer userId;
private String userName;
private String userAddress;
}
interface
public interface IUserDao {
void saveUser(User user);
}
mybatis.xml
<insert id="saveUser" parameterType="com.itheima.domain.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
resultType 属性:指定结果集的类型
parameterType 属性:指定传入参数的类型
sql 语句中使用#{}字符:占位符,相当于原来 jdbc 部分所学的?
由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。
它用的是 ognl(Object Graphic Navigation Language) 表达式。 语法格式就是使用 #{对象.对象}
的方式
#{user.username}
它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()
方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.
而直接写 username。
测试:
@Test
public void testSave(){
User user = new User();
user.setUsername("modify");
user.setAddress("北京市");
user.setSex("男");
userDao.saveUser(user);
}
拓展:获得新增用户id的返回值
新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相
当于我们要在新增后将自动增长 auto_increment 的值返回。
<insert id="saveUser" parameterType="USER">
<!-- 配置保存时获取插入的 id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>