hjr教程-JSP(七):Spring+Mybatis
来源:互联网 发布:火炬之光2 mac 编辑:程序博客网 时间:2024/05/29 17:45
Spring
控制反转(IOC)
注册服务
@Autowired private IUserService iUserService;
先新建一个服务包,里面写一个某种功能的接口IFun
建一个业务包,里面有多个业务的类实现IFun接口,如Fun1和Fun2,还有一个工厂
工厂构造函数
gc(对象 dx){}
当依赖注入后,直接dx.fun就执行不同的功能
最后在控制器里面使用时,
工厂 gc = 工厂(new Fun1());gc.fun();
这样我们可以仅仅改动
IFun ifun = new Fun1();
为 IFun ifun = new Fun2();
其中Fun1和Fun2都是依赖,这些依赖注入了工厂,这些依赖的更改放到配置文件里,通过反射技术,跟据配置更换实现的主体,这就是IOC控制反转也叫依赖注入。
注入方法有很多种
- 属性注入
- 构造方法注入
- 工厂方法注入
AOP
建一个有传参qm的切面类,里面有前置通知、后置通知、环绕通知、返回通知、异常通知方法。
在配置文件中配置该切面,输入能匹配到的该切面的一系列类、方法,如com.xxx.xxx.*.*.()
通过一些特殊符号匹配
其中qm参数具有getClassName()之类的反射功能,可以得到匹配到的方法、类的信息
在切面类里可以在几种通知的地方进行日志,异常处理之类的事。Spring中AOP主要以拦截器的形式体现
Spring主要就是帮助实现上面的两种功能的,本身并没有什么代码给我们用,只是提供一个服务,你按照他要求的格式写,他就会帮你实现类自动装配、请求拦截之类的功能。
拦截器
在spring-mvc.xml中配置:
<mvc:interceptor> <mvc:mapping path="/**/*" /><!-- 不拦截的url --> <mvc:exclude-mapping path="/xxx/xxx.do"/> <mvc:exclude-mapping path="/xxx/*"/> <mvc:exclude-mapping path="/xxx/to*.do"/> <bean class="com.xxx.xxx.lanjieqi(这里写你的拦截器类路径)"></bean> </mvc:interceptor>
拦截器类这么写
public class AdminSessionValidator implements HandlerInterceptor{ /** * 在请求处理之前执行,该方法主要是用于准备资源数据的,然后可以把它们当做请求属性放到WebRequest中 * 如果回值为false,当preHandle的返回值为false的时候整个请求就结束了。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { User user = (Xxx) request.getSession().getAttribute("xxx");//获取session String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; if(xxx == null) { response.sendRedirect(basePath+"index.jsp?state=1");//重定向页面跳转 return false; } return true; } /** * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。 * 该方法将在Controller执行之后,返回视图之前执行,ModelMap表示请求Controller处理之后返回的Model对象,所以可以在 * 这个方法中修改ModelMap的属性,从而达到改变返回的模型的效果。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub(存根) } /** * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行 * 该方法将在整个请求完成之后,也就是说在视图渲染之后进行调用,主要用于进行一些资源的释放 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub(存根) } }
Mybatis
每个模型对应一个mapper,每个mapper由一个java类与一个xml文件组成
xml负责sql语句模板,class文件负责定义接口
其余class直接调用接口的方法就可以访问数据
其中mapper.xml文件需要定义传入参数数据类型和返回数据类型,如果加了@Param()就不需要在mapper.xml中定义传入参数类型。
定义传入和传出参数时如果只有一个参数,用对应类型,如果有多个参数用Map或List
自动生成
mybatis可以自动生成model、mapper.xml和mapper.java,具体方法
1. 先下载mybatis-generator-core-1.3.0-bundle
版本自定
2. 解压后在lib文件夹中新建generatorConfig.xml
文件,内容见下
3. 复制mysql-connector-java-5.1.26-bin.jar包到当前目录,并在当前目录新建一个src文件夹
4. 按住shift+鼠标右键->在此处打开命令窗口,输入java -jar mybatis-generator-core-1.3.0.jar -configfile generatorConfig.xml -overwrite
generatorConfig.xml
文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <!--数据库驱动--> <classPathEntry location="mysql-connector-java-5.1.26-bin.jar"/><!--此处和复制过来的mysql连接包一致--> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://x.x.x.x:3306/xxx(数据库连接url)" userId="用户名" password="密码"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--生成Model类存放位置--> <javaModelGenerator targetPackage="com.xxx.web.dao.model(这里根据自己项目的路径写)" targetProject="src"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件存放位置--> <sqlMapGenerator targetPackage="com.xxx.web.dao.mapper(这里根据自己项目的路径写)" targetProject="src"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--生成Dao类存放位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.xxx.web.dao(这里根据自己项目的路径写)" targetProject="src"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--生成对应表及类名,下面的那设置true和false是自选的,需要那个功能就选--> <table tableName="表名" domainObjectName="model类名" enableCountByExample="false" enableUpdateByExample="true" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false"></table> </context></generatorConfiguration>
- hjr教程-JSP(七):Spring+Mybatis
- hjr教程-JSP(三):Struct2+Hibernate
- hjr教程-JSP(四):SpringMVC入门
- hjr教程-JSP(五):SpringMVC进阶
- hjr教程-JSP(一):一个jsp页面的建立
- hjr教程-JSP(六):J2EE项目架构
- hjr教程-JSP(二):Jquery的ajax在jsp上的实现
- Spring Boot系列教程七:Spring boot集成MyBatis
- Spring学习(七)spring整合mybatis
- hjr教程-Android(二):Sqlite数据库
- hjr教程-Android(三):关于Log
- hjr教程-DSP(一):CCS软件
- hjr教程-DSP(二):CMD文件
- hjr教程-汇编(三):关于寻址
- hjr教程-C(二):关于指针
- hjr教程-MySQL(一):入门篇
- hjr教程-Python(二):Django
- hjr教程-ASP.NET(四):Webservice
- import sun.misc.BASE64Decoder;报错的解决办法
- myEclipse刚打开启动报Errors running builder 'DeploymentBuilder' on project '工程名' xxxNullpointException 的错误
- Nginx+keepalived实现高可用的负载均衡
- 每日英语
- 第3周测试题解析
- hjr教程-JSP(七):Spring+Mybatis
- #pragma once 与 #ifndef含义
- ReactNative学习笔记--下拉选择菜单的简单封装
- vue-resource拦截器设置头信息
- C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞
- delphi 判断目录是否有写入权限
- [CSS] 详细解释 @media 属性与 (max-width:) and (min-width) 之间的关系及用法
- opengl学习
- include和require等的区别