分页
limit分页:
SELECT * from user limit startIndex,pageSize;
Mybatis分页,基于SQL
1.接口
List<User> getUserByLimit(Map<String, Object> map);
2.mapper
<select id="getUserByLimit" parameterType="map" resultType="user">
select * from user limit #{startIndex},#{pageSize}
</select>
3.测试
@Test
public void getUserLimit() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
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
<select id="getUserByRowBounce" resultType="user">
select * from user
</select>
3.测试使用:
@Test
public void getUserByRowBounceTest() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(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>
<mapper class="com.lms.dao.UserMapper"/>
</mappers>
3.测试
本质:反射机制
底层:动态代理
注解CRUD
借助sqlSession自动提交事务功能,完成注解CRUD
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession(true);
}
public SqlSession openSession(boolean autoCommit) {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}
接着再接口编写过程中添加注解
查询
@Select("select * from user where id = #{id}")
User getUserByID(@Param("id") int id);
注:无论注解、xml中的sql代码语句,当注解Param修饰参数时,#{}内参数名称对应注解内的内容,且当有多个参数时,要么都不加注解,要么都加注解
插入
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
更新
@Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
int updateUser(User user);
删除
@Delete("delete from user where id=#{id}")
int deleteUser(int id);
关于@Param()注解
基本类型参数或String类型需要添加
引用类型不需添加
若只有一个基本类型,可以忽略但推荐添加
#{}类似preparedStatement预编译中的?
${}将直接拼接,无法防止sql注入
Lombok工具
注解解释:
@Data:自动生成无参构造、get、set、toString、hashcode、equals
@AllArgsConstructor:全参构造
@NoArgsConstructor:无参构造
@ToString
@EqualsAndHashcode
@Getter:可修饰类或成员
@Setter:可修饰类或成员
在实体类上加注解可以自动生成对应内容。