如何使用bootstrap-fileinput工具快速预览选中的图片文件,而不进行实际上传操作
功能需求:使用的bootstrap-fileinput 插件,要求是选择图片后直接展示,然后才提交。
刚开始想的是能不能获取原始路径,但是百度下发现,现在浏览器为了安全着想都禁止了,使用谷歌浏览器的开发者工具发现,上传的图片地址是base64编码那种,类似下面这个
data:image/jpeg;base64,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
bootstrap-fileinput 插件有filebatchselected方法,功能是选择文件后处理事件
$("#fileinput").on("filebatchselected", function(event, files) {
});
但是不知道怎么处理。
大量百度后发现了一个目前行得通的方法
var file=$("#upload");
file.change(function () {
back.background = getObjectURL(file[0].files[0]);
});
function getObjectURL(file) {
var url = null;
if (window.createObjcectURL != undefined) {
url = window.createOjcectURL(file);
} else if (window.URL != undefined) {
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined) {
url = window.webkitURL.createObjectURL(file);
}
return url;
}
file对象是一个input
返回的url是这样的 blob:http%3A//localhost%3A8083/2ff77702-8153-4174-a354-05a92c2c0534
URL.createObjectURL()方法会根据传入的参数创建一个指向该参数对象的URL,这个URL的生命仅存在于它被创建的这个文档里,新的对象URL指向执行的File对象或Blob对象。
语法:objcetURL = window.URL.createObjectURL(file || blob);
参数:File对象和Blob对象;
File对象就是一个文件,比如我用file type="file"标签来上传文件,那么里面的每个文件都是一个file对象。
Blob对象就是二进制数据,比如在XMLHttpRequest里,如果指定requestType为blob,那么得到的返回值也是一个blob对象。
每次调用createObjectURL的时候,一个新的URL对象就被创建了。即使你已经为同一个文件创建过一个URL.,如果你不再需要这个对象,要释放它,需要使用URL.revokeObjectURL()方法.。当页面被关闭,浏览器会自动释放它,但是为了最佳性能和内存使用,当确保不再用得到它的时候,就应该释放它。版权声明:本文为****博主「峰子_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/weixin_37744601/article/details/79768832
欢迎关注微信公众号,公众号的好处是可以持续保持联系。
推荐阅读
-
如何使用bootstrap-fileinput工具快速预览选中的图片文件,而不进行实际上传操作
-
SSM三大框架基础面试题-一、Spring篇 什么是Spring框架? Spring是一种轻量级框架,提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。 Spring的6个特征: 核心技术:依赖注入(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务,DAO支持,JDBC,ORM,编组XML。 Web支持:Spring MVC和Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。 列举一些重要的Spring模块? Spring Core:核心,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring AOP:提供面向切面的编程实现。 Spring JDBC:Java数据库连接。 Spring JMS:Java消息服务。 Spring ORM:用于支持Hibernate等ORM工具。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对JUnit和TestNG测试的支持。 谈谈自己对于Spring IOC和AOP的理解 IOC(Inversion Of Controll,控制反转)是一种设计思想: 在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。 Spring中的bean的作用域有哪些? 1.singleton:该bean实例为单例 2.prototype:每次请求都会创建一个新的bean实例(多例)。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。 Spring中的单例bean的线程安全问题了解吗? 概念用于理解:大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。 有两种常见的解决方案(用于回答的点): 1.在bean对象中尽量避免定义可变的成员变量(不太现实)。 2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal(线程本地化对象)中(推荐的一种方式)。 ThreadLocal解决多线程变量共享问题(参考博客):https://segmentfault.com/a/1190000009236777 Spring中Bean的生命周期: 1.Bean容器找到配置文件中Spring Bean的定义。 2.Bean容器利用Java Reflection API创建一个Bean的实例。 3.如果涉及到一些属性值,利用set方法设置一些属性值。 4.如果Bean实现了BeanNameAware接口,调用setBeanName方法,传入Bean的名字。 5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader方法,传入ClassLoader对象的实例。 6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory方法,传入ClassLoader对象的实例。 7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。 8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执postProcessBeforeInitialization方法。 9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet方法。 10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。 11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization方法。 12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy方法。 13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。 Spring框架中用到了哪些设计模式? 1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。 2.代理设计模式:Spring AOP功能的实现。 3.单例设计模式:Spring中的bean默认都是单例的。 4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。 5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。 7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。 还有很多。。。。。。。 @Component和@Bean的区别是什么 1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。 2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。 3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。 @Configuration public class AppConfig { @Bean public TransferService transferService { return new TransferServiceImpl; } } <beans> <bean id="transferService" class="com.kk.TransferServiceImpl"/> </beans> @Bean public OneService getService(status) { case (status) { when 1: return new serviceImpl1; when 2: return new serviceImpl2; when 3: return new serviceImpl3; } } 将一个类声明为Spring的bean的注解有哪些? 声明bean的注解: @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解: @Autowired:由Spring提供 @Inject:由JSR-330提供 @Resource:由JSR-250提供 *扩:JSR 是 java 规范标准 Spring事务管理的方式有几种? 1.编程式事务:在代码中硬编码(不推荐使用)。 2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。 Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 Spring事务中有哪几种事务传播行为? 在TransactionDefinition接口中定义了八个表示事务传播行为的常量。 支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。 不支持当前事务的情况:PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 其他情况:PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。 二、SpringMVC篇 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC的工作原理了解嘛? image.png Springmvc的优点: (1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略。 Spring MVC的主要组件? (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 (2)处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler (3)处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。 (4)处理器Handler(需要程序员开发) (5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) (6)视图View(需要程序员开发jsp) View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等) springMVC和struts2的区别有哪些? (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。 (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。 SpringMVC怎么样设定重定向和转发的? (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com" SpringMvc怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。 如何解决POST请求中文乱码问题,GET的又如何处理呢? (1)解决post请求乱码问题: 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8; <filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (2)get请求中文参数出现乱码解决方法有两个: ①修改tomcat配置文件添加编码与工程编码一致,如下: <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ②另外一种方法对参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 Spring MVC的异常处理 ? 统一异常处理: Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; (3)使用@ExceptionHandler注解实现异常处理; 统一异常处理的博客:https://blog.csdn.net/ctwy291314/article/details/81983103 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写成员变量。(此题目类似于上面Spring 中 第5题 有两种解决方案) SpringMVC常用的注解有哪些? @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 可以在@RequestMapping注解里面加上method=RequestMethod.GET。 怎样在方法里面得到Request,或者Session? 直接在方法的形参中声明request,SpringMVC就自动把request对象传入。 如果想在拦截的方法里面得到从前台传入的参数,怎么得到? 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象? 直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面。 SpringMVC中函数的返回值是什么? 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的。 SpringMVC用什么对象从后台向前台传递数据的? 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以拿到数据。 怎么样把ModelMap里面的数据放入Session里面? 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。 SpringMvc里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可: <!-- 配置SpringMvc的拦截器 --> <mvc:interceptors> <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 --> <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean> <!-- 只针对部分请求拦截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors> 注解原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池 三、Mybatis篇 什么是MyBatis? MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 讲下MyBatis的缓存 MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口, 可在它的映射文件中配置<cache/> Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 简述Mybatis的插件运行原理,以及如何编写一个插件? 1)Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、 Executor这4种接口的插件,Mybatis通过动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4种接口对象的方法时,就会进入拦截方法, 具体就是InvocationHandler的invoke方法,当然, 只会拦截那些你指定需要拦截的方法。 2)实现Mybatis的Interceptor接口并复写intercept方法, 然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可, 记住,别忘了在配置文件中配置你编写的插件。 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? 1)Mybatis动态sql可以让我们在Xml映射文件内, 以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。 2)Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 3)其执行原理为,使用OGNL从sql参数对象中计算表达式的值, 根据表达式的值动态拼接sql,以此来完成动态sql的功能。 #{}和${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换。 2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值(有效的防止SQL注入); 3)Mybatis在处理${}时,就是把${}替换成变量的值。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具, 使用Hibernate查询关联对象或者关联集合对象时, 可以根据对象关系模型直接获取,所以它是全自动的。 而Mybatis在查询关联对象或关联集合对象时, 需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载, association指的就是一对一,collection指的就是一对多查询。 在Mybatis配置文件中, 可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 2)它的原理是,使用CGLIB创建目标对象的代理对象, 当调用目标方法时,进入拦截器方法, 比如调用a.getB.getName, 拦截器invoke方法发现a.getB是null值, 那么就会单独发送事先保存好的查询关联B对象的sql, 把B查询上来,然后调用a.setB(b), 于是a的对象b属性就有值了, 接着完成a.getB.getName方法的调用。 这就是延迟加载的基本原理。 MyBatis与Hibernate有哪些不同? 1)Mybatis和hibernate不同,它不完全是一个ORM框架, 因为MyBatis需要程序员自己编写Sql语句, 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句, 并将java对象和sql语句映射生成最终执行的sql, 最后将sql执行的结果再映射生成java对象。 2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql, 可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发, 例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁, 一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性, 如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 3)Hibernate对象/关系映射能力强,数据库无关性好, 对于关系模型要求高的软件(例如需求固定的定制化软件) 如果用hibernate开发可以节省很多代码,提高效率。 但是Hibernate的缺点是学习门槛高,要精通门槛更高, 而且怎么设计O/R映射,在性能和对象模型之间如何权衡, 以及怎样用好Hibernate需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、 扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。 MyBatis的好处是什么? 1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写, 给程序的维护带来了很大便利。 2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 3)因为MyBatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系? Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。 在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象, 其每个子元素会被解析为ParameterMapping对象。 <resultMap>标签会被解析为ResultMap对象, 其每个子元素会被解析为ResultMapping对象。 每一个<select>、<insert>、<update>、<delete> 标签均会被解析为MappedStatement对象, 标签内的sql会被解析为BoundSql对象。 什么是MyBatis的接口绑定,有什么好处? 接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加 上@Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定,在这种情况下, 要指定xml映射文件里面的namespace必须为接口的全路径名. 什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定;当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 MyBatis实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id, 去再另外一个表里面查询数据,也是通过association配置, 但另外一个表的查询通过select属性配置。 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 能,Mybatis不仅可以执行一对一、一对多的关联查询, 还可以执行多对一,多对多的关联查询,多对一查询, 其实就是一对一查询,只需要把selectOne修改为selectList即可; 多对多查询,其实就是一对多查询,只需要把selectOne修改为selectList即可。 关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象, 赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询, 一部分列是A对象的属性值,另外一部分列是关联对象B的属性值, 好处是只发一个sql查询,就可以把主对象和其关联对象查出来。 MyBatis里面的动态Sql是怎么设定的?用什么语法? MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现, 但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有 内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or 开始,那么会自动把这个and或者or取掉。 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。 第二种是使用sql列的别名功能,将列别名书写为对象属性名, 比如T_NAME AS NAME,对象属性名一般是name,小写, 但是列名不区分大小写,Mybatis会忽略列名大小写,