前面着重介绍了MyBatis的配置以及语句执行的内部逻辑,现在着眼MyBatis的使用上.
在dao接口中添加对应的接口方法
dao接口
/**
* 保存用户信息
* @param user
*/
void saveUser(User user);
xml文件
<insert id="saveUser" parameterType="org.zjb.domain.User">
insert into user (username, address, sex, birthday)
values (#{username}, #{address}, #{sex}, #{birthday});
insert>
注意:由于增删改都涉及表内容的改变,所以执行完这个方法后需要提交事务
提交事务的方法为 sqlSession.commit();
parameterType属性的介绍
由于数据库表中的主键id为自增主键,在进行插入操作时不会传入这个参数,但是可能某些情况下需要在新增后得到这个id,可以使用
dao中的方法我们不需要改变
我们只需要改变配置文件中的内容即可
<insert id="saveUser" parameterType="org.zjb.domain.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
selectKey>
insert into user (username, address, sex, birthday)
values (#{username}, #{address}, #{sex}, #{birthday});
insert>
可以看见我们新增加了
对于标签的属性我们给出解释:
执行完毕之后的值去哪了?
由于上方KeyProperty的指定,所以框架可以将id拿回来后填充回user对象对应的属性之中了
@Test
public void testSave() throws IOException {
User user = new User();
user.setAddress("北京市");
user.setBirthday(new Date());
user.setSex("男");
user.setUsername("王守玉");
System.out.println("保存前的user" + user);
init(); // 这个方法是自己封装的各种对象的创建方法
userDao.saveUser(user);
// 提交事务
session.commit();
destroy(); // 这个方法是自己封装的资源的释放方法
System.out.println("保存后的user" + user);
}
dao中
/**
* 根据id删除用户
* @param userId
*/
void deleteUser(Integer userId);
<delete id="deleteUser" parameterType="Integer">
delete from user where id=#{uid};
delete>
删除用户由于只有一个参数,所以这个参数可以随便写,但是还是建议对应,比较方便代码阅读.
前面介绍过查询所有用户信息,下面介绍一些别的.
/**
* 根据id查询用户信息
* @param userId
* @return
*/
User findById(Integer userId);
<select id="findById" parameterType="Integer" resultType="org.zjb.domain.User">
select * from user where id=#{id};
select>
/**
* 根据名称模糊查询
* @param name
* @return
*/
List<User> findByName(String name);
<select id="findByName" parameterType="String" resultType="org.zjb.domain.User">
select * from user where username like '%${username}%';
select>
模糊查找可以使用 #{username} 的方式,也可以使用 ‘%${username}%’ 的方式
直接在sql中使用聚合函数即可
/**
* 查询总用户数
* @return
*/
int findTotal();
<select id="findTotal" resultType="INT">
select count(id) from user;
select>
没什么好说的,直接上代码
/**
* 更新用户信息
* @param user
*/
void updateUser(User user);
<select id="findTotal" resultType="INT">
select count(id) from user;
select>