最全面的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: 无参构造


使用方法:


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

相关文章
|
12天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
21天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
29天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
117 3
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
354 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
4月前
|
XML 缓存 Java
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
文章提供了一份详尽的Mybatis使用教程,涵盖了Mybatis的简介、环境搭建、基本操作、配置解析、日志使用、分页、注解开发、多对一和一对多关系处理、动态SQL以及缓存机制等方面的内容,并提供了相应的代码示例和测试用例。
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
202 0
|
4月前
|
Java 关系型数据库 MySQL
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
|
7月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程
|
7月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
108 0
下一篇
无影云桌面