1,原始dao使用映射文件,没使用逆向工程 <!-- select标签表示sql查询,内容会封装到Mapped Statement中。 可以将这个select标签称为一个Statement id:Statement的id,用于标识select中定义的 sql,id是在同一个命名空间中不允许重复 #{}:表示一个占位符,避免sql注入 parameterType:表示输入参数的类型 resultType:表示输出 结果集单条记录映射的java对象类型,select查询的字段名和resultType中属性名一致,才能映射成功。 #{value}:value表示parameter输入参数的变量,如果输入参数是简单类型,使用#{}占位符,变量名可以使用value或其它的名称
-->
<select id="findUserById" parameterType="int" resultType="user" >
SELECT * FROM USER WHERE id = #{id}
</select>
<!-- 添加用户
parameterType:如果parameterType指定 是pojo,在#{}中指定 pojo的属性名获取该pojo的属性值
-->
<insert id="insertUser" parameterType="cn.itcast.ssm.po.User" >
以前没注意,原来这里就有!!!
select LAST_INSERT_ID() insert into user(username,birthday,sex,address,detail,score) values(#{username},#{birthday},#{sex},#{address},#{detail},#{score}) <!-- 根据主键用户更新
更新传入输入参数见容:id和更新的信息
-->
<update id="updateUser" parameterType="cn.itcast.ssm.po.User" >
update user set username=#{username},birthday=#{birthday},sex=#{sex} where id=#{id}
</update>
## 批量mapper扫描
<!-- 使用mapper批量扫描器扫描mapper接口
规则:mapper.xml和mapper.java在一个目录 且同名即可
扫描出来mapper,自动让spring容器注册,bean的id就是mapper类名(首字母小写)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 会话工厂 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<!-- 扫描包路径
多个包中间用半角逗号分隔
-->
<property name="basePackage" value="cn.itcast.ssm.dao.mapper"/>
</bean>
如此,这里可以去除 时 注入会话工厂
这个以后可以直接包扫描了吧?
<!-- 用户管理 -->
<bean id="userService" class="cn.itcast.ssm.service.impl.UserServiceImpl"/>
</beans>
properties
通知(Advice):
在AOP中,切面的工作被称为通知。通知定义了切面“是什么”以及“何时”使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。
Spring切面可以应用5种类型的通知:
前置通知(Before):在目标方法被调用之前调用通知功能
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么
返回通知(After-returning):在目标方法成功执行之后调用通知
异常通知(After-throwing):在目标方法抛出异常后调用通知
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
连接点(Join point):
连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加行为。
切点(Pointcut):
如果说通知定义了切面“是什么”和“何时”的话,那么切点就定义了“何处”。比如我想把日志引入到某个具体的方法中,这个方法就是所谓的切点。
切面(Aspect):
切面是通知和切点的结合。通知和切点共同定义了切面的全部内容———他是什么,在何时和何处完成其功能。
引入(Introduction):
引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能)。
织入(Weaving):
把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:
编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器
类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码
运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了JDK的动态代理技术
Spring对AOP的支持
基于注解的方式
基于XML配置的方式
<mvc:annotation-driven />
<!-- 视图解析器 解析jsp视图,默认使用jstl,要求classpath下有jstl的jar包 -->