Mybatis的分页和注解

Mybatis分页

分页:减少数据的处理量

1.使用limit分页(sql层面)

select * from user limit startPage,pageSize;  #设置分页的规格
select * from user limit n;  #[0,n]调记录

1.接口

2.Mapper.xml

<select id="getUserByLimit" parameterType="map" resultType="User">
    select * from user limit #{startPage},#{pageSize}
</select>

3.测试

@Test
public void getUserByLimit(){
    HashMap<String, Integer> map = new HashMap<>();
    map.put("startPage",0);
    map.put("pageSize",2);
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> user = mapper.getUserByLimit(map);
    sqlSession.commit();
    for (User user1 : user) {
        System.out.println(user1.getId() + " "+ user1.getName());
    }
    sqlSession.close();
}

2.使用RowBounds分页(java层面)

1.接口

2.Mapper.xml

<select id="getUserByRowBounds" resultType="User">
    select *from user;
</select>

3.测试

@Test
void getUserByRowBounds(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    RowBounds rowBounds = new RowBounds(1, 2);
    List<User> userList = sqlSession.selectList("com.Gw.dao.UserMapper.getUserByRowBounds",null,rowBounds);
    for (User user : userList) {
        System.out.println(user.getId()+" "+user.getName() + " " +user.getPassword());
    }
    sqlSession.close();
}

使用注解开发

1.面向接口编程

各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。

1.关于接口的理解。

接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。

接口的本身反映了系统设计人员对系统的抽象理解。

2.任何接口都是在一定的环境中产生的。因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。

底层本质应用反射,底层使用动态代理,将xml中的方法实现注解中,因此只适用于简单的sql语句

1.注解在接口上实现

public interface UserMapper {
    @Select("select * from user")
    List<User> showTable();
}

2.在配置文件中注册该接口

<mappers>
    <mapper class="com.Gw.dao.UserMapper"/>
</mappers>

3.测试代码

@Test
void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.showTable();
    for (User user : userList) {
        System.out.println(user.getId()+" "+user.getName()+" " +user.getPassword());
    }
    sqlSession.close();
}

2.CRUD

可以在工具类创建时实现自动提交事务,将SqlSession设置为true

public static SqlSession getSqlSession(){
    return sqlSessionFactory.openSession(true);
}

编写接口及其对应的注解(注意接口必须在配置中注册)

@Select("select * from user where id = #{id}")
List<User> showTable(@Param("id") int id);

@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(@Param("id") int id, @Param("name") String name, @Param("pwd") String pwd);

@Update("update user set name=#{newName} where id=5")
int updateName(@Param("newName") String newName);

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

测试使用

@Test
void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.addUser(5,"tets","123456");
    mapper.updateName("张三");
    mapper.deleteUserById(5);
    sqlSession.close();
}

3.@Param()注解

  • 基本类型的参数或者String类型需加上
  • 引用类型不需要加
  • 如果只有一个基本类型可以省略
  • 在sql用引用的就是@Param()中的值

Lombok

1.安装插件

2.导入jar包

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>

3.在实体类上加注解

@Getter and @Setter
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@Singular
@Delegate
@Value
@Accessors
@Wither
@SneakyThrows

@Data:无参构造、get和set方法、toString、hashCode、equals

@AllArgsConstructor、@NoArgsConstructor:有参无参构造

package com.Gw.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String password;
}

使用效果:

posted @ 2022-04-21 22:01  CDUT的一只小菜鸡  阅读(254)  评论(0编辑  收藏  举报