关于SSM框架的复习

一、SpringIOC

1.不同的类之间建立依赖关系,比如Person类依赖于Car类,组合方法:

①.传统方式

//1、创建业务对象person
		Person person = new Person(null, null);
		person.setName("小明");
		//2、创建业务对象person所依赖的对象car
		Car car = new Car();
		car.setBrand("法拉利");
		//3、把依赖对象和业务对象组合起来
		**person.setCar(car);**  //将car作为这个person类的属性进行注入,car变成了person的一部分

②.通过配置文件属性注入

<bean id="person" class="demo.Person">
<!-- 属性注入 -->
<!-- <property name="name" value="小明"></property>
<property name="car" ref="car1"></property>

③.构造器注入
构造器注入和属性注入都是再bean标签下进行的
④.一般情况下我们采用属性注入的方式进行,构造器注入略显臃肿,但是构造器注入会可以决定注入顺序。

2.标签注解(通过标签装配)

1.resposity标注数据库相关类,service标示服务层组件类,controller标识控制层组件类,这三个是用来**“备用”的注解,先写好,等到用到时通过注解进行处理。
2.标注之后在不指定名字的情况下,类名默认为小写。
3.@autowird按照类型进行装配,@source按照名字进行装配。着两个是用来
“用”**的注解。

3.调用顺序

controller层调用service层,service层调用Dao层

4.SpringIOC通过配置管理容器中的bean

1.标签注解之后需要在配置文件中加入“context:component-scan”
使用的方式:
①在各层加入注解
②在使用之前加入注解,定义变量,此时属性自动注入
如:
@Resource
private CourseService courseservice;

注解:通过标签仅仅是进行装配,若要属性注入,还需要在配置文件中

2.xml配置文件的方式:
①属性注入
要求有无参构造函数、set方法
②构造器注入
要求有有参构造函数

5.关于SpringIOC的理解:

通过配置文件将类进行了打包,并且指定id名称,还可以对其进行赋值操作。赋值操作需要在配置文件中进行。

############################################################################################################

二、Spring Aop

1.SpringAop

SpringAop面向方法进行编程,在调用方法时当我们需要给该方法附加上某种功能的时候,就需要在切面类中进行处理。
通过切入点表达式来进行需要附加功能的方法的指示。

1.切入点表达式,通过切入点表达式进行处理,可以实现在某些方法之前加上前置、后置通知(JDK形势下需要进行接口的实现)。
2.切入点表达式是用来查找固定位置的。
execution(方法的返回值类型、方法名)
例:execution(public int 包名.类名.方法名)
3.SpringAop步骤:
1.接口实现
2.配置文件:<aop:aspectj-autoproxy proxy-target-class=“true”></aop:aspectj-autoproxy>
true需要使用cglib库
3.在通知的那个类加@Aspect注解

2.spring2项目步骤

1.jar包:aop,aspects:版本相同
2.目标方法的实现:MathInterImpul(实现接口).加减乘除法。需要加@component注解
3.通知/增强:Timetool类.方法
指定切入点,
加注解标识通知类型(@before、@after)
4.配置文件:扫描包,让注解生效;配置aspectJ让注解生效
5.获得目标类的对象,用一个接口去接收

############################################################################################################

3.Spring事务

开始步骤:

1.jar包:数据库包mysql,spring-tx事务支持的jar包,c3p0,
spring-jdbc,junit
2.选上tx命名空间
3.注解扫描,管理类的对象

4.配置数据源信息

①数据源配置

<!-- 数据源配置信息  c3p0 需要mysql-connector-java 5.1.8和c3p0 0.9.1.2这两个jar-->
<bean id="*dataSource*" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"/>
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="user"  value="${user}"/>
<property name="password"  value="${password}"/>

②配置JDBC模板

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="*dataSource*"></property>
    </bean>

③为数据源添加事务管理器

<!-- 为数据源添加事务管理器 -->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="*dataSource*"></property>
</bean>

④加载事务注解支持,和③中事务管理器相关

<!-- 加载事务注解支持 -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>

2.受事务管理的语句要么全部执行成功,要么一条也不执行成功
3. 加入@Test测试后,可以进行Junit测试,并且可以不含有main方法

############################################################################################################

三、mybatis(ibatis是其前身)

使用mybatis框架可以简化数据库操作

1.步骤

1.创建Java Project,导入MyBatis jar包、依赖包、数据库驱动包
2.创建数据库和表
3.创建持久化类(POJO)
4.创建MyBatis映射文件Mapper.xml,编写SQL语句
5.创建MyBatis核心映射文件Config.xml,配置数据库连接信息及映射文件
6.创建测试类,测试运行结果,创建测试类的步骤:
①读取配置文件
②根据配置文件构建SqlSessionFactory
③通过SqlSessionFactory创建SqlSession
④使用SqlSession对象操作数据库,包括增删查改以及提交事务
⑤关闭SqlSession

2.toString返回类的字符串描述,查询数据库返回的数据类型是实体类型

2.标签

1.配置文件中的标签(标签之间需要有顺序):
properites标签用于将内部的文件外部化,例如在项目中将数据库相关文件放置于一个专门的文件中
typealiase标签用于给文件起别名,一是直接指定一个类设定别名,第二个是指定一个包设定别名,别名设置为首字母小写。

<typeAliases>
		<typeAlias type="com.qst.po.Employee" alias="employee"/>
</typeAliases>

mappers标签用于将映射文件引入,有两种方式,一种是类路径引入,第二一种是包名引入(需要接口,接口中的函数要根据映射文件中的sql问来进行书写(返回值类型、名称、参数要对应))。

<mappers>
		<!-- 使用类路径引入 -->
		<mapper resource="com/qst/mapper/EmployeeMapper.xml" />
		<mapper resource="com/qst/mapper/EmployeeTaskMapper.xml" />
		<!-- 使用包名引入 -->
		<!-- <package name="com.qst.mapper"/> -->
</mappers>

2.映射文件标签
mapper标签下的"insert,update,delate"执行后返回代表操作整条数据的整数
sql标签下定义可重用的SQL代码片段,也就是对一长串片段进行重新命名。再次用到时,方便使用。
resultMap标签进行映射,将数据库中的属性和实体类的属性建立关系

3.映射关系

一对一:
雇员和工牌一对一关联

private WorkCard workCard;

一对多:
雇员和员工任务一对多关联

private List<EmployeeTask> EmployeeTaskList;

多对多:
雇员和角色多对多关联:

private List<Role> roleList;

{
关系数据库中夺标之间的三种映射关系:
一对一:在任意一方引入对方主键作为外键
一对多:在多的一方添加一的一方主键作为外键
多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或者使用新的字段作为主键。

}

创建子查询步骤:
1.创建员工类(1)、员工任务类(多)
2.在员工表中加入一个属性:员工任务集合
3.书写员工类映射文件、员工任务类映射文件
4.在主查询映射文件中查询建立映射关系(当进行主查询的过程中同时进行子查询)
5.在配置文件中进行类路径引入

子查询主要文件代码:

员工映射文件:

<mapper namespace="com.qst.mapper.EmployeeMapper">

//子查询映射关键
<resultMap type="com.qst.po.Employee" id="employeeRelationMap">
<collection property="employeeTaskList" ofType="com.qst.po.EmployeeTask" 
			column="empid" select="com.qst.mapper.EmployeeTaskMapper.selectEmployeeTaskById">
</collection>
</resultMap>
	

<!-- 根据id精确查询单条数据 -->
<select id="selectEmployeeById" resultMap="employeeRelationMap" parameterType="Integer"> 
select * from tb_employee where empid = #{empid}  
</select>


</mapper>

员工任务映射文件:

<mapper namespace="com.qst.mapper.EmployeeTaskMapper">
<!-- 根据id精确查询单条数据 -->
<select id="selectEmployeeTaskById" resultType="com.qst.po.EmployeeTask" parameterType="Integer"> 
		select * from tb_employee_task where empid = #{empid}  
</select>
</mapper>

4.动态查询

动态查询有很多标签,比如
if:判断语句
choose(otherwise,when):多条件分支判断(switch、case、default)
where、trim、set:特殊字符问题
foreach:循环语句
bind:模糊查询

具体分析:

trim标签:在其内的语句中选择多条。可以为sql语句加上前缀、后缀以及去除包含内容前后的特殊字符串。

trim标签拼接上的字段实现了相关的功能,trim标签下的if是多个进行拼接的。

<update id="updateTrimTest" parameterType="employee">
update tb_employee
<trim prefix="set" suffixOverrides="," suffix="where empid = #{empid}">
<if test="name!=null and name!=''">
		name=#{name},
</if>
<if test="gender!=null and gender!=''">
		gender=#{gender},
</if>
<if test="position!=null and position!=''">
		position = #{position},
</if>
</trim>
</update>**加粗样式**

choose(otherwise,when)标签:只选择一个进行拼接
where标签:能够智能的处理sql文中的and、or
set标签:包含的内容为空时将会出错,如果标签内语句结尾(多余)有“逗号”,则会将“逗号”忽略。
**foreach标签:**主要用在用在构建in条件中,它可以在sql语句中迭代一个集合(未进行实际测试。。。。。。。。。。。。。。。。)
**bind标签:**主要用来模糊查询
1.用下面的方式进行模糊查询往往移植性不太好,虽然在sql中能够运行出来,但是在oracle中无法运行。

<select id="selectEmployeeByName" parameterType="String" resultType="com.qst.po.Employee">
select * from tb_employee where name like concat('%',#{name},'%')
</select>

2.${ }标签容易让数据库遭到攻击
3.所以最合适的还是bind标签进行模糊查询

映射文件:

<select id="selectBindTest" parameterType="employee" resultType="com.qst.po.Employee">
		<bind name="test_name1" value="'%'+name+'%'"/>
		select * from tb_employee where name like #{test_name1}
</select>

测试类:

		Employee employee = new Employee();
		employee.setName("王");
		List<Employee> employeeList = sqlSession.selectList("selectBindTest", employee);
		for (Employee employee1 : employeeList) {
			System.out.println(employee1);
		}
		

###################################################
###################################################
通过注解传递多个参数:
注解中的属性和映射文件中的属性相同即可。
映射文件:

<!-- 通过注解传递多个参数(一般适合传递参数较少的情况) -->
<update id="updateAnnotationTest">
		update tb_employee
			set	gender=#{gender}
		where empid = #{empid}
	
</update>

接口:

public void updateAnnotationTest(@Param("gender") Integer gender1,@Param("empid") Integer empid1);

测试类:

EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
employeeMapper.updateAnnotationTest(0, 10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值