Mybatis中注解的使用
声明:本文章属于学习笔记,根据狂神说的Mybatis编写
Mybatis在线文档:https://mybatis.org/mybatis-3/zh/index.html
一丶理解面向接口编程;
首先我们应该清楚地一点,什么面向接口编程?
我们看看秦疆老师怎么说:
在这里老师举个很简单的例子:就是一个构架师,假如让不同的人实现不同的功能,那么他其实就会定义一些接口,我们只需要将这些功能按着接口的功能实现,这也就是接口的一些好处。
二丶使用注解开发
因为我们用注解来进行数据库的操作,所以我们可以省去UserMapper.xml文件,我们只需在接口上面表明注解即可:
mybatis-config.xml文件的增加配置:绑定接口
测试类测试:
public class UserDaoTest {
static Logger logger = Logger.getLogger(UserDaoTest.class);
@Test
public void tset1(){
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}")
User getUserByid(@Param("id") int id);
测试类测试:
@Test
public void test2(){
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}")
User getUserByid(@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}。否则就会报错。
User getUserById(@Param("kdyid") int id);
运行结果:
我们如果都将其改回为id:
这样才可以查询的到。
2丶添加数据:
接口的创建:
@Insert("insert into user(id,name,password)values(#{id},#{name},#{pwd})")
int adduser(User user);
测试类测试:
public void test2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.adduser(new User(6, "kdy66", "159814"));
sqlSession.close();
}
运行结果:
3丶更新数据:
接口:
@Update("update user set name=#{name},password=#{password} where id=#{id}")
int updateuser(User user);
测试类测试:
@Test
public void test2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateuser(new User(5,"kdy55","159814"));
sqlSession.close();
}
运行结果:
4丶删除数据
接口:
@Delete("delete from user where id=#{id}")
int deleteuser(User user);
测试类测试:
@Test
public void test2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteuser(new User(5,"kdy55","159814"));
sqlSession.close();
}
运行结果:
另外: