Java EE 程序修改题【太原理工大学】
创始人
2024-05-02 15:03:43
0

程序修改题就是让你以不同的形式或方法实现相同的功能,之前说过,第一个就是动态 SQL 条件查询里面的 where 和 trim 转换,这也正是我们模拟考试程序修改中出现的题,模拟考过正式考试还会考吗?那该考还得考,但是我不敢保证,哈哈还是都看看吧,然后就是第二个,依赖注入明明也是有两种方式可以考的,但是老师已明确说明,程序修改题不考依赖注入,ok 跳过,但是程序修改题不考依赖注入,其他地方一定会考哦,第三,Bean 的三种装配方式,嗯这个考的可能性很大,依然是我个人猜测,考完别真实我,欢迎评论区留言。

文章目录

    • 1. where 和 trim 转换
    • 2. Bean 的三种装配方式
      • 2.1 基于 XML 的装配
      • 2.2 基于 Annotation 的装配
      • 2.3 自动装配

1. where 和 trim 转换

还记得模拟考试中的程序修改题吗?
它当时是给出我们一段代码,基于动态 SQL 的条件查询操作,原题中是以 where 的方式给出的,它让我们改用 trim 的方式重新设计程序,实现相同的动态 SQL。
题目我找不到了,我只能用一段类似的代码来演示。

先补充一些内容,为什么要使用 where 和 trim? 在映射文件中,编写的 SQL 语句后面加入了 “where 1=1” 的条件的话,既保证了 where 后面的条件成立,又避免了 where 后面第一个词是 and 或者 or 之类的关键字。其实除了 where 1=1 外,我们还可以使用 MyBatis 提供的 where 元素和 trim 元素解决这个问题,也就是说它是用来代替 where 1=1 的。 where 元素会自动判断由组合条件拼装的 SQL 语句,只有 where 元素内的某一个或多个条件成立时,才会在拼装 SQL 中加入 where 关键字,否则将不会添加,即使 where 之后的内容有多余的 and 或 or,where 元素也会自动地将它们去除。 除了 where 外,trim 元素也可以用于删除多余的关键字,它可以直接实现 where 元素的功能,trim 元素包含四个属性。(prefix 指定给 SQL 语句增加的前缀、prefixOverrides 指定 SQL 语句要去掉的前缀字符串、suffix 指定给 SQL 语句增加的后缀、suffixOverrides 指定 SQL 语句要去掉的后缀字符串)

假如这是题目给出的 where 方法的代码:


改成 trim 方法后:


自己对照着看吧,中间内容不需要改动,where 换成 trim 后,相关属性再跟上,这里因为我们前面要增加一个 where,是个前缀所以用 prefix="where",而且我们第一个 if 里面的 and 是要剔除掉的,剔除的也是前缀所以用 prefixOverrides="and"。 为什么要剔除 and?当第一个条件成立时,剔不剔除都是没有影响的,但是如果说我们的第一个语句中的条件并不成立,这时候肯定需要跳过它再去执行下一个语句,但是这时会报错,因为 where 后直接就跟了 and,这是不允许的,prefixOverrides="and" 帮助我们解决这个问题。实在不想理解你就不用理解了,直接记住这样写就可以了,反正考试你就原话去默写吧,不会变的。

2. Bean 的三种装配方式

首先 Bean 的装配方式有三种,基于 XML 的装配、基于 Annotation 的装配、自动装配。
其实你们可以去看课本的,我这里用的是电子书,我也不知道课本是在几页,自己去目录找一下 Bean 的装配方式。

2.1 基于 XML 的装配

基于 XML 的装配也是有两种方法的,构造注入和设值注入。

① 构造注入,有参构造方法装配 Bean

//User实体类public User(String username, Integer password, List list) {super();this.username = username;this.password = password;this.list = list;}

listvalue1listvalue1listvalue1
//Test.java 测试类
package com.tyut.xml;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class XmlBeanTest {public static void main(String[] args) {//获取配置文件路径String xmlpath ="com/tyut/xml/ApplicationContext.xml";//加载配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);//输出有参构造方法注入的结果User user2 = (User) applicationContext.getBean("user2");System.out.println(user2);}
}

② 设值注入,无参构造法和 setter 方法注入

//User实体类
public User() {super();}public void setUsername(String username) {this.username = username;}public void setPassword(Integer password) {this.password = password;}public void setList(List list) {this.list = list;}

listvalue1listvalue2listvalue3

我这里只提供部分代码,对照两种方法各自的用法,怎么写,相同的无关代码就不往上放了,还有第二种方法的测试类和第一种也是一样的,所以就不重复了!

2.2 基于 Annotation 的装配

//UserDao.java 接口
package annotation;public interface UserDao {public void save();}
//UserDaoImpl.java 接口的实现类
@Repository("userDao")
public class UserDaoImpl implements UserDao {@Overridepublic void save() {// TODO Auto-generated method stubSystem.out.println("UserDao------save");}
}
//UserService.java 
package annotation;public interface UserService {public void save();}
//UserServiceImpl.java 
@Service("userService")
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic void save() {// TODO Auto-generated method stubthis.userDao.save();System.out.println("UserSerevice-------save");}}
//UserController.java
@Controller("controller")
public class UserController {@Autowiredprivate UserService userService;public void save() {this.userService.save();System.out.println("UserController------save");}}

       
 
 
//Test.java 测试类
public static void main(String[] args) {String xmlpath = "annotation/ApplicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);//获取UserController的实例UserController userController = (UserController) applicationContext.getBean("userController");//输出UserController中的save方法userController.save();}

2.3 自动装配

UserDao.java、UserDaoImpl.java 、UserService.java、Test.java 与上一种注解装配方式代码完全一样,同样不再重复了。

//UserServiceImpl.java 
@Service("userService")
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void save() {// TODO Auto-generated method stubthis.userDao.save();System.out.println("UserSerevice-------save");}}

UserServiceImpl.java 与注解装配相比这里也就是多了个构造,下面的 UserController.java 同样,不同的地方就是出题的点,需要你去修改替换的地方。

//UserController.java 
public void setUserService(UserService userService) {this.userService = userService;}

前、后与 Annotation 相同的部分省略!


       
 
 

程序修改题当然不用把整个代码过程都写出来,它让替换成另一种方式,而替换的点就是这几种方式有差异的地方,直接记不同的地方就好了对吧,没必要全记。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...