分页
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:可修饰类或成员
在实体类上加注解可以自动生成对应内容。