总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂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分页插件总结
-
在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。
-
PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。
2、分页插件的使用
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
- 开发步骤:
①导入与PageHelper的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
-
PageHelper:分页助手功能类。
-
startPage():设置分页参数
-
PageInfo:分页相关参数功能类。
-
getTotal():获取总条数
-
getPages():获取总页数
-
getPageNum():获取当前页
-
getPageSize():获取每页显示条数
-
getPrePage():获取上一页
-
getNextPage():获取下一页
-
isIsFirstPage():获取是否是第一页
-
isIsLastPage():获取是否是最后一页
==================================================================================
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;
========================================================================================
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标签库
==============================================================================================
注:全部源代码在githee仓库:详细源代码见文章底部
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
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” %>