Mybatis学习笔记二
基于代理Dao实现CRUD操作
学习前提:
- 持久层接口和持久层接口的映射配置必须在相同的包下
- 持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名
- SQL 语句的配置标签,,,的 id 属性必须和持久层接口的
方法名相同。 - 环境搭建可参照我的上一篇博客Mybatis学习笔记一
根据ID查询用户方法
1.在持久层接口中添加findById方法
/**
* 根据id查询
* @param userId
* @return
*/
User findById(Integer userId);
2.在用户的映射文件中配置
<!-- 根据id查询用户-->
<select id="findById" parameterType="INT" resultType="com.mybatis.domain.User">
select * from user where id = #{uid}
</select>
<!--
resultType 属性:
用于指定结果集的类型。
parameterType 属性:
用于指定传入参数的类型。
sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。
具体的数据是由#{}里面的内容决定的。
#{}中内容的写法:
由于数据类型是基本类型,所以此处可以随意写。
-->
3.编写测试类(测试类初始化配置参照上条博客)
@Test
public void testFindOne(){
User user = userDao.findById(49);
System.out.println(user);
}
新增用户方法
1.在持久层接口中添加saveUser方法
/**
* 新增用户
* @param user
*/
void saveUser(User user);
2.在用户的映射文件中配置
<insert id="saveUser" parameterType="com.mybatis.domain.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
<!-- 同时取到用户新增后的ID -->
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday)value(#{username},#{address},#{sex},#{birthday})
</insert>
3.编写测试类
@Test
public void testSave(){
User user = new User();
user.setUsername("gaoyk");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
System.out.println("保存操作之前:"+user);
//5.执行保存方法
userDao.saveUser(user);
System.out.println("保存操作之后:"+user);
}
更新用户方法
1.在持久层接口中添加updateUser方法
/**
* 更新用户
* @param user
*/
void updateUser(User user);
2.在用户的映射文件中配置
<update id="updateUser" parameterType="com.mybatis.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
</update>
3.编写测试类
*/
@Test
public void testUpdate(){
User user = new User();
user.setId(49);
user.setUsername("更新后用户");
user.setAddress("北京市顺义区");
user.setSex("女");
user.setBirthday(new Date());
userDao.updateUser(user);
}
根据ID删除用户方法
1.在持久层接口中添加deleteUser方法
/**
* 根据id删除用户
* @param userId
*/
void deleteUser(Integer userId);
2.在用户的映射文件中配置
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{uid}
</delete>
3.编写测试类
@Test
public void testDelete(){
userDao.deleteUser(48);
}
查询所有用户方法
1.在持久层接口中添加findAll方法
/**
* 查询所有用户方法
* @return
*/
List<User> findAll();
2.在用户的映射文件中配置
<select id="findAll" resultType="com.mybatis.domain.User">
select * from user
</select>
3.编写测试类
@Test
public void testFindAll(){
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
模糊查询用户方法
1.在持久层接口中添加findByName方法
/**
* 模糊查询用户
* @param username
* @return
*/
List<User> findByName(String username);
2.在用户的映射文件中配置
<select id="findByName" parameterType="string" resultType="com.mybatis.domain.User">
select * from user where username like #{name}
</select>
3.编写测试类
@Test
public void testFindByName(){
List<User> users = userDao.findByName("%王%");
for(User user : users){
System.out.println(user);
}
}
查询用户总数方法
1.在持久层接口中添加findTotal方法
/**
* 返回用户总数
* @return
*/
int findTotal();
2.在用户的映射文件中配置
<select id="findTotal" resultType="int">
select count(id) from user;
</select>
3.编写测试类
@Test
public void testFindTotal(){
int count = userDao.findTotal();
System.out.println(count);
}
本篇博客就讲解到这里,如果发现任何问题或产生疑问请直接指出
参考教程:[黑马教育]