SSM——20191204小测试总结

一、Mybatis中保存一条记录,返回主键有哪些要求?【10分】


保存一条记录,返回主键有两种方法:保存记录时获取主键、保存记录后获取主键

Ⅰ、在保存记录时能够返回主键的关键所在:SQL标签中添加三个属性。即,

①【useGeneratedKeys】的值————>必须设置为【true】,否则无法获得主键id,

可以在【mybatis-config.xml】中设置:

<settings>
	<setting name="useGeneratedKeys" value="true"/>
</settings>

②【keyProperty】————>设置为POJO对象的主键id【属性名称

③【keyColumn】————>设置为数据库记录的主键id的【字段名称

Ⅱ、在保存记录之后获取主键,用到了【selectKey】标签

<selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
            select LAST_INSERT_ID()   
    或者    select @@identity
</selectKey>

要求:

①【keyProperty】————>设置为POJO对象的主键id【属性名称

②【keyColumn】————>设置为数据库记录的主键id的【字段名称

③【resultType】————>设置为获取主键的SQL语句的返回值的【数据类型

④【order】——————>设置获取主键的SQL语句在保存记录之前【BEFORE】还是之后【AFTER】执行

SQL语句有两种:

# 查询最后一次添加的SQL语句中的主键的值
select LAST_INSERT_ID();
select @@identity

 

 

二、请写出使用Mybatis的Mapper代理的步骤;dao有啥要求?映射文件有什么要求?【10分】


mapper:相当于Java里面的类

namespace:相当于Java里面的包名

使用Mapper代理的要求:

————> namespace:必须是Dao接口的包名+类名

————> sql标签中的id:必须和dao接口中的方法名一样,唯一标识,id不能重复

————> parameterType:必须和dao接口方法中的形参类型一样

————> resultType:必须和dao接口方法中的返回值类型一样

——————> 如果查询的是单条,那么返回值类型就是resultType

——————> 如果查询的是多条,那么返回值的类型是List,List里面放的是resultType

 

Ⅰ、接口和Mapper文件必须在同一目录下

Ⅱ、mapper.xml中namespace指定为mapper接口的全限定名

Ⅲ、mapper.xml中statement的id就是mapper.java中方法名

Ⅳ、mapper.xml中statement的parameterType和mapper.java中方法输入参数类型一致

Ⅴ、mapper.xml中statement的resultType和mapper.java中方法返回值类型一致.

 

三、请写出Mybatis中映射文件的动态SQL语句常用的SQL标签有哪些?分别代表什么含义?【10分】  ——> 9分


where

if

when

otherwise

choose

set

sql

include

trim

foreach

test

 

四、Mybatis中实现一对多的关联关系的步骤有哪些?【10分】


Ⅰ、数据库两表关联字段

A表的主键列是B表的外键列,即,A表——>B表为一对多的关系

Ⅱ、映射文件中需要为两表的关联字段重新赋值

<!--  A表是一的一方,B表是多的一方 -->
<mapper namespace="A表">
    <select id="findList" resultMap="resultMap" parameterType="A表对应的POJO类的类全限定名">
        <!-- 为重复字段【两表中的关联字段】重新赋值 -->
        <id column="A表中主键ID字段名" property="A表POJO类主键ID对应的属性名"/>
        <property id="B表POJO类中的A表的自定义引用属性名" column="B表中关联字段的属性名" 
            ofType="B表的类全限定名" select="B表.findList">
    </select>
</mapper>

<mapper namespace="B表">
    <select id="findList" resultType="B表对应的POJO类的类全限定名">    
        select * from B表 where  B表关联字段ID = #{ID}
    </select>
</mapper>

Ⅲ、Mapper文件需要在全局配置文件中配置,以便加载配置时知道Mapper文件的位置

 

五、Mybatis的分页有三种,分别是什么?【10分】——> 9分


Ⅰ、数组分页 ?

Ⅱ、SQL分页

mysql分页关键字 limit

postgresql分页关键字 offset

oracle 分页:三层rowNum 嵌套

分页必备的两个要素:总条数、每页多少条

<select id="page_Query" resultType="POJO类的全限定名">
    select * from 表名 
    limit 3,2
</select>

Ⅲ、拦截器+插件配置分页

①、在【mybatis.cfg.xml】文件中配置插件;【注意插件配置的顺序】

<!-- 配置插件 -->
<plugins>
	<!-- 插件 -->
	<plugin interceptor="com.github.pagehelper.PageInterceptor">
		<!-- 参数
			reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,
			pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),
			会查询最后一页。默认false 时,直接根据参数进行查询。
		 -->
		<property name="reasonable" value="true"/>
	</plugin>
</plugins>

 ②、在映射文件中,配置SQL语句

<select id="page_3" resultType="分页类的全限定名">
	select * from 类对应的表
</select>

插件:pageHelper:Page page = pageHelper.startPage(a,b);

总条数:page.getTotal();

总页数:page.getPageSize();

每页条数:page.getPages();

page.getPageNum();

③、PageHelper插件分页查询的测试类及运行结果 

PageHelper插件分页查询的测试类及运行结果

 

PageHelper插件分页查询的测试类及运行结果02

Ⅳ、RowBounds分页

Mybatis自带的RowBounds分页的测试类及运行结果如下:

 

六、Spring中的IOC和DI分别代表什么含义,请解释一下?【10分】


IOC:【Inversion Of Controller】控制反转

将对象实例化的操作交给Spring IOC容器进行封装处理成一个个的Bean,通过反射的原理获得该对象

DI:【Dependency Injection】依赖注入

分为三大类:构造器赋值、读写器赋值、其他赋值。

构造器赋值:

①按照形参的下标索引值赋值
②按照形参的数据类型赋值
③按照形参的变量名赋值

读写器赋值:

①基本数据类型<property name="" value="">

②引用数据类型<array>数组<list>List集合<set>Set集合 <map>Map集<props>properMap集

③自定义引用类型
<!-- String数组 -->
<property name="hobbyArr">
	<array>
		<value>篮球</value>
		<value>足球</value>
		<value>羽毛球</value>
	</array>
</property>
<!-- List集合 -->
<property name="hobbyList">
    <list>
	    <value>篮球hobbyList</value>
	    <value>足球hobbyList</value>
	    <value>羽毛球hobbyList</value>
    </list>
</property>
<!-- Set集合 -->
<property name="hobbySet">
	<set>
		<value>篮球hobbySet</value>
		<value>足球hobbySet</value>
		<value>羽毛球hobbySet</value>
	</set>
</property>
		
		
<!-- Map集 -->
<property name="hobbyMap">
	<map>
		<entry key="a" value="篮球hobbyMap"/>
		<entry key="b" value="足球hobbyMap"/>
		<entry key="a" value="羽毛球hobbyMap"/><!-- 会覆盖键为a的值 -->
	</map>
</property>
<!-- ProperMap集 -->
<property name="hobbyProperMap">
	<props>
		<prop key="a">篮球hobbyProperMap</prop>			
		<prop key="b">足球hobbyProperMap</prop>
		<prop key="a">羽毛球hobbyProperMap</prop>
	</props>
</property>
<property name="kingList">
	<list>
    	<ref bean="zh"/>
		<ref bean="zz"/>
	</list>
</property>

<bean id="zh" class="com.jinghangzz.spring.pojo.ADemoKing">
	<property name="id" value="1"/>
	<property name="name" value="赵恒"/>
	<property name="age" value="11"/>
</bean>
<bean id="zz" class="com.jinghangzz.spring.pojo.ADemoKing">
	<property name="id" value="2"/>
	<property name="name" value="赵祯"/>
	<property name="age" value="13"/>
</bean>

其他方法:

①、P
②、属性文件

 

 

七、Spring为指定的类常见的构造方法赋值有哪几种?推荐使用哪个?为什么?【10分】


Ⅰ、按照有参构造方法的形参的【下标索引值】进行赋值

缺点如果形参数量相同,数据类型不同,不知道指定下标的形参的数据类型是什么,数据类型则会不匹配。

Ⅱ、按照有参构造方法的形参的【数据类型】进行赋值

缺点如果数据类型相同的形参数量不唯一,不知道赋值给哪一个形参

Ⅲ、按照有参构造方法的形参的【名称】进行赋值 【推荐使用

优点因为属性名具有唯一性,所以按照属性名进行赋值,不易出错。

缺点如果形参的数量较多,(指定的类的属性过多),赋值代码繁而冗杂。

 

八、SpringAOP是什么意思?它都包含哪些概念,写的越多越好。【10分】——> 9分


 

 AOP:【Aspect Oriented Programming面向侧面编程

包含概念有:

Ⅰ、切面【Aspect】

Ⅱ、连接点【Join Point】

Ⅲ、通知【Advice】

Ⅳ、切入点【Pointcut】

Ⅴ、介绍【Introduction】

Ⅵ、目标对象【Target object】

Ⅶ、AOP代理【AOP proxy】

Ⅷ、织入【Weaving】

九、SpringMVC驱动赋值都有哪几类,分别是什么?【10分】——> 3分


基本数据类型

引用数据类型

自定义引用类型

 

十、请介绍一下代理模式?【10分】——> 3分


代理模式:可以实现委托类的要求

静态代理:维护性差,一个代理实现一个目标对象

动态代理:一个代理可以实现多个目标对象;写一个代理。谁用谁拿,返回对象即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值