MyBatis分页、注解开发、注解CRUD实现、Lombok

2022-08-27 09:49:57

分页

limit分页:

SELECT*fromuserlimit startIndex,pageSize;

Mybatis分页,基于SQL

1.接口

List<User>getUserByLimit(Map<String,Object> map);

2.mapper

<selectid="getUserByLimit"parameterType="map"resultType="user">
        select * from user limit #{startIndex},#{pageSize}</select>

3.测试

@TestpublicvoidgetUserLimit(){SqlSession sqlSession=MybatisUtils.getSqlSession();UserMapper mapper= sqlSession.getMapper(UserMapper.class);HashMap<String,Object> map=newHashMap<>();
        map.put("startIndex",2);
        map.put("pageSize",2);List<User> userByLimit= mapper.getUserByLimit(map);for(User user: userByLimit){System.out.println(user);}
        sqlSession.close();}

RowBounds分页

不再基于SQL,基于JAVA对象实现
1.接口

List<User>getUserByRowBounce(Map<String,Object> map);

2.mapper

<selectid="getUserByRowBounce"resultType="user">
        select * from user</select>

3.测试使用:

@TestpublicvoidgetUserByRowBounceTest(){SqlSession sqlSession=MybatisUtils.getSqlSession();RowBounds rowBounds=newRowBounds(1,2);List<User> objects= sqlSession.selectList("com.lms.dao.UserMapper.getUserByRowBounce",null, rowBounds);for(User object: objects){System.out.println(object);}

        sqlSession.close();}

注解开发

核心使用反射进行底层实现。
1.注解在接口上实现

@Select("select * from user")List<User>getUsers();

2.核心配置文件绑定

<mappers><mapperclass="com.lms.dao.UserMapper"/></mappers>

3.测试

本质:反射机制
底层:动态代理

注解CRUD

借助sqlSession自动提交事务功能,完成注解CRUD

publicstaticSqlSessiongetSqlSession(){return sqlSessionFactory.openSession(true);}publicSqlSessionopenSession(boolean autoCommit){returnthis.openSessionFromDataSource(this.configuration.getDefaultExecutorType(),(TransactionIsolationLevel)null, autoCommit);}

接着再接口编写过程中添加注解
查询

@Select("select * from user where id = #{id}")UsergetUserByID(@Param("id")int id);

注:无论注解、xml中的sql代码语句,当注解Param修饰参数时,#{}内参数名称对应注解内的内容,且当有多个参数时,要么都不加注解,要么都加注解

插入

@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")intaddUser(User user);

更新

@Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")intupdateUser(User user);

删除

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

关于@Param()注解

基本类型参数或String类型需要添加
引用类型不需添加
若只有一个基本类型,可以忽略但推荐添加

#{}类似preparedStatement预编译中的?
${}将直接拼接,无法防止sql注入

Lombok工具

注解解释:
@Data:自动生成无参构造、get、set、toString、hashcode、equals
@AllArgsConstructor:全参构造
@NoArgsConstructor:无参构造
@ToString
@EqualsAndHashcode
@Getter:可修饰类或成员
@Setter:可修饰类或成员
在实体类上加注解可以自动生成对应内容。

  • 作者:魔幻音
  • 原文链接:https://blog.csdn.net/MagicSound/article/details/124691933
    更新时间:2022-08-27 09:49:57