如何优雅设计mybtis工具类及实现分页查询,动态SQL&mybatis+struts组合使用

总结

这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家

在这里插入图片描述

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

close:结束的 SQL 语句。

item:参数变量名。

separator:分隔符。

–>

select * from t_user

#{id}

  • 测试类

@Test

public void selectByIts() throws IOException {

SqlSession sqlSession = MybatisUtil.openSession();

UserDao mapper = sqlSession.getMapper(UserDao.class);

ArrayList list = new ArrayList<>();

list.add(1);

list.add(3);

list.add(4);

List users = mapper.selectByIds(list);

for (User user : users) {

System.out.println(user);

}

MybatisUtil.close(sqlSession);

}

总结语法:

:循环遍历标签。适用于多个参数或者的关系。

<foreach collection=“”open=“”close=“”item=“”separator=“”>

获取参数

属性

collection:参数容器类型, (list-集合, array-数组)。

open:开始的 SQL 语句。

close:结束的 SQL 语句。

item:参数变量名。

separator:分隔符。

4、 include 实现SQL片段抽取

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的

select * from student

where id=#{id}

#{id}

总结语法:

我们可以将一些重复性的 SQL 语句进行抽取,以达到复用的效果。

:抽取 SQL 语句标签。

:引入 SQL 片段标签。

抽取的 SQL 语句

5、知识小结

MyBatis映射文件配置:

:查询

:插入

:修改

:删除

:where条件

:if判断

:循环

:sql片段抽取

四、分页插件

=========================================================================

1、分页插件介绍

  • 分页可以将很多条结果进行分页显示。

  • 如果当前在第一页,则没有上一页。如果当前在最后一页,则没有下一页。

  • 需要明确当前是第几页,这一页中显示多少条结果。

  • MyBatis分页插件总结

  1. 在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。

  2. PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。

2、分页插件的使用

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据

  • 开发步骤:

①导入与PageHelper的jar包

在这里插入图片描述

jsqlparser-3.1.jar

pagehelper-5.1.10.jar

②在mybatis核心配置文件中配置PageHelper插件

在这里插入图片描述

③测试分页数据获取

public void testPageHelper() throws IOException {

SqlSession sqlSession = MybatisUtil.openSession();

UserDao mapper = sqlSession.getMapper(UserDao.class);

//通过分页助手来实现分页功能

// 第一页:显示3条数据

//PageHelper.startPage(1,3);

// 第二页:显示3条数据

//PageHelper.startPage(2,3);

// 第三页:显示3条数据

PageHelper.startPage(1,2);

//调用实现类的方法,接收结果

List users = mapper.selectUserAll();

// 处理结果

for (User user : users) {

System.out.println(user);

}

//获取分页相关参数

PageInfo info = new PageInfo<>(users);

System.out.println(“总条数”+info.getTotal());

System.out.println(“总页数”+info.getPages());

System.out.println(“当前页面”+info.getPageNum());

System.out.println(“每页显示条数”+info.getPageSize());

System.out.println(“上一页”+info.getPrePage());

System.out.println(“下一页”+info.getNextPage());

System.out.println(“是否是第一页”+info.isIsFirstPage());

System.out.println(“是否是最后一页”+info.isIsLastPage());

MybatisUtil.close(sqlSession);

}

}

3、分页插件的参数获取

//其他分页的数据

PageInfo pageInfo = new PageInfo(select);

System.out.println(“总条数:”+pageInfo.getTotal());

System.out.println(“总页数:”+pageInfo.getPages());

System.out.println(“当前页:”+pageInfo.getPageNum());

System.out.println(“每页显示长度:”+pageInfo.getPageSize());

System.out.println(“是否第一页:”+pageInfo.isIsFirstPage());

System.out.println(“是否最后一页:”+pageInfo.isIsLastPage());

4、分页插件知识小结

分页:可以将很多条结果进行分页显示。

  • 分页插件 jar 包: pagehelper-5.1.10.jar jsqlparser-3.1.jar

  • :集成插件标签。

  • 分页助手相关 API

  1. PageHelper:分页助手功能类。

  2. startPage():设置分页参数

  3. PageInfo:分页相关参数功能类。

  4. getTotal():获取总条数

  5. getPages():获取总页数

  6. getPageNum():获取当前页

  7. getPageSize():获取每页显示条数

  8. getPrePage():获取上一页

  9. getNextPage():获取下一页

  10. isIsFirstPage():获取是否是第一页

  11. isIsLastPage():获取是否是最后一页

五、结果映射ResultMap

==================================================================================

1、简化开发步骤 mapper.xml

2、自动进行ORM映射 前提:表中字段名和实体类中的属性名一致

3、查询优化 缓存Cache

1、Mybatis自动封装(ORM映射)

  • Mybatis自动ORM映射时,表中的字段名和实体类名一致

2、手工实现封装(ORM映射)mapResult

多表–>Mybatis不自动映射,可以匹配对应关系结果映射

作用:用于查询结果和实体类不匹配时,完成列名和属性名对应关系的映射

主键映射用id,其他用result

  • UserDaoImpl.xml实现手工映射(ORM映射)

select *

from t_user;

3、单表起别名实现ORM自动封装【简化操作】

单表操作简化写法,通过列名对应实体属性名

  • 给数据库中表的列名取别名

select id as id1,

username as username1,

password as password1,

age as age1,

birthday as birthday1

from t_user;

五、mybatis+Struts2整合开发

========================================================================================

1、分析框架的特点

2、根据框架特点完成整合

3、开发

1、编码流程

1、建表

2、实体

3、dao接口【Mybatis框架】

4、service接口

5、service实现类

6、action【Struts2框架】

7、jsp

2、Struts2框架+Mybatis框架整合

1、搭建开发环境

1、搭建开发环境

a、引入jar包

struts2 核心jar 三方依赖jar包 Servlet包 jstl jsp 验证码

mybatis 核心jar包 三方依赖jar包 数据库驱动jar包 Junit测试jar包

注意:

(1)jar包存放WEB-INF的lib目录中

(2)jar包冲突 避免相同Jar包出现多次 选择依据:就高不就低

b、引入配置文件

Struts2 核心配置文件 struts.xml 名字固定 位置固定:src下

Mybatis: 核心配置文件 mybatis-config.xml 名字随意 位置随意 建议 src下

日志相关配置文件 log4j.properties 名字随意 位置随意 建议 src下

mapper文件模型 xxxDaoImpl.Xml 名字随意 建议:dao层

数据库链接参数配置文件:jdbc.properties

c、初始化配置 让框架生效

Struts2 Web.xml中核心过滤器配置 拦截所有请求交由Struts2处理

Mybatis 数据库链接配置

  • mybatis+struts2整合开发jar包+环境配置:

gitee文件夹名:mybatis+struts2整合开发jar包环境配置:

https://gitee.com/wanghengjie563135/mybatis_struts2.git

2、编程步骤

1、建表

2、创建实体类

3、实体类起别名

4、创建Dao接口

5、书写Dao接口 书写Dao接口对应的mapper文件

6、注册Mapper 在mybatis-config.xml配置完成mapper文件路径注册

7、测试 用Mybatis中的Dao接口实现

8、创建Service接口

9、实现Service接口 MybatisUtil工具类

10、测试Service 测试业务方法是否正确 创建业务实现对象调用业务方法查看结果

11、Action 接收数据 调用业务 跳转页面

(1)写类 服务方法

(2)在struts.xml中进行配置

12、jsp展示数据 EL表达式+EL标签库

六、案例实战(mybatis+struts2+jsp)

==============================================================================================

注:全部源代码在githee仓库:详细源代码见文章底部

(1)搭建开发环境


1、jar包

2、初始化配置

初始化配置Gitee位置:https://gitee.com/wanghengjie563135/mybatis_struts2.git

1、web.xml
  • struts2核心过滤器配置 拦截所有请求交由Struts2处理

struts

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts

/*

2、struts.xml

/queryAll.jsp

3、mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>

4、UserDaoImpl.xml

select * from t_user;

5、jdbc.properties

driver=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC

username=root

password=root

6、log4j.properties

log4j.rootLogger=DEBUG, stdout

SqlMap logging configuration…

log4j.logger.com.ibatis=DEBUG

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG

log4j.logger.com.ibatis.common.util.StopWatch=DEBUG

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.logger.java.sql.ResultSet=DEBUG

Console output…

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

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

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

(2)编程


1、建表

2、创建实体类

private Integer id;

private String username;

private String password;

private int age;

private Date birthday;

3、实体类起别名

4、创建Dao接口

/**

  • 查询所有

  • @return用户集合

*/

public List selectUserAll();

5、书写Dao接口mapper.xml实现

select * from t_user;

6、注册Mapper mybatis-config.xml中实现

7、创建Service接口

/**

  • 查询所有

  • @return

*/

public List queryAll();

8、实现Service接口

@Override

public List queryAll() {

//调用DAO

UserDao mapper = (UserDao) MybatisUtil.getMapper(UserDao.class);

List users = mapper.selectUserAll();

MybatisUtil.close();

return users;

}

9、测试Service

@Test

public void testSelectAll() throws IOException {

UserDao userDAO = (UserDao) MybatisUtil.getMapper(UserDao.class);

List users = userDAO.selectUserAll();

for (User user : users) {

System.out.println(user);

}

MybatisUtil.close();

}

10、Action 接收数据 调用业务 跳转页面

(1)写类 服务方法

package com.tjcu.action;

import com.opensymphony.xwork2.Action;

import com.tjcu.entity.User;

import com.tjcu.service.UserServiceImpl;

import java.util.List;

/**

  • @author 王恒杰

  • @version 1.0

  • @date 2021/10/13 11:11

  • @email 1078993387@qq.com

  • @Address 天津

  • @Description:

*/

public class UserAction {

//接收数据

/**

  • 替换request作用域传递数据

*/

private List users;

public String execute() throws Exception {

//调用业务

UserServiceImpl userService = new UserServiceImpl();

users = userService.queryAll();

//跳转页面

return Action.SUCCESS;

}

public List getUsers() {

return users;

}

public void setUsers(List users) {

this.users = users;

}

}

(2)在struts.xml中进行配置

/queryAll.jsp

11、jsp展示数据 EL表达式+EL标签库

<%@page contentType=“text/html; UTF-8” pageEncoding=“utf-8” isELIgnored=“false” %>

<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

<%@taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus提供了非常方便的分页查询功能,可以直接使用Page类来进行分页查询使用MyBatis-Plus的分页查询,需要进行以下步骤: 1. 引入MyBatis-Plus的依赖:在pom.xml中添加以下依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> ``` 2. 定义实体类:定义需要进行分页查询的实体类,并使用注解@TableField进行字段映射。 3. 定义Mapper接口:定义Mapper接口,并继承BaseMapper类,继承BaseMapper类后,MyBatis-Plus会自动提供一些基本的CRUD操作。 ``` public interface UserMapper extends BaseMapper<User> {} ``` 4. 分页查询:在Service层中调用分页查询方法,使用Page对象设置分页参数,然后调用selectPage方法进行分页查询。 ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> getUserList(int pageNum, int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); return userMapper.selectPage(page, null); } } ``` 如果需要自定义sql分页,可以在xml中使用MyBatis的分页插件进行分页查询。 1. 引入分页插件:在pom.xml中添加以下依赖: ``` <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency> ``` 2. 配置分页插件:在MyBatis的配置文件中配置分页插件。 ``` <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` 3. 自定义sql分页查询:在xml中使用分页插件的PageHelper.startPage方法进行分页查询。 ``` <select id="getUserList" resultMap="userMap"> select * from user <where> <if test="name != null"> and name like concat('%',#{name},'%') </if> </where> order by id desc </select> ``` ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public PageInfo<User> getUserList(int pageNum, int pageSize, String name) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.getUserList(name); return new PageInfo<>(userList); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值