六、使用注解开发



一、CRUD 注解(舍弃 mapper.xml): @Select @Insert @Update @Delete @Param

       通过注解去处理映射,省略 mapper.xml ,直接用注解代替,这样可以使代码更加简洁。
       但是需要注意,一些简单映射可以使用 ibtis 包下的 SQL 注解还好,但是如果是复杂映射的话,使用注解反而不好处理。
比如,字段:user_id ,实体类:userId,这种不一致的状况处理起来便很麻烦,所以写 SQL 时候最好还是使用 XML 去完成。
  • 使用 CRUD 注解,省略XML文件,直接在接口的抽象方法上通过CRUD注解编写SQL,并在 mybatis-config.xml 核心配置文件中直接配置 mapper 接口

XML 文件

	    <!--绑定接口!-->
	    <mappers>
	        <mapper class="com.demo_03.mapper.IUserMapper" />
	    </mappers>



1、@Select

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Select>标签
        @Select("select * from user")
    	List<User> getUsers();
    
  • 测试类

       @Test
        public void test() throws IOException {
    
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
                List<User> list = mapper.getUser();
                for(User user:list){
                    String info= String.format(
                            "id:%s,用户名:%s,密码:%s,人员创建时间:%s",
                            user.getId(),user.getName(),user.getPwd(),user.getCreateTime() );
                    System.out.println(info);
                }
            }finally{
                sqlSession.close();
            }
        }
    

运行结果:
在这里插入图片描述
可以看出时间字段无法处理,查询不到数据



2、@Insert

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Insert>标签
        @Insert("insert into user (id,name) values(#{id},#{name})")
        int addUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            user.setId(999);
            user.setName("感冒灵");
            int i = mapper.addUser(user);
            qlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



3、@Delete

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Delete>标签
        @Delete("delete from user where id = #{id}")
    	int deleteUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user = new User();
            user.setId(888);
            user.setName("感冒灵");
            int i = mapper.updateUser(user);
            sqlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



4、@Update

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Update>标签
         @Update("update user set id = #{id} where name = #{name}")
         int updateUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user = new User();
            user.setId(888);
            user.setName("感冒灵");
            int i = mapper.updateUser(user);
            sqlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



5、@Param

       @Param 注解是搭配 CRUD 注解使用的。
  • @Param 的作用

    • 便于传递多个参数
    @Select("select * from user where id = #{id} and  name = #{name}")
    List<User> getUser(@Param("id") int id,@Param("name") String name);
    
    • 给传入参数起别名()
    @Select("select * from user where name = #{username}")
    List<User> getUser(@Param("username") String name);
    
  • @Param 的注意事项

    • 只要传入的参数是基本类型或者String类型,就需要加上该注解用来标注参数,引用类型不需要加



二、Lombok 插件,减少重复代码

  • 使用步骤:

    • 在IDEA中安装Lombok插件
    • 在项目pom.xml文件中导入Lombok 依赖
      <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
           <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
    
    • 在实体类上添加相应注解即可


1、@Data

       @data 注解是使用频率最高的注解。
  • @data 注解的作用:
    • 生成无参构造方法
    • 生成 Get 方法
    • 生成 Set 方法
    • 生成 toString 方法
    • 生成 hashCode 方法
    • 生成 equals 方法

加上该注解之后自动生成这些方法,就不需要在编写这部分代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值