Mybatis中注解的使用
声明:本文章属于学习笔记,根据狂神说的Mybatis编写
Mybatis在线文档:https://mybatis.org/mybatis-3/zh/index.html
一丶理解面向接口编程;
首先我们应该清楚地一点,什么面向接口编程?
我们看看秦疆老师怎么说:
在这里老师举个很简单的例子:就是一个构架师,假如让不同的人实现不同的功能,那么他其实就会定义一些接口,我们只需要将这些功能按着接口的功能实现,这也就是接口的一些好处。
二丶使用注解开发
因为我们用注解来进行数据库的操作,所以我们可以省去UserMapper.xml文件,我们只需在接口上面表明注解即可:
mybatis-config.xml文件的增加配置:绑定接口
测试类测试:
publicclassUserDaoTest{static Logger logger= Logger.getLogger(UserDaoTest.class);@Testpublicvoidtset1(){
SqlSession sqlSession= MybatisUtils.getSqlSession();
logger.info("打入地方内部");
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
List<User> use= mapper.getUse();for(User user: use){
System.out.println(user);}
sqlSession.close();}}
运行结果:我们可以看到我们的查询确实查询到了,但是pwd却为null,这是因为数据库的字段名和实体类的字段名不一致导致的,但是我们有删除的UserMapper.xml文件,不能配置resultmap映射。所以我们是改变不了的,那么也就是说,当我们在处理简单的sql的语句时我们可以使用注解开发,但是当我们处理一些复杂的sql的时候,我们还是要用mapper文件。
三丶使用注解进行curd:
1丶根据id查询
:
接口创建:
@Select("select * from user where id=#{id}")
UsergetUserByid(@Param("id")int id);
测试类测试:
@Testpublicvoidtest2(){
SqlSession sqlSession= MybatisUtils.getSqlSession();
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
User userByid= mapper.getUserByid(1);
System.out.println(userByid);
sqlSession.close();}
运行结果:
在这里我想说的是,虽然我们查询成功但是我们还是有一个问题,就是根据id查询是注解中的id ,还是接口中的参数的id。
修改后的接口抽象方法:
@Select("select * from user where id=#{id}")
UsergetUserByid(@Param("kdyid")int id);
运行结果:
我们可以看到其实就是这个id是根据注解中的id去查询:
@Select(“select * from user where id=#{id}”)
中的#{id}是和@Param(“id”) 中的id对应的。
所以反过来看我们以前配置的UserMapper.xml文件,当我们注解中的为kdyid那么我们的UserMapper.xml文件中的sql语句在where后面的的查询就一定是#{kdyid}。否则就会报错。
UsergetUserById(@Param("kdyid")int id);
运行结果:
我们如果都将其改回为id:
这样才可以查询的到。
2丶添加数据:
接口的创建:
@Insert("insert into user(id,name,password)values(#{id},#{name},#{pwd})")intadduser(User user);
测试类测试:
publicvoidtest2(){
SqlSession sqlSession= MybatisUtils.getSqlSession();
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
mapper.adduser(newUser(6,"kdy66","159814"));
sqlSession.close();}
运行结果:
3丶更新数据:
接口:
@Update("update user set name=#{name},password=#{password} where id=#{id}")intupdateuser(User user);
测试类测试:
@Testpublicvoidtest2(){
SqlSession sqlSession= MybatisUtils.getSqlSession();
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
mapper.updateuser(newUser(5,"kdy55","159814"));
sqlSession.close();}
运行结果:
4丶删除数据
接口:
@Delete("delete from user where id=#{id}")intdeleteuser(User user);
测试类测试:
@Testpublicvoidtest2(){
SqlSession sqlSession= MybatisUtils.getSqlSession();
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
mapper.deleteuser(newUser(5,"kdy55","159814"));
sqlSession.close();}
运行结果:
另外: