笔记

mybatis步骤##

1.导jar包和配置文件(mybatis-config.xml)###

MyBatis的核心包:mybatis-3.1.1.jar
MyBatis依赖的jar包:lib/*.jar
MySQL的驱动包:mysql-connector-java-5.1.7-bin.jar

2.加载配置文件:mybatis-config.xml

<configuration>
<properties resource="jdbc.properties"></properties>
<settings>
	<setting name="logImpl" value="LOG4J" />
	<!-- 配置映射级别  
	1.默认PARTIAL 表示自动映射 相同的属性自己映射 不同属性手动显示 只针对简单映射
	2.禁用autoMappingBehavior 都要手动映射 
	3.有复杂映射时 要用full全映射-->
	<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<typeAliases>
	<!-- 对单个类取别名 -->
	<typeAlias type="com.bdqn.entity.User" alias="User"/>
	<!-- 对包下面所有类取别名 别名就是类名 -->
	<package name="com.baqn.entity.User"/>
</typeAliases>
<environments default="development">
	<environment id="development">
		<!--配置事务管理,采用JDBC的事务管理  -->
		<transactionManager type="JDBC"></transactionManager>
		<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
		<dataSource type="POOLED">
			<property name="driver" value="${jdbcDriver}"/>
			<property name="url" value="${jdbcURL}"/>
			<property name="username" value="${jdbcUser}"/>
			<property name="password" value="${jdbcPassword}"/>
		</dataSource>
	</environment>
</environments>
<mappers>
	<mapper resource="com/bdqn/Mapper/UserMapper.xml"/>
</mappers>

3.UserMapper

public interface UserMapper {
	public List<User> getUserListBynameandrole(
			@Param("name") String username,
			@Param("role")int role);
}

MybatiesUtil(全局唯一工厂)

public class MybatisUtil {
		private static SqlSessionFactory factory;
		static{
			try {
				InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
				factory=new SqlSessionFactoryBuilder().build(is);
			} catch (IOException e) {
				e.printStackTrace();
			}
		 
		}
		public static SqlSession createSqlSession(){...}
		public static void closeSqlSession(SqlSession sqlSession){...}
	}

UserMapperImpl实现这个接口,重写方法

public List<User> getUserListBynameandrole(String username,int role) {
	List<User> user=null;
	SqlSession sqlSession=null;
	try {
		sqlSession=MybatisUtil.createSqlSession();
		user=sqlSession.getMapper(UserMapper.class).getUserListBynameandrole(username,role);
	} catch (Exception e) {
	}finally{
		sqlSession.close();
	}
	return user;
}

注意 :单个映射文件的id不能相同,所以mybatis里面的接口方法不能重载,多个参数需要加注解,字段名不一致时 可以通过取别名和resultMap映射

4.MyBatis的映射文件 UserMapper.xml

<!-- namespace写对应dao的报名+类名 -->
<mapper namespace="com.bdqn.mapper.UserMapper" >
	<select id="login" resultType="com.bdqn.entity.User">
		select * from smbms_user where userName=#{name} and userPassword=#{password}
	</select>
</mapper>

Spring

属性注解

构造注入(通过构造器实现,灵活性差,效率高)、设置注入(通过访问器实现,灵活性高,效率差)
构造注入:(不需要set方法,但是必须要有参构造方法,属性没有顺序之分,
如需设置顺序:index=“0/1/2”,对应构造方法的顺序)

	@Autowired注解
	1.在属性的set方法前面或者属性上面加上@Autowired
	2.在spring里面配置@Autowired的处理bean
	3.spring启动的时候创建userServiceImpl实例的时候,如果看见Autowired注解就回去spring容器里面去查找该注解的处理bean,如果找到,就按照类型给方法的入参或者属性赋值,找不到则忽略注解
	4.如果没有对应的属性bean就会报异常,NoSucnBeanDefinitionException
	可以@Autowired(required=false)这样写,找不到就给这个属性为null
	2.@Resource注解
	1.@Resource注解默认按照名字查找
	如果不写名字,他会按照属性名字查找,如果属性名也找不到就按照类型查找
	@Autowired按照类型查找,@Resource按照名字查找,以后项目中多使用@Autowired的

类的注解###

 	1.在类上面加@Component
 	2.@Component这个注解可以注解任意层次的类 
 	3.因为在spring配置文件没有bean的配置了,spring通过context:component-scan去扫描对应的包里面哪些类使用了类的注解
 	4.找到了就帮你创建bean
 	5.context:component-scan里面包含了context:annotation-config的全部内容
 	6.类注解产生的bean默认名字是类名 第一个字母小写
 	7.给类取名字@Component("aa")
 	8.@Repository注解dao,Service注解service,Controller注解控制层
 	9. context:component-scan配置多个包,用,隔开
 	10.context:component-scan可以写多个,推荐用这种 

Aop:动态代理

	<bean id="userServiceLogger" class="com.bdqn.aop.UserServiceLogger"></bean>
	<!-- pointcut的表达式写法
		1.execution(public User saveUser(com.bdqn.entity.User))具体到对应方法
		2.execution(public User saveUser(..))具体到对应方法有0个或者多个
		3.execution(* com.bdqn.service.impl.UserServiceImpl.*(..))表示这个类下面的所有方法,第一个*所有返回类型,第二个*该类下的所有方法
		4.execution(* com.bdqn.service.impl.*.*(..))第一个*所有返回值类型,第二个*表示impl包下的所有类,3*该类下的所有方法
		5.execution(* com.bdqn.service..*.*(..))
	 -->
	<aop:config>
		<aop:pointcut  id="pointcut" expression="execution(* com.bdqn.service.*.*.*(..))"/>
		<aop:aspect ref="userServiceLogger">
			<aop:before method="bef" pointcut-ref="pointcut"/>
			<aop:before method="bef1" pointcut-ref="pointcut"/>
			
			<aop:after-returning method="after" pointcut-ref="pointcut"/>
			<aop:after-returning method="after1" pointcut-ref="pointcut" returning="result"/>
		</aop:aspect>
	</aop:config>

Spring提供的快速引用(需添加头文件),一次性全部配置所需要的bean<context:annotation-config/>

Spring+Mybatis整合

SqlSessionTamplate和SqlSession的实现类是不一样的
SqlSessionTamplate是线程安全的单例模式,表示全局唯一,不需要关闭
需要在mybatis-config里面写的内容在application-context中写

1、导包

(1).Spring的包
(2).mybatis的包   
(3).再导入一个结合的包

2.applicationContext.xml配置文件

引入数据源

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="classpath:database.properties"/>
</bean>

配置数据源

<bean id="dataSource"
 class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="${driver}"></property>
	<property name="url" value="${url}"></property>
	<property name="username" value="${user}"></property>
	<property name="password" value="${password}"></property>
</bean>	

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	<!-- 当接口和映射文件在同一目录下 并且名字相同可以不写映射文件xml的配置 此处未省略-->
	<property name="mapperLocations" value="classpath:com/bdqn/mapper/**/*.xml"></property>
</bean>

处理bean

<bean id="userService" class="com.bdqn.service.impl.UserServiceImpl" autowire="byName" ></bean>
<context:component-scan base-package="com.bdqn.service"/>

Spring MVC##

封装了Servlet
M:Model 对应组件JavaBean V:View 对应JSP或者html	C:Controller 对应Servlet

1.配web.Xml

配置spring的监听器
ContextLoaderListener实现了servletContextListner
监听器接口,就拥有监听tomacat服务器的启动和关闭的功能
当tomcat启动的时候,监听到了这个行为,就会让spring容器产生已经配置了的bean,不管是手动配置还是
还是有注解,都会让tomcat启动的时候给你创建好这些bean

<listener>
  	<listener-class>
  		org.springframework.web.context.ContextLoaderListener
  	</listener-class>
</listener>

springMVC的配置文件默认要放在/WEB-INF/,更改路径需要设置<init-param>

<!-- 配置springMVC -->
<servlet>
	<servlet-name>springMVC</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springMVC-servlet.xml</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>springMVC</servlet-name>
	<!-- 
		<url-pattern>*.do</url-pattern>
	 -->
	<url-pattern>/</url-pattern>
</servlet-mapping>

过滤器

<!-- 配置解决中文乱码的过滤器 -->
<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>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

2.配置bean

3.新建controller

处理器到页面:三种保存数据方式,三种情况的数据全部都是保存在request里面的

  1. 使用modelAndView作为返回值

  2. 在处理器上加Model类型变量接收隐含对象的引用

  3. 在处理器加上Map类型变量

    Controller 里面的处理方法的注解
    1.@RequestParam如果有参数不是必须的,需要把属性required=false
    2.@ModelAttibute把参数放到隐含对象model里面
    3.@Vaild使用JSR303验证
    4.@PathVariable获取RESTful请求参数

4.RESTful

RESTful风格只针对get方式
地址栏不再出现?和=
RESTful风格把对项目的任意操作都当着一个独一无二的URL请求来表示
SpringMVC提供了@PathVariable注解
可以将URL中的{xxx}占位符参数绑定到控制器处理方法的入参中去
使用RESTful尽量少传中文,还有要注意每一个变量的类型
多个参数@RequestMapping(“/aa/{name}/{pwd}”)
以后get提交方式尽量使用RESTful方式
Post提交使用对象接收参数
若入参对象MultipartFile为数组时,该参数前面必须要加上@RequestParam注解,否则会报错

静态资源的处理

sprinfMVC对静态资源的处理方式(图片,css,js,html) 
   1.使用mvc:default-servlet-handler注解
   会在SpingMVC上下文中国定义一个
   DefaultServletHttpRequestHandler,它会像一个检查元
   对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求
   就将该请求转由Web应用服务器默认的Servlet处理
   tomcat的默认Servlet
   org.apache.catailne.servlets.DefaultServlet
   如果不是静态资源的请求,才由DisatcherServlet继续处理
   一旦加上mvc:default-servlet-handler这个标签之后
   mvc:annotation-driven不能删除
   2.使用mvc:resources  location表示本地路径 mapping表示映射路径
   	一个本地路径可以映射成多个路径
   	一个*表示当前目录下所有文件
   	两个*表示当前目录下或者他的子目录下的所有文件

异常处理

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<!-- 默认异常处理逻辑视图名 -->
	<property name="defaultErrorView" value="error"></property>
	<property name="exceptionMappings">
		<props>
			<prop key="java.lang.RuntimeException">RTERROR</prop>
			<prop key="java.sql.SQLException">RTERROR</prop>
		</props>
	</property>
	<!--默认把异常放在作用域里面, 默认key为exception 可以修改 -->
	<property name="exceptionAttribute" value="ERRO1"></property>
</bean>

配置文件上传解析器

<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
	<property name="maxUploadSize" value="500000"></property>
	<property name="defaultEncoding" value="UTF-8"></property>
</bean>

JSON数据传递

post方法

第一个参数表示请求, 第二个参数表示请求的参数, 第三个参数表示成功的回调函数

function testD(){
		$.post("user/getAllUserList",function(data){
			$(data).each(function(i,user){
				$("#tab1").css("display","block");
				var tr = "<tr>"
						+"<td>" + user.username + "</td>"
						+"<td>" + user.password + "</td>"
						"</tr>";
				$("#tab1").append(tr);
			});
		},"json");
	}
解决Json数据中文乱码

1.在控制器处理方法上的@RequestMapping中配置produces

@RequestMapping(value="/getAllUserList",
		produces="application/json;charset=UTF-8")
@ResponseBody
public String getAllUserList(){
	......
}

2.装配消息转换器 StringHttpMessageConverter,设置编码字符集为UTF-8

<mvc:annotation-driven>
	<mvc:message-converters>
		<!-- 
			springMVC使用StringHttpMessageConverter对应的编码集ISO-8859-1
			配置消息转换器去代替默认的消息转换器的属性 -->
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<!-- 
			<property name="supportedMediaTypes">
				<list>
					<value>text/html;charset=UTF-8</value>
					<value>application/json;charset=UTF-8</value>
				</list>
			</property>
			 -->
			 <!-- 一次配置,永久搞定,所有媒体类型有效 -->
			<property name="defaultCharset" value="UTF-8"/>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>
JSON数据传递格式问题

1.注解方式@JSONField(format= "yyyy-MM-dd")
2.配置FastJson的消息转换器 FastJsonHttpMessageConverter

<mvc:annotation-driven>
	<mvc:message-converters>
		<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4">
			<!-- 默认编码集是UTF-8,使用这个属性可以不配置,中文不会乱码 -->
			<property name="supportedMediaTypes">
				<set>
					<value>text/html;charset=UTF-8</value>
					<value>application/json;charset=iso-8859-1</value>
				</set>
			</property>
			<!-- features特性 -->
			<property name="features">
				<list>
					<!-- 配置WriteDateUseDateFormat时间特性
					           表示controller的处理方法返回json数据
					           时间会格式化为yyyy-MM-dd HH:mm:ss
					           
				         controller的处理方法返回json带时间的问题
				         1.什么都不加就是时间戳
				         2.只是有WriteDateUseDateFormat特性显示格式为yyyy-MM-dd HH:mm:ss
				         3.使用WriteDateUseDateFormat特性和@JSONField(format="yyyy-MM-dd")
				                        注解生效
				          -->
					<value>WriteDateUseDateFormat</value>
				</list>
			</property>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>

3.多视图解析器ContentNegotiatingViewResolver 视图解析器的功能则是依据指定的规则来查找相应的视图。

<!-- 配置自定义的conversion-service
 -->
 <bean id="myConversionService"
 	class="org.springframework.context.support.ConversionServiceFactoryBean">
 	<property name="converters">
 		<set>
 			<!-- 配置自定义date转换器 -->
 			<bean class="com.bdqn.util.StringtoDateConverter">
 				<constructor-arg value="yyyy-MM-dd"/>
 			</bean>
 			<bean class="com.bdqn.util.StringToOtherStringConver">
 				
 			</bean>
 		</set>
 	</property>
 </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值