MyBatis学习总结第五篇
一、注解开发
使用注解开发,我们就不需要UserMapper.xml映射文件了,在UserMapper接口中使用注解@Select。案例如下:
- 实体类和工具类与之前一样。
- UserMapper接口中定义方法。
//使用注解查询所有用户
@Select("select * from user1")
List<User> getUsers();
- 在mybatis-config.xml配置文件中绑定接口,不需要配置映射文件了。
<!--绑定接口-->
<mappers>
<mapper class="com.dmj.dao.UserMapper"/>
</mappers>
- 编写测试类:
@Test
//查询所有用户
public void test(){
//获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper(推荐使用)
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUsers();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();//关闭
}
-
运行结果:
-
此时,之前设置的别名为null,不能在使用resultMap结果集映射。所以官方文档指出:使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。 总的来说,如果简单就使用,复杂尽量用xml方式来映射SQL语句。
-
注解的本质就是反射机制实现。底层是动态代理。
二、注解增删改查
注意:增删改需要提交事务。如果不在测试类中提交事务,可以在工具类MybatisUtils的获取SqlSession实例中设置为true,默认为false。设置为true,就不用在测试类中提交事务,会自动提交事务。
public static SqlSession getSqlSession(){
//在这里设置为true,以后的增删改就不用提交事务,默认为false
return sqlSessionFactory.openSession(true);
}
2.1查询(通过id)
- UserMapper接口中定义方法:
//通过id查询用户
@Select("select * from user1 where id = #{id}")
User getUserByID(@Param("id") int id);
- 编写测试类:
@Test
//通过id查询用户
public void test1(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userByID = mapper.getUserByID(3);
System.out.println(userByID);
sqlSession.close();
}
- 查询的id=3,运行结果如下:
2.2增加
- UserMapper接口中定义方法:
//添加用户
@Insert("insert into user1 (id,username,pwd,sex,address) values (#{id},#{username},#{pwd},#{sex},#{address})")
int addUser(User user);
- 编写测试类:
@Test
//添加用户
public void test2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4,"孙悟空","123456","男","花果山"));
if (res>0){
System.out.println("添加成功!");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
- 运行结果:
2.3更改
- UserMapper接口中定义方法:
//更改用户
@Update("update user1 set username=#{username},pwd=#{pwd},address=#{address} where id=#{id}")
int updateUser(User user);
- 编写测试类:
@Test
//更改用户
public void test3(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.updateUser(new User(4,"猪八戒","666666","男","高老庄"));
if (res>0){
System.out.println("更改成功!");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
- 运行结果:
2.4删除
- UserMapper接口中定义方法:
//删除用户
@Delete("delete from user1 where id = #{id} ")
int deleteUser(@Param("id") int id);
- 编写测试类:
@Test
//删除用户
public void test4(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.deleteUser(4);
if (res>0){
System.out.println("删除成功!");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
- 运行结果: