目录
单选题
1.以下关于Maven说法错误的是?( )。
2.在项目的开发过程中,MyBatis承担的责任是( )
3.当项目引用依赖的范围设置为以下( )选项时,表示依赖在编译时是必需的,但在运行时不需要。例如:Servlet API在编译一个Web应用时是必需的,但在运行时Servlet容器(如Tomcat)会提供这个API。
4.下列关于MyBatis描述错误的是哪一项?( )。
5.关于MyBatis的下列说法中错误的是()
6.在下列选项中,经常用来执行数据库更新语句的元素是( )。
7.阅读下图 UserMapper.xml映射文件中的SQL配置,以下说法正确的是( )。
8.有关MyBatis工作原理说法错误的是( )。
9.以下关于元素及其属性说法错误的是( )10.下列选项中,对代码说法有误的是( )。11.当用户选择删除多条数据时,下列MyBatis配置可实现此功能的是( )。12.下列选项中,对于Spring框架说法错误的是( )。13.下列关于Spring Bean的装配说法错误的是( )。14.以下关于面向切面编程说法正确的是( )。15.关于SpringMVC框架说法错误的是( )。16.以下对于@RequestMapping注解说法错误的是()。 17.关于面向切面编程说法正确的是( )18.SpringMVC项目sys中有一个控制器方法,其映射路径为“/emp/list”,部署到本地Tomcat运行时上下文路径设置为“/app”,请问通过下列哪个路径可访问到该控制器方法?( )19.下列选项中,关于Spring框架说法错误的是( )。20.注解( )是用于绑定请求参数为JSON格式的数据。21.在SSM框架整合过程中,当静态资源(如js文件、图片等)无法正常访问时,可以在配置文件中添加( )。22.对于以下异常信息说法正确的是()。23.在基于注解的方式整合SSM框架时,以下对于相关注解说法错误的是( )。24.以下关于Spring事务隔离级别设置说法错误的是( )。25.下列关于@Transactional注解的属性说法正确的是( )。26.阅读以下代码,当支付方法(makePayment)的事务传播行为修改为( )时,使得在支付失败后,只会回滚支付方法的事务而不会回滚订单方法的事务。27.在Maven项目构建时,首先从以下那个仓库中获取Jar包?()28.Maven的生命周期中,哪个阶段会执行打包操作?( )各个阶段说明:29.MyBatis中,用于执行SQL语句的对象是?( )30.MyBatis中,哪个属性用于指定参数类型?( )各个属性的说明:31.MyBatis中,执行复杂查询返回一个对象列表,应使用下述哪个方法?( )32.Spring拦截器链中,如果一个拦截器的preHandle方法返回false,那么后续的拦截器和目标方法会怎样?( )33.MyBatis的标签,用于指定循环开始时添加前缀的属性是哪个?( )34.在MyBatis的标签中,用于指定集合名称的属性是哪个?( )35.Spring AOP中,用于匹配方法执行的切入点表达式是( )36.Spring框架中用于面向切面编程的模块是?( )37.在Spring框架中,控制反转(IoC)的主要目的是什么?( )38.Spring容器初始化时,以下关于组件(Bean)的装配说法错误的是( )39.Spring AOP中,用于匹配方法执行的切入点表达式是?( )40.关于SQL映射配置中的标签的使用,说法错误的是( )41.在Spring MVC框架中,哪个组件负责将请求分发给相应的处理器?()42.在Spring MVC框架中,哪个注解用于指定处理POST请求的方法?( )43.在Spring MVC框架中,哪个注解用于指定处理GET请求的方法?( )44.在SpringMVC控制层,在@Controller注解标记的类上,要使控制器方法能返回Json数据,需要添加的注解是?( )45.SpringMVC中,可以使用哪个对象向视图层传递数据( )46.在SpringMVC中,用于处理请求的方法参数可绑定前端传来的数据,下列哪个注解可以用来绑定请求参数?( )47.SpringMVC中,使用哪个对象可直接向视图传递数据而不需额外处理?( )48.下列关于MyBatis配置文件的说法中错误的是( )49.前端请求参数以Json格式封装到请求体时,用( )注解绑定到Java Bean50.SSM框架是由哪三个框架组成的?( )51.Spring框架在SSM中提供了哪些核心功能?( )52.搭建SSM框架时,用于整合Spring和MyBatis的中间件是下列哪一项?( )53.以下对于@RequestMapping注解说法正确的是( )。54.Spring事务管理器接口是下列哪一项?()55.关于SpringMVC框架说法错误的是( )。56.Spring事务配置中,哪个属性用于指定事务的传播行为?( )57.Spring容器初始化时,以下关于组件(Bean)的装配说法错误的是( )58.以下有关事务管理方式相关说法错误的是哪一项?( )59.关于SSM框架整合,下列说法错误的是?( )60.在SSM框架中,Service层方法如何获取MyBatis的Mapper接口?( )判断题程序题1. 在数据库中有员工表emp,表结构如下,使用MyBatis框架完成如下要求:(1)结合员工表的结构,完成员工实体类的设计(可以使用Lombok注解)。(2)实现根据工号和姓名动态查询员工列表功能,写出对应的配置。
(3)结合上题中的SQL配置,写出对应的Mapper接口方法。(2分)
4)在Mapper接口中,基于注解的方式配置SQL实现根据id删除员工的功能,写出接口方法代码。(2分)
2. Spring工作原理
3.SSM相关注解的作用
4.SSM配置
4.MyBatis的xml配置与注解
单选题
1.以下关于Maven说法错误的是?( )。
A.Maven中央仓库是由 Maven 团队维护,包含了世界上大部分流行的开源项目
B.Maven会自动处理项目依赖及其传递性依赖,它将自动下载所需的依赖,这极大的简化了依赖库的引用过程
C.当项目构建时,先从中央仓库中查找所需要的Jar包,找不到才会从本地仓库中获取
D.Maven支持多模块项目的构建,可以将一个大型项目拆分成多个模块,提高了代码的复用性、扩展性和可维护性
答案: C
解析:顺序反了
2.在项目的开发过程中,MyBatis承担的责任是( )
A. 定义实体类 B. 数据的增删改查操作
C. 业务逻辑的描述 D. 页面展示和控制转发
答案:B
解析: A、定义实体类是在代码中实现的,C、业务逻辑是在service类实现的,D、是Web层(如Spring MVC、Servlet等)处理的
3.当项目引用依赖的范围设置为以下( )选项时,表示依赖在编译时是必需的,但在运行时不需要。例如:Servlet API在编译一个Web应用时是必需的,但在运行时Servlet容器(如Tomcat)会提供这个API。
A.compile B.provided
C.runtime D.test
答案: B
解析: A、是全选,B、是在运行阶段是无效的,C、运行时有效,D、测试有效
4.下列关于MyBatis描述错误的是哪一项?( )。
A. MyBaits框架的开发效率比JDBC要高,性能比JDBC要低一些
B.MyBatis可以通过配置对象和表的映射关系简化数据库操作
C.MyBatis是一个全自动的ORM框架
D.MyBatis前身是iBatis,迁移到Google Code后改名为MyBatis,目前是3.x版本
答案: C
解析:是半自动
5.关于MyBatis的下列说法中错误的是()
A. MyBatis本是apache的一个开源项目iBatis
B. 2010年这个项目迁移到了谷歌,从iBatis更名为MyBatis
C. MyBatis是一个管理请求分发的框架
D. MyBatis实现了SQL语句与代码分离
答案:C
解析:MyBatis是一个持久层框架,主要负责数据库的增删改查操作,而不是管理请求分发。请求分发通常由Web框架(如Spring MVC、Servlet等)来处理。
6.在下列选项中,经常用来执行数据库更新语句的元素是( )。
A.<modify></modify> B.<update></update>
C.<edit></edit> D.<sql></sql>
答案: B
解析:跟mysql语句是一样的,所以ACD都排除
7.阅读下图 UserMapper.xml映射文件中的SQL配置,以下说法正确的是( )。
A.parameterType的属性不能接收map类型参数
B.图中SQL语句的两个参数名称可以任意命名
C.调用该程序代码后,方法返回的结果类型只能是User类型
D.resultType属性用来指定绑定结果类型
答案:D
解析:A、可以接收map,B、参数必须与传递给映射方法的参数名称一致。C、可以是
User
类型,也可以是List<User>
类型
8.有关MyBatis工作原理说法错误的是( )。
A. MyBatis的全局配置文件配置了MyBatis的运行环境等信息,其中主要内容是获取数据库连接
B. MyBatis映射文件中配置了操作数据库的SQL语句,需要在MyBatis的全局配置文件中加载才能执行
C. 可以通过MyBatis的环境等配置信息构建会话对象SqlSession
D. SqlSession对象,该对象中包含了执行SQL的所有方法
答案:C
解析:MyBatis通过
SqlSessionFactoryBuilder
使用全局配置文件(mybatis-config.xml
)来构建SqlSessionFactory
对象,而不是直接通过配置文件构建SqlSession
对象。SqlSession
是从SqlSessionFactory
中获取的。
9.以下关于<select>元素及其属性说法错误的是( )
A. <select>元素用来映射查询语句,可从数据库中读取数据,并组装数据给开发人员
B. parameterType属性表示传入SQL语句的参数类的全限定名或者别名
C. resultMap表示外部resultMap的命名引用,返回时可同时使用resultType和resultMap
D. 在同一个映射文件中可以配置多个<select>元素
答案:C
解析:两者是互斥的,需要根据查询结果的复杂程度选择一个
10.下列选项中,对代码说法有误的是( )。
A.当test属性值的条件成立时,标签内的SQL片段会追加到SQL语句中
B.当userName参数值为null时,SQL语句不会追加where条件语句
C.当test中的判断表达式有多个判断条件时,可以使用and或or进行多条件组合
D.修改test属性值为"userName!=null and userName!=''",当userName参数值为空字符串时,判断表达式返回true
答案: D
解析:返回的是false
11.当用户选择删除多条数据时,下列MyBatis配置可实现此功能的是( )。
A.<delete id="deleteByIds">
delete from t_user where user_id = #{ids}
</delete>
B.<delete id="deleteByIds">
delete from t_user where user_id = #{param1};
delete from t_user where user_id = #{param2};
/*......*/
delete from t_user where user_id = #{paramN};
</delete>
C.<delete id="deleteByIds">
delete from t_user where user_id in
<foreach collection="list" item="uid" open="(" separator="," close=")">
#{uid}
</foreach>
</delete>
D.<delete id="deleteByIds">
delete from t_user where user_id in
<foreach collection="list" item="uid" separator=",">
(#{uid})
</foreach>
</delete>
答案: C
解析:
A: 错误。这种配置仅能删除一条数据,因为
#{ids}
是一个占位符,无法处理多个user_id
的情况。B: 错误。这种配置写死了多个 SQL 语句,每次删除的条数是固定的,无法动态传入一个不定数量的 ID 列表,且效率较低。
D: 错误。这里的
<foreach>
标签中,separator=","
会拼接多个(#{uid})
,导致生成的 SQL 格式为user_id in ((1), (2), (3))
,这是无效的 SQL 语法。
12.下列选项中,对于Spring框架说法错误的是( )。
A.当Spring框架对Java Bean进行管理时,可以降低它们之间的耦合度
B.Spring框架可以使用AOP对程序进行权限拦截、性能监控、数据缓存等操作,在很大程度上减少了传统OOP带来的代码冗余和繁杂
C.Spring框架采用了侵入式设计,业务逻辑代码很难快速的移植到其它框架中
D.Spring框架可以很方便的集成各种优秀框架(如MyBatis、Quartz等)
答案:C
解析:Spring 框架采用的是 非侵入式设计,不会强制开发者依赖 Spring 的 API,从而保持了业务逻辑代码的独立性和可移植性。
13.下列关于Spring Bean的装配说法错误的是( )。
A.Bean的装配是指将容器中的相应对象赋值给另一个Bean的属性的过程
B.当使用注解装配时,@Autowired注解默认按照类型装配。如果容器中没有这个类型的Bean程序不会报错,默认赋值为null
C.当为Spring Bean设置初始属性值时,可以使用<property>子元素设值注入,且该属性必须提供相应的setter方法
D.当为Spring Bean设置初始属性值时,可以使用<constructor-arg>子元素构造注入,且必须提供相应参数个数的构造函数
答案:B
解析:
@Autowired
默认会在找不到匹配 Bean 时抛出异常,而不是将其赋值为null
。
14.以下关于面向切面编程说法正确的是( )。
A.面向切面编程将程序中的相同业务逻辑进行横向隔离,并将重复的业务逻辑抽取到一个独立的模块中
B.面向切面编程是基于对象的概念将现实世界事物抽象为类,使用类的属性表达事物所拥有的状态、方法表达事物所具有的行为
C.面向切面编程是程序在编译前,静态地将代码定义到类的指定方法、指定位置上的编程思想
D.面向切面编程是一种新的编程思想,是面向对象编程的替代品
答案:A
解析:
B:错误。这个描述是面向对象编程(OOP)的特性。面向对象编程关注的是将现实世界的事物抽象为类,利用类的属性和方法来描述事物的状态和行为,而非面向切面编程。
C:错误。面向切面编程是一种在运行时动态将切面(如日志、事务)织入到程序中的编程思想,而不是静态编译时插入代码。AOP 是基于代理模式的,常常是通过字节码增强的方式在运行时动态地插入横切关注点。
D:错误。面向切面编程并不是面向对象编程的替代品,而是补充。AOP 和 OOP 可以并行使用,AOP 主要用于处理横切关注点,如日志、事务等,而 OOP 处理核心的业务逻辑。
15.关于SpringMVC框架说法错误的是( )。
A.SpringMVC可以根据请求的URL,将请求分发到相应的处理器进行处理
B.SpringMVC可以自动将请求参数绑定到Java Bean对象上,而不需要手动解析请求参数
C.SpringMVC在处理器处理完请求后,可以将数据传递给视图进行渲染
D.SpringMVC可以自动对提交的表单数据进行校验,而不需要任何其它配置
答案:D
解析:SpringMVC 并不会自动对表单数据进行校验,必须额外配置并使用适当的注解。
16.以下对于@RequestMapping注解说法错误的是()。
A.value属性用于指定映射请求的URL
B.method属性用于指定请求处理方法可以处理的HTTP请求方法(如get、post、put请求等)
C.@RequestMapping注解只能标注在方法上面
D.@RequestMapping注解中可以指定多个URL映射路径
答案:C
解析:
@RequestMapping
注解不仅可以标注在方法上,也可以标注在类上。
17.关于面向切面编程说法正确的是( )
A. 面向切面编程将程序中业务逻辑相同的代码进行横向隔离,并将重复的业务逻辑抽取到一个独立的模块中,在程序执行时,横切织入到配置的位置执行。
B. 面向切面编程是一种新的编程思想,用于替代面向对象编程。
C. 面向切面编程是程序在编译前,静态地将代码插入到指定位置上的编程思想。
D. 面向切面编程是基于对象的概念将现实世界事物抽象为类,使用类的属性表达事物所拥有的状态、方法表达事物所具有的行为。
答案:A
解析:和前面的题是一样的
18.SpringMVC项目sys中有一个控制器方法,其映射路径为“/emp/list”,部署到本地Tomcat运行时上下文路径设置为“/app”,请问通过下列哪个路径可访问到该控制器方法?( )
A.http://localhost:8080/emp/list
B.localhost:8080/app/emp/list
C.localhost:8080/sys/emp/list
D.localhost:8080/sys/app/emp/list
答案:B
解析:路径跟项目名没关系,只跟上下文和url有关
19.下列选项中,关于Spring框架说法错误的是( )。
A. Spring框架可以降低组件(Java Bean)之间的耦合度
B. AOP(面向切面编程)是对OOP(面向对象编程)的补充,可以使用AOP对程序进行登录认证、权限判断、日志记录、性能监控等操作。
C. Spring框架可以很方便的集成MyBatis、Redis(缓存)、Lombok等各种优秀的框架
D. 基于Spring框架开发业务逻辑代码与Spring紧密关联,无法移植到其它框架中。
答案:D
解析:Spring 框架是非侵入式的,开发者可以编写与 Spring 关系不大的代码,便于移植到其他框架。
20.注解( )是用于绑定请求参数为JSON格式的数据。
A.@ResponseBody B.@RequestBody
C.@RequestParam D.@PathVariable
答案:B
解析:
A. @ResponseBody:用于将控制器方法的返回值直接写入 HTTP 响应体中,通常用于返回 JSON、XML 或其他数据格式。
B. @RequestBody:用于将 HTTP 请求体中的数据绑定到方法参数上,通常用于处理 JSON、XML 等格式的数据。适用于接收客户端发送的 JSON 格式的数据。
C. @RequestParam:用于绑定 HTTP 请求中的参数到方法的参数,适用于查询字符串或表单数据,不用于绑定 JSON 数据。
D. @PathVariable:用于绑定 URL 模板中的变量到方法的参数上,通常用于 RESTful 风格的 URL 中,如
/users/{id}
。
21.在SSM框架整合过程中,当静态资源(如js文件、图片等)无法正常访问时,可以在配置文件中添加( )。
A.<mvc:default-servlet-handler/>
B.<mvc:annotation-driven/>
C.<aop:aspectj-autoproxy/>
D.<context:component-scan/>
答案:A
解析:
A.
<mvc:default-servlet-handler/>
:该配置用于开启 Spring MVC 的默认静态资源处理机制。当配置了这个标签后,Spring MVC 会自动将对静态资源(如.js
、.css
、.jpg
等文件)的请求交给容器的默认 Servlet(如DispatcherServlet
)处理,确保静态资源能够被正常访问。B.
<mvc:annotation-driven/>
:该配置用于启用 Spring MVC 注解驱动功能,支持使用@Controller
、@RequestMapping
等注解来配置控制器和请求映射。它与静态资源访问无关。C.
<aop:aspectj-autoproxy/>
:该配置用于启用 Spring AOP(面向切面编程),为 Spring 管理的 Bean 自动生成代理对象。它与静态资源访问无关。D.
<context:component-scan/>
:该配置用于扫描指定包下的 Java 类,并将符合条件的类(如带有@Component
、@Service
、@Repository
、@Controller
等注解的类)注册为 Spring Bean。它与静态资源访问无关。
22.对于以下异常信息说法正确的是()。
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'edu.cqie.ssm.service.SysUserService' available: expected at least 1 bean which qualifies as autowire candidate.
A.缺少服务层扫包配置,导致相应对象未加入到容器中
B.pom.xml文件中缺少相关依赖
C.客户端发送请求路径错误
D.根本原因是Spring与JDK版本不兼容
答案:A
解析:
NoSuchBeanDefinitionException
通常是由于 Spring 配置中缺少相应的包扫描配置,导致容器中没有找到需要的 Bean。
23.在基于注解的方式整合SSM框架时,以下对于相关注解说法错误的是( )。
A.@ComponentScan注解用于扫描指定包,将标注为Spring Bean的对象加入到容器中
B.@MapperScan注解用于指定扫描Mapper接口位置,并将其自动装配到容器中
C.@EnableWebMvc注解用于开启AspectJ自动代理功能
D.@PropertySource注解用于加载指定位置的properties配置文件
答案:C
解析:
@EnableWebMvc
注解是用于启用 Spring MVC 的功能,而不是开启 AspectJ 自动代理功能。AspectJ 自动代理功能是通过@EnableAspectJAutoProxy
注解来启用的。
24.以下关于Spring事务隔离级别设置说法错误的是( )。
A.当设置为READ_UNCOMMITTED时,允许当前事务可以读取其它事务未提交的数据,此时可能会导致脏读、不可重复读和幻读的问题
B.当设置为READ_COMMITTED时,保证一个事务只能读取到已提交的数据,避免了脏读的问题
C.当设置为REPEATABLE_READ时,保证一个事务在同一个查询中多次读取的数据是一致的,避免了脏读和不可重复读的问题
D.当设置为SERIALIZABLE时,保证事务串行执行,避免了脏读、不可重复读和幻读的问题,这也是Spring默认的隔离级别
答案:D
解析:Spring 默认的隔离级别是 READ_COMMITTED,而不是
SERIALIZABLE
A. 当设置为
READ_UNCOMMITTED
时,允许当前事务可以读取其它事务未提交的数据,此时可能会导致脏读、不可重复读和幻读的问题:正确。READ_UNCOMMITTED
是最低的事务隔离级别,允许脏读、不可重复读和幻读的问题。B. 当设置为
READ_COMMITTED
时,保证一个事务只能读取到已提交的数据,避免了脏读的问题:正确。READ_COMMITTED
隔离级别避免了脏读,但仍然可能发生不可重复读和幻读。C. 当设置为
REPEATABLE_READ
时,保证一个事务在同一个查询中多次读取的数据是一致的,避免了脏读和不可重复读的问题:正确。REPEATABLE_READ
避免了脏读和不可重复读,但仍然可能会发生幻读。
25.下列关于@Transactional注解的属性说法正确的是( )。
A.propagation用于设置事务的隔离级别
B.isolation用于设置事务的传播行为
C.timeout用于设置事务执行超时时间
D.noRollbackFor用于设置导致事务回滚的异常类
答案:C
解析:
A.
propagation
用于设置事务的隔离级别:错误。propagation
属性用于设置事务的传播行为,而不是隔离级别。它定义了当前事务应该如何与已有事务交互。常见的传播行为包括REQUIRED
、REQUIRES_NEW
、NESTED
等。B.
isolation
用于设置事务的传播行为:错误。isolation
属性用于设置事务的隔离级别,而不是传播行为。隔离级别定义了事务之间的可见性,常见的隔离级别包括READ_UNCOMMITTED
、READ_COMMITTED
、REPEATABLE_READ
、SERIALIZABLE
等。C.
timeout
用于设置事务执行超时时间:正确。timeout
属性用于设置事务的超时时间,单位为秒。如果事务在指定的时间内没有完成,它将被强制回滚。D.
noRollbackFor
用于设置导致事务回滚的异常类:错误。noRollbackFor
属性用于指定哪些异常不会导致事务回滚,而不是设置导致回滚的异常类。可以通过rollbackFor
属性设置哪些异常会导致事务回滚。
26.阅读以下代码,当支付方法(makePayment)的事务传播行为修改为( )时,使得在支付失败后,只会回滚支付方法的事务而不会回滚订单方法的事务。
(1)订单服务的生成订单方法
@Transactional
public void createOrder(Order order) {
orderRepository.save(order); // 生成订单记录
paymentService.makePayment(order); // 调用支付服务
}
(2)支付服务的支付方法
@Transactional
public void makePayment(Order order) {
// 执行支付逻辑
paymentRepository.save(order);
}
A.REQUIRED B.REQUIRES_NEW
C.SUPPORTS D.NEVER
答案:B
解析:
- C、
createOrder
方法中的@Transactional
使用的是默认传播行为REQUIRED
,如果makePayment
方法使用REQUIRES_NEW
,那么支付方法的事务会独立于订单创建方法的事务。- 这样,在支付失败时,
makePayment
方法的事务会回滚,而createOrder
方法的事务(即订单生成事务)不会回滚,因为它们处于不同的事务上下文中。
A.
REQUIRED
:如果设置为REQUIRED
,makePayment
方法将加入createOrder
的事务,如果支付失败,则createOrder
的事务和makePayment
的事务都将回滚。这样就不是仅回滚makePayment
事务了。C.
SUPPORTS
:如果设置为SUPPORTS
,makePayment
方法会根据外部事务的存在情况来决定是否需要事务。如果外部事务存在,它会加入到现有事务中。如果没有外部事务,它将以非事务的方式执行。即支付失败后,createOrder
和makePayment
都会受到影响。D.
NEVER
:如果设置为NEVER
,makePayment
方法将不会在事务中执行,如果createOrder
方法存在事务,makePayment
会抛出异常。这与题目要求的“支付方法的事务回滚而订单方法不回滚”的需求不符。
27.在Maven项目构建时,首先从以下那个仓库中获取Jar包?()
A.本地仓库 B.远程仓库
C.镜像仓库 D.中央仓库
答案:A
解析:本地仓库 → 远程仓库(中央仓库或其他配置的仓库) → 镜像仓库
28.Maven的生命周期中,哪个阶段会执行打包操作?( )
A.compile B.package
C.test D.clean
答案:B
解析:
各个阶段说明:
clean
:清理阶段。在这个阶段,Maven 会删除之前构建过程中生成的所有文件,比如删除target
目录中的内容。
validate
:验证阶段。Maven 会检查项目是否正确,所有必要的文件和配置是否存在。
compile
:编译阶段。Maven 会编译项目的源代码,将源代码(如.java
文件)编译成字节码文件(如.class
文件)。
test
:测试阶段。在这个阶段,Maven 会运行单元测试,确保编译的代码通过了测试。
package
:打包阶段。Maven 会将编译后的代码(如.class
文件)和资源文件(如配置文件)打包成 JAR、WAR 或其他格式的文件。
verify
:验证阶段。Maven 会运行集成测试,检查打包后的文件是否符合要求。
install
:安装阶段。将打包好的文件安装到本地 Maven 仓库,以便其他项目使用。
deploy
:部署阶段。将构建的文件发布到远程仓库或其他分发平台。
29.MyBatis中,用于执行SQL语句的对象是?( )
A.SqlSessionFactory B.SqlSession
C.Configuration D.Mapper
答案:B
解析:
SqlSessionFactory
是用来创建SqlSession
对象的工厂。它的作用是从配置文件(如mybatis-config.xml
)中读取配置信息,并通过这些信息来创建SqlSession
。
30.MyBatis中,哪个属性用于指定参数类型?( )
A.resultType B.parameterType
C.namespace D.id
答案:B
解析:
各个属性的说明:
parameterType
:
- 用于指定传入 SQL 语句的参数类型。这个属性对应的方法参数类型,MyBatis 会将其转换为 SQL 语句所需的格式。
- 例如:如果 SQL 语句需要一个对象作为参数,可以使用
parameterType="com.example.User"
来指定传入的参数是User
类型。
resultType
:
- 用于指定查询结果的返回类型。MyBatis 会根据
resultType
将查询结果映射成对应的 Java 类型。- 例如:如果查询返回一个
User
对象,可以使用resultType="com.example.User"
来指定返回值类型。
namespace
:
- 用于指定映射文件的命名空间。它通常是一个接口的完全限定名,用于将 SQL 映射语句与对应的 Mapper 接口关联。
- 例如:
<mapper namespace="com.example.UserMapper">
。
id
:
- 用于唯一标识映射文件中的 SQL 语句。每个 SQL 语句都应该有一个唯一的
id
属性,用于在 Mapper 接口中调用。- 例如:
<select id="selectUserById" ...>
。
31.MyBatis中,执行复杂查询返回一个对象列表,应使用下述哪个方法?( )
A.select B.selectMap
C.selectList D.selectOne
答案:C
解析:
selectList
:
- 用于执行查询并返回一个对象列表。它适用于查询返回多行数据的情况,结果会被封装成一个集合(如
List
)。- 例如:
selectList("selectAllUsers")
会返回一个用户对象的列表。
selectOne
:
- 用于执行查询并返回一个单一对象。适用于查询只返回一行数据的情况,结果会封装成一个对象。
- 例如:
selectOne("selectUserById")
会返回一个单个用户对象。
selectMap
:
- 用于执行查询并返回一个
Map
对象,键是由用户指定的字段(如主键),值是查询的结果对象。- 适用于查询结果需要按某个字段进行分组或索引的情况。例如:
selectMap("selectUsersByRole", "userId")
会返回一个以userId
为键,User
对象为值的Map
。
select
:
- 是 MyBatis 中的一个基础查询方法。通常,
select
作为 SQL 映射文件中的标签使用,而不是作为 API 方法直接调用。
32.Spring拦截器链中,如果一个拦截器的preHandle方法返回false,那么后续的拦截器和目标方法会怎样?( )
A. 继续执行 B. 跳过后续拦截器,直接执行目标方法
C. 跳过后续拦截器和目标方法 D. 抛出异常
答案:C
解析:这种机制通常用于拦截并决定是否继续处理请求,比如权限检查等。
33.MyBatis的<foreach>标签,用于指定循环开始时添加前缀的属性是哪个?( )
A.open B.close
C.separator D.item
答案:A
解析:
open
:用于指定在循环开始时添加的前缀。它会在循环的第一个元素之前添加到生成的 SQL 语句中。
- 例如,在循环一个
IN
子句时,open
可以指定为'('
,这样 SQL 会变成类似IN (...)
的形式。
close
:用于指定在循环结束时添加的后缀。它会在循环的最后一个元素之后添加到生成的 SQL 语句中。
- 例如,在循环一个
IN
子句时,close
可以指定为')'
,这样 SQL 会变成IN (...)
的形式。
separator
:用于指定在每次循环的元素之间添加的分隔符。它会在每个元素之间添加指定的分隔符。
- 例如,在循环一个
IN
子句时,separator
可以指定为','
,使得 SQL 变成IN (a, b, c)
。
item
:用于指定当前循环元素的名称(变量名)。它指定了循环中每个元素的名称。
- 例如,
item="uid"
表示循环中的每个元素都会被称作uid
。
34.在MyBatis的<foreach>标签中,用于指定集合名称的属性是哪个?( )
A.item B.list
C.items D.collection
答案:D
解析:上面说了
35.Spring AOP中,用于匹配方法执行的切入点表达式是( )
A. execution() B. aop()
C. aopConfig() D. aspectj()
答案:A
解析:秒了
36.Spring框架中用于面向切面编程的模块是?( )
A.Spring Core B.Spring MVC
C.Spring ORM D.Spring AOP
答案:D
解析:
- A. Spring Core:Spring Core 是 Spring 框架的基础模块,提供了核心功能,比如 IoC(控制反转)容器和 Bean 的生命周期管理。它并不专注于 AOP。
- B. Spring MVC:Spring MVC 是一个 Web 框架,用于开发基于请求/响应模式的 Web 应用。它与 AOP 没有直接关系。
- C. Spring ORM:Spring ORM 是 Spring 用于与对象关系映射(ORM)框架(如 Hibernate、JPA)集成的模块。它与 AOP 不直接相关。
37.在Spring框架中,控制反转(IoC)的主要目的是什么?( )
A.提高代码的执行速度 B.减少内存消耗
C.将对象的创建过程交给容器管理 D.简化数据库操作
答案:C
解析:这样可以降低类与类之间的耦合性,增强代码的灵活性和可测试性。
38.Spring容器初始化时,以下关于组件(Bean)的装配说法错误的是( )
A. Bean的装配是指将容器中的相应对象赋值给另一个Bean的属性的过程
B. 当使用注解装配时,@Autowired注解默认按照类型装配。如果容器中有这个类型的Bean超过一个,不需要配置,Spring会帮我们自动装配。
C. 当在Spring配置文件使用<property>子元素对组件属性注入时,该属性必须提供相应的setter方法
D. 当在Spring配置文件使用<constructor-arg>子元素对组件属性构造注入时,必须提供相应参数个数的构造函数
答案:B
解析:需要自己指定,否则会报错
39.Spring AOP中,用于匹配方法执行的切入点表达式是?( )
A.aspect() B.pointcut()
C.joinPoint() D.execution()
答案:D
解析:pointcut是声明切入点的方法或属性。
40.关于SQL映射配置中的<resultMap>标签的使用,说法错误的是( )
A. <id>标签用于定义主键列映射关系
B. <resultMap>标签用于实现自定义映射关系
C. <result>标签里的property属性指定SQL查询结果列名
D. property和column值相同的映射关系可以省略
答案:C
解析:指定的是参数的类型,指定数据库的是column属性
41.在Spring MVC框架中,哪个组件负责将请求分发给相应的处理器?()
A.DispatcherServlet B.HandlerAdapter
C.ViewResolver D.Controller
答案:A
解析:
- B. HandlerAdapter:错误。
HandlerAdapter
是用来处理具体的请求与控制器方法之间的适配的,它帮助DispatcherServlet
调用相应的处理方法。HandlerAdapter
并不直接负责请求分发,而是执行与具体控制器的适配。- C. ViewResolver:错误。
ViewResolver
负责根据控制器返回的视图名称来选择合适的视图(如 JSP 文件、Thymeleaf 模板等)进行渲染,并将其返回给客户端。- D. Controller:错误。
Controller
是具体的业务处理组件,负责处理请求并返回结果,DispatcherServlet
才是负责将请求分发给对应Controller
的组件。
42.在Spring MVC框架中,哪个注解用于指定处理POST请求的方法?( )
A.@GetMapping B.@PostMapping
C.@PutMapping D.@DeleteMapping
答案:B
解析:看名字
43.在Spring MVC框架中,哪个注解用于指定处理GET请求的方法?( )
A. @GetMapping B. @PostMapping
C. @PutMapping D. @DeleteMapping
答案:A
解析:看名字
44.在SpringMVC控制层,在@Controller注解标记的类上,要使控制器方法能返回Json数据,需要添加的注解是?( )
A. @ResponseBody B. @RequestParam
C. @PathVariable D. @RequestBody
答案:A
解析:前面提到了
45.SpringMVC中,可以使用哪个对象向视图层传递数据( )
A. ModelAndView B. MultipartFile
C. List D. DispatcherServlet
答案:A
解析:
ModelAndView
对象用于向视图层传递数据,同时还指定了视图的名称。通过ModelAndView
,你可以在控制器方法中传递模型数据,并指定视图的名称,以便最终渲染正确的视图。
46.在SpringMVC中,用于处理请求的方法参数可绑定前端传来的数据,下列哪个注解可以用来绑定请求参数?( )
A.@RequestParam B.@Param
C.@ResponseBody D.@Autowired
答案:A
解析:
- B. @Param:这是 MyBatis 中使用的注解,用于映射参数,而不是用于 Spring MVC 中绑定请求参数。
- C. @ResponseBody:用于将方法的返回值直接写入 HTTP 响应体中,而不是绑定请求参数。
- D. @Autowired:用于自动注入 Spring 容器中的 Bean,不能用于绑定请求参数。
47.SpringMVC中,使用哪个对象可直接向视图传递数据而不需额外处理?( )
A.DispatcherServlet B.HttpServletResponse
C.ModelAndView D.Controller
答案:C
解析:前面说了
48.下列关于MyBatis配置文件的说法中错误的是( )
A. 所有的标签都必须放在<configuration>标签下
B. 配置的标签具有严格的顺序
C. 只能配置一个<environment>节点
D. transactionManager用于指定事务管理器类型
答案:B
解析:并不严格
49.前端请求参数以Json格式封装到请求体时,用( )注解绑定到Java Bean
A. @RequestBody B. @ResponseBody
C. @RequestParam D. @ResponseParam
答案:A
解析:
A. @RequestBody:用于将前端请求体中的 JSON 数据绑定到 Java Bean。Spring 会自动将请求体中的 JSON 数据解析并转换为相应的 Java 对象。
B. @ResponseBody:用于将方法的返回值直接写入 HTTP 响应体,通常用于返回 JSON 或 XML 格式的数据,而不是用来绑定请求参数。
C. @RequestParam:用于绑定 URL 中的请求参数(例如
?name=value
)到方法参数,通常用于表单提交或 URL 查询参数。D不存在
50.SSM框架是由哪三个框架组成的?( )
A.Spring、Spring MVC、MyBatis B.Spring、Hibernate、MyBatis
C.Spring Boot、Spring MVC、MyBatis D.Spring、Spring MVC、Hibernate
答案:A
解析:秒了
51.Spring框架在SSM中提供了哪些核心功能?( )
A.数据库操作 B.视图渲染
C.静态资源的访问 D.依赖注入和面向切面编程
答案:D
解析:前面说了
52.搭建SSM框架时,用于整合Spring和MyBatis的中间件是下列哪一项?( )
A.Spring JDBC B.Spring Data JPA
C.MyBatis-Spring D.Hibernate
答案:C
解析:看名字
53.以下对于@RequestMapping注解说法正确的是( )。
A. value属性用于指定映射请求的URL,相同的URL可以使用@RequestMapping注解到不同的控制器方法上。
B. @RequestMapping注解只能标注在方法上面
C. @RequestMapping注解中可指定多个URL映射路径,但这些URL映射路径须各不同。
D. method属性用于指定请求处理方法,可以处理的HTTP请求方法(如get、post、edit、delete请求等)
答案:C
解析:一开始我以为该选A的,老师给我说:
一个action可有多个url地址,但一个url地址不能对应多个action;然后才反应过来,我这里给你们个例子你们就明白了:
@RequestMapping(value = {"/login", "/signin"}) public String showLoginPage() { return "loginPage"; }
54.Spring事务管理器接口是下列哪一项?()
A.TransactionManager B.PlatformTransactionManager
C.DataSourceTransactionManager D.JtaTransactionManager
答案:B
解析:
A. TransactionManager:这个选项不是Spring事务管理的接口,而是一个抽象的事务管理接口,在Spring 2.x版本之前可能使用过,但从Spring 3开始,
PlatformTransactionManager
取代了它。B. PlatformTransactionManager:这是Spring的事务管理器接口,所有具体的事务管理器实现类都需要实现这个接口,如
DataSourceTransactionManager
(用于JDBC事务)和JtaTransactionManager
(用于分布式事务)。C. DataSourceTransactionManager:这是Spring提供的一个事务管理器实现类,专门用于管理基于JDBC的数据源事务。它实现了
PlatformTransactionManager
接口,但不是接口本身。D. JtaTransactionManager:这是Spring提供的另一个事务管理器实现类,用于处理分布式事务(JTA事务)。它也实现了
PlatformTransactionManager
接口。
55.关于SpringMVC框架说法错误的是( )。
A. SpringMVC使用DispatcherServlet将请求的URL分发到相应的处理器进行处理
B. 对于form表单请求,当参数名与Java Bean属性相同时,SpringMVC可以自动将请求参数绑定到Java Bean对象上,而不需要手动解析请求参数。
C. SpringMVC在处理器处理完请求后,无法将数据传递给视图进行渲染。
D. SpringMVC可以实现自动对提交的表单数据进行校验,避免在代码中重复手动校验
答案:C
解析:SpringMVC 完全支持将处理器处理后的数据传递给视图进行渲染。这是 SpringMVC 的基本功能之一。数据可以通过
Model
、ModelMap
、Map
或ModelAndView
等方式传递给视图层,然后由视图渲染并返回给用户。
56.Spring事务配置中,哪个属性用于指定事务的传播行为?( )
A.propagation B.isolation
C.timeout D.read-only
答案:A
解析:前面说了
57.Spring容器初始化时,以下关于组件(Bean)的装配说法错误的是( )
A. Bean的装配是指将容器中的相应对象赋值给另一个Bean的属性的过程
B. 当使用注解装配时,@Autowired注解默认按照类型装配。如果容器中有这个类型的Bean超过一个,不需要配置,Spring会帮我们自动装配。
C. 当在Spring配置文件使用<property>子元素对组件属性注入时,该属性必须提供相应的setter方法
D. 当在Spring配置文件使用<constructor-arg>子元素对组件属性构造注入时,必须提供相应参数个数的构造函数
答案:B
解析:前面说了
58.以下有关事务管理方式相关说法错误的是哪一项?( )
A.Spring中的事务管理分为两种方式:一种是传统的编程式事务管理,另一种是声明式事务管理
B.编程式事务管理:是通过AOP技术实现的事务管理,就是通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚
C.声明式事务管理:其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码植入到业务目标类中
D.声明式事务管理最大的优点在于开发者无需通过编程的方式来管理事务,只需在配置文件中进行相关的事务规则声明,就可以将事务规则应用到业务逻辑中
答案:B
解析:
编程式事务管理不是通过AOP技术实现的,而是通过显式编写代码来实现的。开发者需要手动管理事务,包括启动事务、提交事务和在发生异常时回滚事务。这种方式虽然灵活,但增加了代码复杂度,事务管理代码与业务逻辑混杂在一起。
AOP技术主要用于声明式事务管理,通过配置或注解的方式定义事务规则,将事务管理的逻辑独立为切面,与业务代码解耦。
59.关于SSM框架整合,下列说法错误的是?( )
A. Spring负责控制反转和依赖注入
B. Spring MVC负责视图渲染和用户请求分发
C. MyBatis负责业务逻辑处理
D. MyBatis负责数据持久化
答案:C
解析:是业务层的工作
60.在SSM框架中,Service层方法如何获取MyBatis的Mapper接口?( )
A. 通过Spring容器注入
B. 通过MyBatis的SqlSession获取
C. 通过Spring MVC的ModelAndView获取
D. 通过Spring MVC的Controller直接创建
答案:A
解析:对于B:虽然可以通过
SqlSession
手动获取Mapper接口,但这种方式通常不适用于SSM框架。因为Spring已经通过AOP和事务管理封装了SqlSession
的创建和关闭,直接使用SqlSession
可能会破坏Spring的事务管理机制。
判断题
- Maven的依赖管理机制可以自动解决依赖冲突。( × )
- Spring声明式事务默认只对RuntimeException或其子类异常进行事务回滚。( √ )
- pom.xml文件是Maven项目的核心配置文件,包含项目的依赖、构建等信息。( √ )
- 当使用try{}catch(){}代码块捕获了方法中的异常时,该方法声明的事务仍然会自动回滚。( × )
- ORM就是一种为解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。( √ )
- SQL映射文件中可以包含多个id值相同的<resultMap>元素。( × )
- 使用MyBatis的标签配置一对多关系时,必须指定column属性来指定外键列,以建立主表和从表之间的关联。( √ )
- DispatcherServlet在初始化的过程中,同时会创建ClassPathXmlApplicationContext类型的IoC容器。( × )解析:
DispatcherServlet
在 Spring 框架中的初始化过程中,会创建一个WebApplicationContext
类型的 IoC 容器,而不是ClassPathXmlApplicationContext
。 - 使用MyBatis框架时,只需导入MyBatis的jar包就可自动操作数据库了。( × )
- MyBatis是一个全自动的框架,通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过MyBatis提供的方法完成持久层操作。( × )
- 在MyBatis的Mapper XML文件中,可使用元素<where>来自动添加SQL语句中的WHERE关键字,并且会根据<if>条件确定是否添加与取消前置的and关键词。( √)
- 与<insert>元素一样,<update>和<delete>元素在执行完之后,也会返回一个表示影响记录条数的整数。( √ )
- MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架。( √ )
- 拦截器的preHandle()方法在处理器请求前被调用,postHandle()方法在处理器处理请求执行完成后生成视图之前执行。因此若要对处理器方法进行权限判断时,应将代码加在preHandle()方法中。( √ )
- 在Spring框架中,依赖注入(DI)只能通过构造器注入实现。( × )
- 在SpringMVC框架控制器的方法中,可以通过在形参前面加上@PathVariable注解或者@RequestParam注解获取请求参数,两者的作用是一样的。( × )
- 在SpringMVC框架中,@RequestMapping注解只能用于方法上,而不能用于类上。( × )
- 当Spring Bean的作用域设置为prototype时,每次从容器中取到的对象都是同一个。( × )
- SpringMVC中的拦截器可在请求到达Controller前执行一些预处理逻辑。( √ )
- 在SpringMVC框架中,DispatcherServlet用于接收用户所有请求,因此URL映射路径需要设置为 /*。( × )
- 在MyBatis动态SQL配置中,可以使用<trim>替换<set>元素处理SQL中多余的逗号。( √ )
- @RequestMapping注解只能标注在方法上,不能标注在类上。( × )
- MyBatis框架中的SqlSession对象是线程安全的,可以在多个线程间共享。( × )
- #{}和${}之间的区别是前者会创建PreparedStatement参数占位符“?”,并通过占位符安全地设置参数,而后者则是将参数原样追加到SQL语句当中,容易产生SQL注入问题。( √ )
- Spring事务管理中,@Transactional注解只能应用于方法上,而不能应用于类上。( × )
- 使用 @Transactional 注解的方法,需要是 public 的。如果加在 protected、private 或者 package 可见的方法上,不会生效,也不会报错。( √ )
- 当执行mvn package命令后,Maven会将打包好的jar文件存放到本地仓库中。( × )
- SSM框架中,通过配置事务管理器来实现事务管理,保证数据的一致性。( √ )
- 配置bean时,如需对该bean进行属性注入,需在bean标签外并列增加一个property标签来实现。( × )
- Maven默认首先从本地仓库中获取依赖,当本地仓库没有时,才会从远程仓库中获取并下载到本地仓库。( √ )
程序题
1. 在数据库中有员工表emp,表结构如下,使用MyBatis框架完成如下要求:
字段名 | 类型 | 长度 | 注释 |
id | int | 11 | 主键、自增 |
code | varchar | 20 | 工号 |
name | varchar | 30 | 姓名 |
birthday | varchar | 10 | 出生日期 |
(1)结合员工表的结构,完成员工实体类的设计(可以使用Lombok注解)。
package domain;
import lombok.Data;
//员工实体类
@Data
public class Emp{
private Integer id;
private String code;
private String name;
private String birthday;
}
(2)实现根据工号和姓名动态查询员工列表功能,写出对应的<select>配置。
package domain.qo;
import lombok.Data;
//查询条件实体类
@Data
public class EmpQo{
private String code;
private String name;
}
<!—查询符合条件的全部员工(基于查询类型实现)-->
<select id = "lisy" resultType = "domain.Emp" parameterType = "domain.qo.EmpQo">
select * from emp
<where>
<if test="code != null &&code != '' ">
and code = #{code}
</if>
<if test=“name!=null and name!=‘’ ”>
and name=#{name}
</if>
</where>
</select>
<!—查询符合条件的全部员工(基于查询变量实现)-->
<select id = "lisy" resultType = "domain.Emp" >
select * from emp
<where>
<if test="code != null &&code != '' ">
and code = #{code}
</if>
<if test=“name!=null and name!=‘’ ”>
and name=#{name}
</if>
</where>
</select>
(3)结合上题中的SQL配置,写出对应的Mapper接口方法。(2分)
package mapper;
import domain.Emp;
import domain.qo.EmpQo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
//员工的mapper接口
@Repository
public interface EmpMapper{
//查询符合条件的员工列表(基于查询类实现)
List<Emp> list(EmpQo q);
List<Emp> list(@Parm String code,@Parm String name);
}
4)在Mapper接口中,基于注解的方式配置SQL实现根据id删除员工的功能,写出接口方法代码。(2分)
@Delete(delete from emp where id = #{id})
int DeleteById(int id);
2. Spring工作原理
代码
1 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
2 EmpService empService = context.getBean("empService", EmpService.class);
3 Emp emp=new Emp();
4 emp.setName(“张三丰”);
5 emp.setCode(“001”);
6 emp.setBirthday(“2000-10-01”);
7 empService.add(emp);
第1行代码作用:基于spring配置文件spring-config.xml进行实例化应用程序上下文,完成SpringIoC容器的创建
第2行代码作用:通过Ioc容器创建EmpService实例
第7行代码左右:调用业务类EmpService的add方法
3.SSM相关注解的作用
@Controller:用于标识一个类作为 Spring MVC 控制器。控制器类中的方法可以处理 HTTP 请求。
@RestController:是 @Controller
和 @ResponseBody
的组合注解。用于简化 RESTful API 的开发。它不仅标记一个类为控制器,还意味着方法的返回值会直接作为 HTTP 响应体返回,而不需要再使用 @ResponseBody
注解。
@Autowired:自动注入 Spring 容器中的 Bean。Spring 会根据类型自动注入相应的依赖。
@RequestMapping:用于映射 HTTP 请求到具体的控制器方法。可以指定请求的 URL、请求方法类型
@PostMapping:@RequestMapping(method = RequestMethod.POST)
的简化版。
@GetMapping:@RequestMapping(method = RequestMethod.GET)
的简化版。
@ResponseBody:将方法的返回值作为 HTTP 响应体返回,通常与 @Controller
配合使用,表示返回的数据是直接写入 HTTP 响应体中的 JSON 或 XML 格式的数据。
@RequestBody:将 HTTP 请求的主体部分(通常是 JSON 或 XML 数据)绑定到方法参数上。
@PathVariable:将 URL 中的路径变量绑定到方法的参数上。
@Repository:用于标识数据访问层(DAO 层),通常与 MyBatis 或 JPA 一起使用。它表示这个类是一个数据访问组件。
@Param:指定参数名称,使得 SQL 映射文件中的占位符能够正确地与方法参数对应。
@Service:标识服务层的组件。一般用于业务逻辑层,表示这是一个服务组件,Spring 容器会将其管理。
@Component:用于标识一个 Spring 管理的普通组件。与 @Service
、@Controller
、@Repository
等注解一样
4.SSM配置
仔细理解applicationContext.xml与web.xml中各项配置的作用(见注释)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描组件 -->
<context:component-scan base-package="cqie.edu.ems">
<!-- 开启SpringMVC框架的注解驱动 -->
<mvc:annotation-drvien/>
<!-- 加载db.properties文件 -->
<context:property-placeholder ignore-unreslovable="true" location = "classpath:db.properties">
<!--配置数据源,使用Druid连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<!-- 数据库基本信息配置 -->
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置sqlSessionFactory-->
<!-- SqlSessionFactoryBean负责整合:把该类控制反转,将dao层生成的代理对象,进行控制反转,使Spring操作MyBatis对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--关联数据源-->
<property name="dataSource" ref="dataSource"/>
<!--指定mapper映射文件地址-->
<property name = "mapperLocations" value="classpath:mapper/*.xml"/>
<!--设置实体类包别名,简化Mapper文件的配置-->
<property name="typeAliasesPackage" value="cqie.edu.ems.domain"/>
<!--分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor"/>
</array>
</property>
</bean>
<!--mapper接口自动扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cqie.edu.ems.mapper" />
</bean>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value ="WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--静态资源访问映射路径-->
<mvc:resources location="/static/" mapping = "staic/**"/>
<!--配置拦截器-->
<mvc:interceptors>
<!--配置全局拦截器,拦截所有用户请求-->
<bean class="cqie.edu.ems.interceptor.LoginInterceptor"/>
</mvc:interceptors>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>ems</display-name>
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 自动加载ssm配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!--当值≥0时,启动时就加载;当值<0或不指定时,则表示第一次请求时加载-->
<load-on-startup>1</load-on-startup>
<!--配置上传文件解析-->
<multipart-config>
<max-file-size>5242880</max-file-size>
<max-request-size>10485760</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<!-- 配置DispatcherServlet接受所有URL请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器,解决中文乱码问题 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4.MyBatis的xml配置与注解
@Select:用于指定一个查询 SQL 语句,执行 SELECT 操作。
@Insert 用于指定一个插入数据的 SQL 语句,执行 INSERT 操作。
@Update用于指定一个更新数据的 SQL 语句,执行 UPDATE 操作。
@Delete用于指定删除数据的 SQL 语句,执行 DELETE 操作。
<select>用于在 XML 中定义查询操作。
<update>
<insert>
<delete>
<where>用于动态生成 SQL 语句中的 WHERE
子句。
<if test=“”>用于条件判断,动态生成 SQL 语句的一部分。
<set>用于动态生成 SQL 语句的 SET
子句,通常用于 UPDATE 操作。
<foreach>用于处理集合类型的参数(如数组、List、Map),通常用于生成 IN
子句。
<resultMap>用于定义复杂的结果映射,将查询结果映射到 Java 对象。
参数 参数通常通过 #{}
或 ${}
传递给 SQL 语句。
返回值
-
- 单个对象:如
Emp
对象,返回一行数据。 - List 集合:如
List<Emp>
,返回多行数据。 - Map:返回键值对的映射。
- Integer、Long 等:通常用于执行更新、插入或删除操作时返回影响的行数。
- 单个对象:如
- 你可以通过
resultType
或resultMap
来指定返回的类型。