mybatis-注解实现CRUD
注解可以代替 mapper.xml 映射文件 虽然十分方便,但不适合复杂的操作.
一.在 UserMapper 接口中的方法上添加注解
public interface UserMapper {
@Select("select * from user")
List getUser();
//方法存在多个基本类型参数,所有的参数前面必须加上 @Param("xx")注解,并且参数名以注解指定的为准
@Select("select * from user where id = #{id}")
User getUserById(@Param("id")int id);
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{password} where id=#{id}")
int updateUser(User user);
//方法存在多个基本类型参数,所有的参数前面必须加上 @Param("xx")注解,并且参数名以注解指定的为准
@Delete("delete from user where id = #{uid}")
int deleteUser(@Param("uid")int id);
}
二.在核心配置文件 mybatis-config.xml 中绑定接口
三.测试
public class UserMapperTest {
@Test
public void getUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//底层主要应用了反射
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUser();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(6,"admin6","123456"));
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(6,"cnm","696969"));
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(6);
sqlSession.close();
}
}
注1:增删改可以开启自动提交事务(不建议)
public static SqlSession getSqlSession(){
//参数true : 自动提交事务
return sqlSessionFactory.openSession(true);
}
注2:关于@Param
- 方法的参数是基本数据类型或者 String 时 需要使用@Param注解
- 方法的参数有多个时必须在每个参数前都添加@Param注解,只有一个时可以省略
- 添加注解后,参数名以注解中指定的为准,@Param("xx") xx就是参数名
注3:#{} 和 ${} 的区别
- #{} 相当于是使用了预编译(PrepareStatement) 可以防止 SQL 注入,推荐使用
- ${} 不能防止SQL注入,不推荐使用