目录
简答题
1.在MyBatis框架中,当查询结果列名和实体类中的属性名不一致时如何配置实现自定义映射关系,请详细说明。
2.请描述在SQL映射文件中,如何自定义合适的实体类与查询结果完成映射?
3.Spring整合MyBatis时,需配置SqlSessionFactoryBean与MapperScannerConfigurer组件,请结合你的理解,描述一下这两个组件的作用。
4.在MyBatis框架中提供了很多标签用于配置动态SQL,请说明使用哪些标签可以实现动态条件查询功能以及这些标签的作用。
3.有如下请求:
4.请描述MyBatis框架的特点
5.在Spring IoC容器中,请说明基于注解的方式如何完成控制器层、业务逻辑层和数据访问层组件的注册和依赖注入。
6.在Spring IoC容器中,注册的bean有不同的作用域,请比较singleton和prototype两种作用域的差异。
7.在实现系统注册功能时,用户在页面中需要填写用户名、密码、姓名和年龄等参数,请写出至少两种在控制器方法中获取表单提交参数值的方法。
8.请简述在MyBatis框架中,Mapper接口的定义规则
9.请描述一下Spring框架中的AOP概念及其应用。
10.动态SQL是MyBatis框架提供的非常强大的功能,简要描述什么是动态SQL,以用户表修改操作来说明使用动态SQL的好处。
SSM%E6%A1%86%E6%9E%B6%E9%9C%80%E8%A6%81%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%B9%B6%E7%AE%80%E8%A6%81%E8%AF%B4%E6%98%8E%E6%AF%8F%E4%B8%80%E4%B8%AA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%9C%E7%94%A8%E3%80%82-toc" style="margin-left:80px;">11.结合自己的理解,请列举在Maven Web工程中整合SSM框架需要的配置文件并简要说明每一个配置文件的作用。
12.请描述一下Spring框架中的自动装配(autowire)机制
13.数据库role表有字段role_name,映射到Role实体的roleName属性,查询role表所有字段,将结果映射到Role实体时,为什么roleName属性值为null,如何解决,请给出至少两种方法。
程序题
考察点1:基于注解方式在Spring容器中完成组件注册和依赖注入
考察点2:MyBatis的配置与实现,尤其是参数的定义、注解与使用;数据库字段与实体类型属性如何字段实现映射;复杂查询与动态SQL如何配置等。
SSM%E6%95%B4%E5%90%88%E6%97%B6%EF%BC%8C%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%9C%89%E5%93%AA%E4%BA%9B%E3%80%82%E5%90%84%E9%A1%B9%E9%85%8D%E7%BD%AE%E7%9A%84%E4%BD%9C%E7%94%A8%E6%98%AF%E4%BB%80%E4%B9%88%E3%80%82-toc" style="margin-left:80px;">考察点3:SSM整合时,配置文件有哪些。各项配置的作用是什么。
考察点4:Spring AOP编程如何配置切点、切面、切面方法,理解各配置项的作用。
SSM%E9%A1%B9%E7%9B%AE%E4%B8%AD%EF%BC%8C%E7%BC%96%E7%A8%8B%E5%BC%8F%E4%B8%8E%E7%94%B3%E6%98%8E%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%AE%A1%E7%90%86%E7%9A%84%E5%AE%9E%E7%8E%B0%EF%BC%9B%E5%A6%82%E4%BD%95%E6%8E%A7%E5%88%B6%E5%9B%9E%E6%BB%9A%EF%BC%9B%E5%BC%82%E5%B8%B8%E7%9A%84%E6%8D%95%E8%8E%B7%EF%BC%9B%E7%90%86%E8%A7%A3%E4%BA%8B%E5%8A%A1%E7%9A%84%E4%BC%A0%E6%92%AD%E8%A1%8C%E4%B8%BA%EF%BC%8C%E5%B9%B6%E7%90%86%E8%A7%A3%E7%9B%B8%E5%85%B3%E6%B3%A8%E8%A7%A3%E7%9A%84%E4%BD%9C%E7%94%A8%E3%80%82-toc" style="margin-left:80px;">考察点5:SSM项目中,编程式与申明式事务管理的实现;如何控制回滚;异常的捕获;理解事务的传播行为,并理解相关注解的作用。
简答题
1.在MyBatis框架中,当查询结果列名和实体类中的属性名不一致时如何配置实现自定义映射关系,请详细说明。
(1)使用<resultMap>标签自定义映射关系
(2)使用<id>标签定义主键列映射关系
(3)使用<result>标签定义普通列映射关系
(4)在<id>和<result>标签中使用property属性定义实体类属性,使用column属性定义查询结果中的列名
2.请描述在SQL映射文件中,如何自定义合适的实体类与查询结果完成映射?
在SQL映射文件中,当查询结果列名和实体类属性名不一致时,可以使用<resultMap>标签实现自定义映射关系。
通过<id>和<result>子标签可以定义数据库表字段和Java实体类属性之间的映射关系。
<id>用于定义主键列和主键属性之间的映射关系
<result>用于普通列和Java实体类属性之间的映射关系。
映射关系定义完成后,还要在SQL配置中使用resultMap属性,引用该映射关系,MyBatis底层才能根据我们自定义的映射规则完成数据映射。
3.Spring整合MyBatis时,需配置SqlSessionFactoryBean与MapperScannerConfigurer组件,请结合你的理解,描述一下这两个组件的作用。
(1)SqlsessionFactoryBean是mybatis-spring依赖中的类,通过配置 SqlsessionFactoryBean来向容器中注入SqlsessionFactory对象。
(2)MapperScannerConfigurer是mybatis-spring依赖中的类,作用是扫描mapper包下的接口,通过动态代理方式将接口的实现类注册到Spring容器中。
4.在MyBatis框架中提供了很多标签用于配置动态SQL,请说明使用哪些标签可以实现动态条件查询功能以及这些标签的作用。
(1)<where>标签:动态的构造where子句,去除SQL语句中多余的and;也可以回答<trim>标签
(2)<if>标签:用于进行条件判断,如果判断表达式为true,则加入对应的SQL片段
3.有如下请求:
http://localhost:8080/user/query?name=Tom&sex=1&phone=13912345678&rid=1 ,
该请求提交了几个参数,使用SpringMVC的Controller如何接收该请求提交的参数?
(1)提交了4个参数。
(2)使用HttpServletRequest的getParameter或getParameterValues方法获取
(3)直接把请求中的参数写到在Controller类相应方法的形参中,但需通过@RequestParam注解指定接收的请求参数名。
(4)定义参数实体类来接收,将实体类型作为控制器方法参数。
4.请描述MyBatis框架的特点
MyBatis框架的特点如下:
(1)开源、优秀的持久层框架;
(2)面向配置编程,SQL语句与代码分离,维护便捷;
(3)数据映射支持良好,结果处理方便;
(4)支持动态SQL语句。
5.在Spring IoC容器中,请说明基于注解的方式如何完成控制器层、业务逻辑层和数据访问层组件的注册和依赖注入。
(1)在控制器层组件上加上@Controller注解
(2)在业务逻辑层组件上加上@Service注解
(3)在数据访问层组件上加上@Repository注解
(4)使用@Autowired注解通过属性注入的方式实现组件装配
6.在Spring IoC容器中,注册的bean有不同的作用域,请比较singleton和prototype两种作用域的差异。
(1)SpringIoC容器中,singleton指bean为单例,prototype指bean是多例。
(2)两者的创建时机不同。singleton是在容器初始化时,prototype是获取bean时。
(3)两者的生命周期。singleton由Ioc容器托管,prototype在获取bean后,Ioc容器不再管理,由客户端自行管理。
(4)两者每次获取实例的结果不同。singleton获取的均为同一个实例,prototype每次获取都是新实例,每次获取均不同。
7.在实现系统注册功能时,用户在页面中需要填写用户名、密码、姓名和年龄等参数,请写出至少两种在控制器方法中获取表单提交参数值的方法。
(1)通过在控制器方法中使用HttpServletRequest对象的getParameter方法获取表单参数
(2)通过在控制器方法中利用@RequetParam注解和加入多个形参来获取参数
(3)通过在控制器方法中自定义实体类型来接收参数
8.请简述在MyBatis框架中,Mapper接口的定义规则
在MyBatis框架,接口的定义需要遵循如下的规范:
(1)方法名和SQL配置的id一致
(2)方法返回值和resultType一致
(3)方法的参数和SQL配置需要的参数一致
9.请描述一下Spring框架中的AOP概念及其应用。
AOP(面向切面编程)是一种编程范式,它允许程序员定义方法拦截器,以在特定的执行点执行代码,而无需修改源代码。
在Spring框架中,AOP主要用于日志记录、事务管理、安全检查等横切关注点的处理。
10.动态SQL是MyBatis框架提供的非常强大的功能,简要描述什么是动态SQL,以用户表修改操作来说明使用动态SQL的好处。
(1)动态SQL是⼀种在运行时构建和执行SQL语句的技术,动态SQL允许根据程序运行时的条件和需求来动态地生成SQL语句,从而提供更高的灵活性和可重用性。
(2)假设用户表可修改字段为用户名、登录账户、登录密码、状态等,修改时可根据提交参数值是否为空来确定是否修改该参数对应的字段。不使用动态SQL语句,则需组合各个参数是否为空的条件来写多条SQL语句实现需求;使用用动态SQL语句,则只需写一条SQL语句,动态判断每个条件即可。
SSM%E6%A1%86%E6%9E%B6%E9%9C%80%E8%A6%81%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%B9%B6%E7%AE%80%E8%A6%81%E8%AF%B4%E6%98%8E%E6%AF%8F%E4%B8%80%E4%B8%AA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%9C%E7%94%A8%E3%80%82" style="text-align:justify;">11.结合自己的理解,请列举在Maven Web工程中整合SSM框架需要的配置文件并简要说明每一个配置文件的作用。
(1)web.xml:配置DispatcherServlet。
(2)springmvc.xml:将控制器层组件以及SpringMVC框架相关的组件通过该配置文件注册到Spring容器中。
(3)spring-beans.xml:将业务逻辑层组件和数据访问层组件通过该配置文件注册到Spring容器中。
(4)db.properties:配置数据库连接参数
12.请描述一下Spring框架中的自动装配(autowire)机制
自动装配是Spring框架的一种特性,它可根据类型或名称自动将Bean注入到另一个Bean中。
自动装配可以通过XML配置或注解(如@Autowired)来实现。
13.数据库role表有字段role_name,映射到Role实体的roleName属性,查询role表所有字段,将结果映射到Role实体时,为什么roleName属性值为null,如何解决,请给出至少两种方法。
因为Role实体类中的属性名roleName和查询结果的列名role_name不一致,导致MyBatis无法自动完成映射。
解决方法:
(1)在SQL语句中为role_name取一个别名roleName。
(2)使用<resultMap>标签自定义映射规则,完成映射。
(3)开启MyBatis框架的驼峰映射配置。
程序题
考察点1:基于注解方式在Spring容器中完成组件注册和依赖注入
行号 | 代码内容 |
1 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/add") @ResponseBody public String add(@RequestBody User user){ try{ userService.add(user); return "success"; } catch (Exception e) { return "fail"; } } @GetMapping("/delete/{id}") @ResponseBody public String delete(@PathVariable Integer id){ try { userService.deleteById(id); return "success"; } catch (Exception e) { return "fail"; } } @GetMapping("/list") public String list(Model model){ List<User> users=userService.selectAll(); model.addAttribute("mos", users) return "user/list"; } } @Service
public void deleteById(Integer id){ public List<User> selectAll(){ @Repository public interface UserMapper { void insert(User user); void deleteById(Integer id); List<User> selectAll(); } |
(1)需正确地使用上述注解,并能写出上述注解
(2)第1行中的注解@Controller不能换成@RestController,否则第30行的Action将无法返回对应的网页
(3)第2行注解@RequestMapping,标注在类上,其作用是为该控制器的所有Action方法设置父路径。
(4)第20行中的注解@PathVariable,其作用是从请求路径中获取请求传入的参数值
(5)第32行代码的作用是将users集合,传递到视图中,并取名为mos
(6)第33行代码的作用是返回user/list指定的视图页面
(7)控制器向视图传递数据的方式包括:HttpServletRequest、Model/ModelMap/Map、ModelAndView向页面中传递参数等