上篇已经说到,使用与功能同名的注解可代替SQL代码实现CRUD的功能。因此,使用注解开发配合面向接口编程逐渐变成新的开发趋势。当然现在是 ssm 框架开发,究其本源,仍是如此。
注解和xml配置的区别
注解
优点:编写简单,代码量少
缺点:写到源码中的,如果需要维护修改,必须修改源码
XML
优点:不用修改源码就可以修改配置,可以实时进行配置的更新
缺点:代码比较复杂,结构不如注解清晰。
注意
采用注解开发的时候,在同一个dao下不能有xml文件,就是说要么用注解要么就都用配置文件开发。
- 同一个文件不能同时使用注解和配置文件开发。
- 如果是不同的接口文件,可以使用不同的方法,但工作中不建议这样使用。
- 在注解开发中,如何在插入新的用户后获取用户的自增长ID
因为在增删改查的实现过程中,增删改操作都需要提交事务。因此,可在工具类中配置自动提交事务功能。
public static SqlSession getSqlSession() {
//开启自动提交事务
return sqlSessionFactory.openSession(true);
}
虽然此方式可以免去每次都要调用SqlSession对象的close方法手动关闭SqlSession连接,但还是不推荐的。
关于每个实现功能的注解名,不再过多赘述。详见代码:
接口
//增加一个用户
@Insert("insert into user(id,name,password) values(#{id},#{name},#{password})")
int addUser(User user);
//删除用户
@Delete("delete from user where id = #{id}")
int deleteUserById(int id);
//修改用户
@Update("update user set `name`=#{name}, `password`=#{password} where `id`=#{id}")
int updateUser(User user);
//查询用户(方法存在多个参数时,所有的参数前面必须加上@Param注解)
@Select("select * from user where id = #{id}")
User getUserById(int id);
注意
必须要将接口绑定到核心配置文件中。
测试类
@Test
//增加用户
public void addUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.addUser(new User(6, "西八", "19888592832"));
if (i>0) {
System.out.println("用户插入成功");
}
sqlSession.commit();
sqlSession.close();
}
@Test
//删除用户
public void deleteUserById() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUserById(6);
if (i>0) {
System.out.println("用户删除成功");
}
sqlSession.commit();
sqlSession.close();
}
@Test
//修改用户
public void updateUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.updateUser(new User(6, "西北!!", "wndsb"));
if (i>0) {
System.out.println("修改用户成功");
}
sqlSession.commit();
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();
}