hjr-JAVA:Spring+Mybatis

#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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师小侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值