ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

五、Mybatis 使用注解开发和Lombok体验

2021-09-12 22:02:06  阅读:175  来源: 互联网

标签:mapper UserMapper sqlSession user Mybatis 注解 Lombok id User


8、使用注解开发

在上面使用的开发流程中,我们都是先在UserMapper中创建接口,然后在对应的xml文件中增加对应的sql语句,然后再写测试方法测试。除了这种方式,Mybatis也推出了注解开发的方式,一定程度上简化了开发的过程,我们来看看吧。

同样的我们复制一份项目,避免已有数据的干扰。

image-20210829165934118

首先需要在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);
  1. 在这里我们看到,在定义的接口上我们增加了@Select(...),这就是mybatis提供的注解方式,不难推断出除了@Select还有@Update,@Delete,@Insert对应着更新,删除和插入操作
  2. 然后我们看到,@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方法都删除。

image-20210830131837318

要使用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帮我们自动生成的很多东西:

image-20210830132408546

生成的方法中包含每个属性的get,set方法,还有equals,hashcode和toString方法,是不是很方便!除了@Data Lombok还提供了很多其他注解@NoArgsConstructor无参构造,@AllArgsConstructor有参构造等等......

虽然lombok可以给我带来很大的便利,但是也有反对的声音:这样的编写方式,会极大的降低代码的阅读性,给新人上手和团队维护带负担(https://blog.csdn.net/jcmj123456/article/details/109194089)总的来说,可以根据自己的情况判断是否使用吧,如果团队中使用了Lombok插件也不用一脸困惑。

标签:mapper,UserMapper,sqlSession,user,Mybatis,注解,Lombok,id,User
来源: https://www.cnblogs.com/lucaz/p/15260268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有