CRUD
我们继续在原来的项目上进行真假增删改查的功能。
我们知道要增加这些功能只需要在原有的UserMapper接口中声明方法和在配置类中实现。
那么此时我们在UserMapper中添加一下几个方法:
- getUserById
- update
- insert
- delete
那么我们的UserMapper将会变成:
public interface UserMapper {
/**
* 获取全部用户
*
* @return 含全部用户的列表
*/
List<User> getUserList();
/**
* 获取用户通过用户ID
*
* @return 特定用户
*/
User getUserById();
/**
* 更新用户信息
*
* @param user 用户实例
* @return 更新是否成功
*/
int update(User user);
/**
* 拆入一个新用户
*
* @param user 用户实例
* @return 插入是否成功
*/
int insert(User user);
/**
* 删除一个用户
*
* @param id 用户id
* @return 删除是否成功
*/
int delete(int id);
}
接下来我们只需要去编写配置文件 UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.arctic.dao.UserMapper">
<select id="getUserList" resultType="com.arctic.pojo.User">
select *
from mybatis.user;
</select>
<select id="getUserById" resultType="com.arctic.pojo.User" parameterType="int">
select *
from mybatis.user
where id = #{id};
</select>
<update id="update" parameterType="com.arctic.pojo.User">
update mybatis.user
set name = #{name},
pwd = #{pwd}
where id = #{id};
</update>
<insert id="insert" parameterType="com.arctic.pojo.User">
insert into mybatis.user (id, name, pwd)
values (#{id}, #{name}, #{pwd});
</insert>
<delete id="delete" parameterType="int">
delete
from mybatis.user
where id = #{id};
</delete>
</mapper>
编写配置文件时,函数传入的参数值,和实体类具体的值都可以通过#{}取得
编写测试类:
public class UserMapperTest {
@Test
public void getUserListTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.getUserList();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserByIdTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void updateTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int res = userMapper.update(new User(1,"ArcticTest","UpdateTest"));
if (res > 0 ){
System.out.println("更新成功");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void insertTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int res = userMapper.insert(new User(5,"InsertTest","test"));
if (res > 0 ){
System.out.println("插入成功");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int res = userMapper.delete(5);
if (res > 0 ){
System.out.println("删除成功");
}
sqlSession.commit();
sqlSession.close();
}
}
我们要注意:增删改属于事务需要提交 sqlSession.commit
测试结果:
CRUD中巧妙的方法 (但是不适合调试)
使用map作为参数时,MyBatis会自动取值,这样针对数据库表字段较多的情况或者参数过多我们就可以考虑使用map作为参数。
在UserMapper中添加一个方法。
/**
* 更新用户
*
* @param map map参数
* @return 更新是否成功
*/
int updateUser(Map<String,Object> map);
编写配置xml:
<update id="updateUser" parameterType="map">
update mybatis.user
set name = #{username}
where id = #{id};
</update>
编写测试类,注意Map的应用:
@Test
public void updateUserTest(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("username","TestMap");
map.put("id",4);
int res = userMapper.updateUser(map);
if (res > 0 ){
System.out.println("更新成功");
}
sqlSession.commit();
sqlSession.close();
}
}
这里要注意map中的键值对要和配置类中的名相同。
模糊查询
-
Java代码执行的时候,传递通配符 % %
List<User> userList = mapper.getUserLike("%李%");
-
在sql拼接中使用通配符!
select * from mybatis.user where name like "%"#{value}"%"