MyBatis使用注解开发

一·@Select,@Insert,@Delete,@Update注解

不再需要userMapper的xml映射,直接在接口中的方法上加上注解即可,但还需要在核心配置文件中配置mapper,只能用类class导入。

 <mapper class="com.he.dao.userDao.UserMapper"></mapper>

接口方法:

增删改查:

public interface UserMapper {

    @Select("select * from user where id = #{id}")
    User getUserByID(int id);//只有一个参数不需要@Param()注解

    @Select("select * from user limit #{start},#{size}")
    List<User> getUserByLimit(@Param("start")int start,@Param("size")int size);//两个参数必须要写@Param()注解,
    // sql语句取得值为@Param()注解里的值,与参数名无关。

    @Insert("insert into user values(#{id},#{username},#{password})")
    int addUser(User user);//引用类型不需要写@Param()注解

    @Delete("delete from user where id=#{uid}")
    int deleteUserById(@Param("uid")int id);
}

直接在接口方法上写对应的注解,里面直接编写sql语句。如果方法只需要传一个参数或者引用类型,则可以不屑@Param(),如果是两个或多个,则必须要写@Param(),

注意:sql语句#{ }中取的值为@Param( )中的字段,与方法名无关。

设置事务自动提交:

public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }
    //运用重载方法,设置事务自动提交为true

测试:

//查
 @Test
    public void getUserById(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserByID(2);
        //User{id=2, username='李四', password='null'} 查询结果,无法处理数据库字段与实体类属性名称不对应的问题。
        System.out.println(user);

        sqlSession.close();
    }

    @Test
    public void getUserByLimit(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUserByLimit(1, 3);
        for (User user : users) {
            System.out.println(user);
        }

        sqlSession.close();
    }

//增
    @Test
    public void addUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User(6,"狂神","168211"));

        sqlSession.close();
    }

//删

    @Test
    public void deleteUserById(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUserById(2);

        sqlSession.close();
    }

使用注解的缺点是无法解决数据库字段和实体类属性名称不一致的问题,如果使用xml配置文件,则可以使用resultMap解决,开发中,尽量使用xml配置,如果sql足够简单,可以考虑使用注解。

二·lombok

lomobok是用来对类自动填充方法的,特别是对pojo中的实体类,在类上增加注解,即可自动添加getter and setter 方法等。

使用步骤:

1.先在idea中安装lombok插件

2.导入jar包

   <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>

3.在类上增加注解

有以下注解:

@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
experimental @var
@UtilityClass

一般只使用三个:

使用@AllArgsConstructor会覆盖@Data的无参构造,所以再需要一个无参构造@NoArgsConstructor 

如果需要自定义参数的构造参数,则自行补充。

@Data                  //添加getter and setter 无参构造 toString equals 等
@AllArgsConstructor    //全参构造
@NoArgsConstructor     //无参构造
public class Student {
    private String Sno;
    private String Sname;
    private String Sgender;
    private Timestamp SBirth;
    private String Sdept;
    private int Sage;
}

lombok大大减少了代码的量,减少的编写实体类的量,但减少了代码的可阅读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值