五、Mybatis 使用注解开发和Lombok体验
8、使用注解开发
在上面使用的开发流程中,我们都是先在UserMapper中创建接口,然后在对应的xml文件中增加对应的sql语句,然后再写测试方法测试。除了这种方式,Mybatis也推出了注解开发的方式,一定程度上简化了开发的过程,我们来看看吧。
同样的我们复制一份项目,避免已有数据的干扰。
首先需要在MybatisUtils文件中,设置sqlSession自动提交为true.
MybatisUtils.java
//SqlSessionFactory --> sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用Mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = null; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了sqlSessionFactory对象,顾名思义就可以使用它获取sqlSession对象了 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(true); // 这里设置为ture!!! } }
然后我们在UserMapper中创建一个根据id查询用户信息的接口:
//根据id查询用户 @Select("select * from user where id = ${id}") User getUserById(@Param("id") int id);
- 在这里我们看到,在定义的接口上我们增加了@Select(...),这就是mybatis提供的注解方式,不难推断出除了@Select还有@Update,@Delete,@Insert对应着更新,删除和插入操作
- 然后我们看到,@Select后面就是我们需要使用的sql语句,在sql中需要传入的参数方式和在xml配置的方式一样;需要注意的是,在接口的参数中我们使用了@Param,这里的Param可以理解为为参数id设置了一个映射,上面的sql会获取名叫id(param中设置的名称),我们建议为所有的基本类型参数都加上@Param
就这样,我们就可以拿来测试了:
@Test public void TestGetUserById() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); }
可以看到,使用的方式也和之前没有差别,如果是简单的sql语句,用注解的方式就可以省去在xml中配置的步骤。
上面是一个查询的例子,下面贴出来增删改的操作:
UserMapper.java
//添加用户 @Insert("insert into user(id,name,password) values (#{id}, #{name}, #{password})") int addUser(User user); //更新用户 @Update("update user set name=#{name}, password=#{password} where id=#{id}") int updateUser(User user); //删除用户 @Delete("delete from user where id=#{uid}") int delUser(@Param("uid") int id); // 在这里,sql中的参数如果使用#{id}就会提示找不到,以为我们@Param指定了参数是uid
TestUserMapper.java
@Test public void TestAddUser() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(6, "李云龙", "444444"); int i = mapper.addUser(user); if (i>0) { System.out.println("添加用户成功!"); } sqlSession.close(); } @Test public void TestUpdateUser() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(6, "李云虎", "233233"); int i = mapper.updateUser(user); if (i>0) { System.out.println("修改用户成功!"); } sqlSession.close(); } @Test public void TestDelUser() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.delUser(6); if (i>0) { System.out.println("删除用户成功!"); } sqlSession.close(); }
9、Lombok
Lombook是一款方便编写pojo中实体类的getter、setter等方法的插件,通过Lombok的注解可以快速生成。
Lombok官网:https://projectlombok.org
首先我们看pojo/User.java,将User中的getter和setter方法,还有toString方法都删除。
要使用lombok插件,首先当然是引入对应的maven依赖,在pom.xml增加lombok的依赖包:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency>
然后就可以使用啦,我们在实体类User上加上@Data注解,从IDEA左下方的结构中可以看到,lombok帮我们自动生成的很多东西:
生成的方法中包含每个属性的get,set方法,还有equals,hashcode和toString方法,是不是很方便!除了@Data Lombok还提供了很多其他注解@NoArgsConstructor无参构造,@AllArgsConstructor有参构造等等......
虽然lombok可以给我带来很大的便利,但是也有反对的声音:这样的编写方式,会极大的降低代码的阅读性,给新人上手和团队维护带负担(https://blog.csdn.net/jcmj123456/article/details/109194089)总的来说,可以根据自己的情况判断是否使用吧,如果团队中使用了Lombok插件也不用一脸困惑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步