mybatis学习(24):分页2 多参数传递(使用注解)

简介: mybatis学习(24):分页2 多参数传递(使用注解)

image.png

image.png

com.geyao.mybatis.mapper

BlogMapper类

package com.geyao.mybatis.mapper;

 

import java.util.List;

 

import org.apache.ibatis.annotations.Param;

 

import com.geyao.mybatis.pojo.Blog;

 

public interface BlogMapper {

   Blog selectBlog(Integer id);

 

   Blog selectBlog2(Integer id);

 

   List<Blog> selectBlogByTitle(String title);

 

   List<Blog> selectBlogByTitle2(String title);

 

   List<Blog> selectBlogBySort(String column);

 

   List<Blog> selectBlogByPage(int offset,int pagesize);

 

   List<Blog> selectBlogByPage1(@Param(value="offset")int offset,@Param(value="pagesize")int pagesize);

}

BlogMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的

例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)

-->

<mapper namespace="com.geyao.mybatis.mapper.BlogMapper">

   <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复

   使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型

   resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回

   User类就是users表所对应的实体类

   -->

   <!--  

       根据id查询得到一个user对象

    -->

    <resultMap type="Blog" id="blogResultMap">

    <id column="id" property="id" jdbcType="INTEGER"></id>

        <result column="authod_id" property="authodId" jdbcType="INTEGER"/>

    </resultMap>

   

   <select id="selectBlog" parameterType="int"   resultType="Blog">

       select  

       id,

       title,

       authod_id as authodId,

       state,

       featured,

       style

        from Blog where id=#{id}

   </select>  

 

   <select id="selectBlog2" parameterType="int"  resultMap="blogResultMap">

         select *

        from Blog where id=#{id}

   </select>

 

   <select id="selectBlogByTitle" parameterType="String" resultMap="blogResultMap">

       select * from Blog where title like #{title}

   </select>

 

   <select id="selectBlogByTitle2" parameterType="String" resultMap="blogResultMap">

       select * from Blog where title like '${value}'

   </select>

 

    <select id="selectBlogBySort" parameterType="String" resultMap="blogResultMap">

       select * from Blog order by ${value}

   </select>

 

     <select id="selectBlogByPage"  resultMap="blogResultMap">

       select * from Blog limit #{0},#{1}

   </select>

 

    <select id="selectBlogByPage1"  resultMap="blogResultMap">

       select * from Blog limit #{offset},#{pagesize}

   </select>

</mapper>

com.geyao.mybatis.pojo

Blog类

package com.geyao.mybatis.pojo;

 

public class Blog {

   private Integer id;

   private String title;

   private int authodId;

   private String state;

   private Boolean featured;

   private String style;

   public Integer getId() {

       return id;

   }

   public void setId(Integer id) {

       this.id = id;

   }

   public String getTitle() {

       return title;

   }

   public void setTitle(String title) {

       this.title = title;

   }

 

   public int getAuthodId() {

       return authodId;

   }

   public void setAuthodId(int authodId) {

       this.authodId = authodId;

   }

   public String getState() {

       return state;

   }

   public void setState(String state) {

       this.state = state;

   }

   public Boolean getFeatured() {

       return featured;

   }

   public void setFeatured(Boolean featured) {

       this.featured = featured;

   }

   public String getStyle() {

       return style;

   }

   public void setStyle(String style) {

       this.style = style;

   }

   @Override

   public String toString() {

       return "Blog [id=" + id + ", title=" + title + ", authodId=" + authodId + ", state=" + state + ", featured="

               + featured + ", style=" + style + "]\n";

   }

 

 

 

 

}

com.geyao.mybatis.util

MybatisUtil类

package com.geyao.mybatis.util;

 

import java.io.InputStream;

import java.io.Reader;

 

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

 

public class MyBatisUtil {

   private static SqlSessionFactory sqlSessionFactory =null;

   static {

       try {

           InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

           sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

   }

   private MyBatisUtil() {}

 

   public static SqlSession getSqlSession() {

       return sqlSessionFactory.openSession();

   }

}

log4j.properties

### \u914D\u7F6E\u6839 ###

log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE

 

### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176\u4E2Dlogger\u540E\u9762\u7684\u5185\u5BB9\u5168\u90E8\u4E3Ajar\u5305\u4E2D\u6240\u5305\u542B\u7684\u5305\u540D ###

log4j.logger.org.apache=dubug

log4j.logger.java.sql.Connection=dubug

log4j.logger.java.sql.Statement=dubug

log4j.logger.java.sql.PreparedStatement=dubug

log4j.logger.java.sql.ResultSet=dubug

 

### \u914D\u7F6E\u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.Target = System.out

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

 

<typeAliases>

   <typeAlias type="com.geyao.mybatis.pojo.Blog" alias="Blog"/>

</typeAliases>

   <environments default="development">

       <environment id="development">

           <transactionManager type="JDBC" />

           <!-- 配置数据库连接信息 -->

           <dataSource type="POOLED">

               <property name="driver" value="com.mysql.cj.jdbc.Driver" />

               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8" />

               <property name="username" value="root" />

               <property name="password" value="123" />

           </dataSource>

       </environment>

   </environments>

     <mappers>

       <!-- 注册userMapper.xml文件,  

        userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->

        <mapper resource="com/geyao/mybatis/mapper/BlogMapper.xml"/>

    </mappers>

</configuration>

单元测试

com.geyao.mybatis.util

testSelectBlog类

package com.geyao.mybatis.mapper;

 

import java.util.List;

 

import org.apache.ibatis.session.SqlSession;

import org.junit.Test;

 

import com.geyao.mybatis.pojo.Blog;

import com.geyao.mybatis.util.MyBatisUtil;

 

public class testSelectBlog {

   @Test

   public void testSelectBlogNoInterface() {

       SqlSession session =MyBatisUtil.getSqlSession();

       Blog blog =(Blog)session.selectOne("com.geyao.mybatis.mapper.BlogMapper.selectBlog", 101);

     

       session.close();

       System.out.println(blog);

   }

@Test

public void testSelectBlog() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   Blog blog = blogMapper.selectBlog(1);

   System.out.println(blog);

}

 

@Test

public void testSelectBlog2() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   Blog blog = blogMapper.selectBlog2(1);

   System.out.println(blog);

}

@Test

public void testselectBlogByTitle() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   List<Blog> blogList = blogMapper.selectBlogByTitle("%g%");

   System.out.println(blogList);

}

 

@Test

public void testselectBlogByTitle2() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   List<Blog> blogList = blogMapper.selectBlogByTitle2("%g%");

   System.out.println(blogList);

}

@Test

public void testselectBlogBySort() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   List<Blog> blogList = blogMapper.selectBlogBySort("title");

   System.out.println(blogList);

}

@Test

public void testselectBlogByPage() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   List<Blog> blogList = blogMapper.selectBlogByPage(2,2);

   System.out.println(blogList);

}

@Test

public void testselectBlogByPage1() {

   SqlSession session =MyBatisUtil.getSqlSession();

   BlogMapper blogMapper =session.getMapper(BlogMapper.class);

 

   List<Blog> blogList = blogMapper.selectBlogByPage1(2,2);

   System.out.println(blogList);

}

}

jar包

链接:https://pan.baidu.com/s/1g6NgzfLc5uK9S4VL-03lHg

提取码:4r2m

运行结果

image.png

相关文章
|
8月前
|
SQL XML Java
Mybatis基础使用知识(注解)
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
543 0
|
9月前
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
322 4
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
193 0
|
11月前
|
SQL XML Java
MyBatis注解的运用于条件搜索实践
通过上述的实践,我们可以看出MyBatis注解不仅能够实现条件搜索的需求,还能够提供灵活而强大的SQL构造能力,极大地简化了代码的复杂度,提高了开发效率。在实际的项目开发中,结合实际的业务需求合理选择MyBatis的配置方式(注解或XML),能够让数据持久层代码变得更加清晰和易维护。
195 11
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
1063 15
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
550 11
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
292 4
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1136 0
|
12月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1624 1
Spring boot 使用mybatis generator 自动生成代码插件
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
807 2