最全面的Mybatis教程,从“开局”到“通关”(二)(上)

简介: 最全面的Mybatis教程,从“开局”到“通关”(二)(上)

七、分页实现


分页(Paging):即有很多数据,我们就需要分页来分割数据,可提高整体运行性能,增强用户使用体验需求等。


不使用分页将遇到的问题:


  • 客户端问题:数据太多影响用户的体验感且也不方便操作查找,甚至出现加载太慢的问题。
  • 服务器问题:数据太多会造成内存溢出,且对服务器的性能也不友好。


1️⃣limit分页


🍀语法


-- 语法:select * from xxx limit startIndex,pageSize
  select * from user limit 3;


mybatis的sql语句如果有多个参数,需要用map封装。

🍀Mapper接口


List<User> selectLimit(Map<String,Integer> map);


🍀xxxMapper.xml

<select id="selectLimit" parameterType="map" resultMap="UserMap">
      select * from mybatis.user limit #{startIndex},#{pageSize}
  </select>


🍀测试

Test.java:

  public class UserDaoTest {
      @Test
      public void limitTest(){
          SqlSession sqlSession = MybatisUtils.getSqlSession();
          UserMapper mapper = sqlSession.getMapper(UserMapper.class);
          Map<String, Integer> map = new HashMap<String, Integer>();
          map.put("startIndex",0);
          map.put("pageSize",2);
          List<User> list=mapper.selectLimit(map);
          for (User u:
               list) {
              System.out.println(u);
          }
          sqlSession.close();
      }
  }

2️⃣RowBounds分页


这种方法官方不推荐。

🍀Mapper接口


List<User> selectRowBounds();


🍀xxxMapper.xml


<select id="selectRowBounds" resultMap="UserMap">
    select * from mybatis.user
</select>


🍀测试

  @Test
  public void selectRowBounds(){
      SqlSession sqlSession = MybatisUtils.getSqlSession();
      RowBounds rowBounds = new RowBounds(0,2);
      List<User> list = sqlSession.selectList("com.wang.dao.UserMapper.selectRowBounds"
      ,null,rowBounds);
      for (User user : list) {
          System.out.println(user);
      }
      sqlSession.close();
  }


八、注解式开发


注解的本质是使用反射,底层是代理模式(见设计模式)。

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL语句更加混乱不堪。

因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。


1️⃣注解式查找


🍀Mapper接口


@Select("select * from mybatis.user")
  List<User> selectAll();


注册绑定

mybatis-config.xml:


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


🍀测试

  @Test
  public void selectAll(){
      SqlSession sqlSession = MybatisUtils.getSqlSession();
      //底层主要应用反射
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      List<User> list=mapper.selectAll();
      for (User user : list) {
          System.out.println(user);
      }
      sqlSession.close();
  }

2️⃣注解式CRUD


🍀设置自动提交

MybatisUtils.java:

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

🍀Mapper接口

  //多个参数情况下,有两种解决方式,一个map封装,另一种是注解Param
  @Select("select * from mybatis.user where id=#{id}")
  User selectUserById(@Param("id") int id);
  @Select("select * from mybatis.user")
  List<User> selectAll();
  @Insert("insert into mybatis.user() values(#{id},#{name},#{password}) ")
  boolean insertUser(User u);
  @Update("update user set name=#{name},pwd=#{password} where id = #{id}")
  boolean updateUser(User u);
  @Delete("delete from mybatis.user where id=#{id}")
  boolean deleteUser(@Param("id") int id);

🍀测试

  @Test
  public void selectAll(){
      SqlSession sqlSession = MybatisUtils.getSqlSession();
      //底层主要应用反射
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      //  List<User> list=mapper.selectAll();
      //  for (User user : list) {
      //      System.out.println(user);
      //  }
      /**
            User u=mapper.selectUserById(1);
            System.out.println(u);
      */
      //  boolean isInserted=mapper.insertUser(new User(4,"图拉真","dgsdgs"));
      //  if (mapper.updateUser(new User(6,"寒江雪",null)))
      if (mapper.deleteUser(6))
      for (User user : mapper.selectAll()) {
          System.out.println(user);
      }
      sqlSession.close();
  }

3️⃣@Param注解


这个注解是为SQL语句中参数赋值而服务的。@Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param(“userId”) int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。


基本类型的参数和String类型,需要加上这个注解


引用类型不需要加


如果只有一个基本类型的参数,可以省略

我们在sql中引用的就是@Param(“xxx”)中设定的属性名

实例一:@Param注解基本类型的参数


🍀Mapper接口


public User selectUser(@Param("userName") String name,@Param("password") String pwd);


🍀xxxMapper.xml

<select id="selectUser" resultMap="User">  
   select * from user  where user_name = #{userName} and user_password=#{password}  
</select>

其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。


实例二:@Param注解JavaBean对象

SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制

public List<User> getAllUser(@Param("user") User u);

🍀xxxMapper.xml

<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">  
        select   
        from user t where 1=1  
             and   t.user_name = #{user.userName}  
             and   t.user_age = #{user.userAge}  
</select> 

注意点:


当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。

当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。

不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。


九、Lombok插件使用


Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。


1️⃣Lombok安装


🍀(1)IDEA左上角File->Settings->Plugins

🍀(2)搜索Lombok,下载安装

🍀(3)导入maven


pom.xml:

<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.10</version>
 </dependency>

2️⃣使用Lombok


Lombok的支持:

  @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
  Lombok config system
  Code inspections
  Refactoring actions (lombok and delombok)

常用支持:


@Data支持: 无参构造,getter&setter,toString,hashCode,equals

@AllArgsConstructor: 有参构造

@NoArgsConstructor: 无参构造


使用方法:


在具体的实体类上加相应的注解。

相关文章
|
5月前
|
XML Java 数据库连接
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
90 0
|
2月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程
|
3月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
|
3月前
|
SQL Java 数据库连接
【MyBatisPlus】通俗易懂 快速入门 详细教程
【MyBatisPlus】通俗易懂 快速入门 详细教程
79 0
|
4月前
|
Java 数据库连接 数据库
Spring Boot整合Mybatis Plus[极简教程]
Spring Boot整合Mybatis Plus[极简教程]
58 0
|
4月前
|
SQL 缓存 Java
Mybatis保姆级丝滑教程(一文搞懂系列)(2)
Mybatis保姆级丝滑教程(一文搞懂系列)
170 0
|
4月前
|
SQL Java 关系型数据库
Mybatis保姆级丝滑教程(一文搞懂系列)(1)
Mybatis保姆级丝滑教程(一文搞懂系列)
206 0
|
5月前
|
SQL JSON 数据库
MyBatis-Plus 实战教程三 拓展插件(二)
MyBatis-Plus 实战教程三 拓展插件
45 0
|
5月前
|
SQL 数据库连接 数据库
MyBatis-Plus 实战教程三 拓展插件(一)
MyBatis-Plus 实战教程三 拓展插件
53 0
|
5月前
MyBatis-Plus 实战教程四 idea插件(二)
MyBatis-Plus 实战教程四 idea插件
57 0