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>
1 0
原创粉丝点击