发表于: 2016-03-13 23:24:35
1 4162
【操作过程】
1.把前面所有关于Jetty的修改全部改了回来,重新设置,Help-->Eclipse MarkerPlace-->搜索Jetty-->安装Run-Jetty-Run 1.3.4-->OK,如果要启动项目,方法是:Run-->Run configurations...
2.服务层实现
2.1 在src/main/java/caojunqi/ITtask_2_2/service下增加接口StudentService.java,这个接口里面的内容和StudentMapper.java里面的内容一致,只是在每个方法后面加上了throws Exception。
2.2 在src/main/java/caojunqi/ITtask_2_2/service/impl下增加类StudentServiceImpl.java。
3.控制层实现
3.1 在src/main/java/caojunqi/ITtask_2_2/requestModels下建立Header.java类。
3.2 在src/main/java/caojunqi/ITtask_2_2/requestModels下建立StudentRequest.java类。
3.3 在src/main/java/caojunqi/ITtask_2_2/responseModels下建立泛型对象:ResultData<T>.class
3.4 在src/main/java/caojunqi/ITtask_2_2/controller下建立StudentController.java类。
【知识总结】
1.判断xml是否有错的最好方法就是将xml文件用浏览器打开,看有没有报错,打开方法为:右键-->Open With-->Other-->External Programs-->浏览器
2.在StudentServiceImpl.java中,用到了@Resource注解,这个注解的作用其实就是引入资源,具体的注入规则是:
2.1 @Resource应用在字段上,则注入规则是:
a.先使用字段名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败。
b.如果字段名字没有匹配到Bean则spring会尝试采用字段类型匹配,如果找到bean则注入,如果字段类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常, 注入失败。
2.2 @Resource应用在setter上(应用到属性),则注入规则是:
a.先使用属性名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败。
b.如果属性名字没有匹配到Bean则spring会尝试采用属性参数类型匹配,如果找打bean则注入,如果属性参数类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常.注入失败。注意是属性的参数类型,并不是属性的类型,注意区别。
2.3 具体到我自己的代码上,就是:先匹配mapper这个字段名,发现没有匹配到,再匹配StudentMapper这个字段类型,哎,发现匹配到了,好嘛,然后就把StudentMapper这个类型引入了。
3.在StudentServiceImpl.java中,用到了@Transactional注解,这个注解的作用就是把这个注解的类或者方法交给Spring处理,在applicationContext.xml中有配置过事务管理器transactionManager。
4.可以看出,在StudentServiceImpl.java中,各个方法并没有具体的实现代码,而是调用了StudentM.java接口里面的方法,而StudentMapper.java只是一个接口,里面也没有具体的实现代码,具体的实现代码是在StudentMapper.xml配置文件中,将StudentMapper.xml和StudentMapper.java联系在一起的代码是:<mapper namespace="caojunqi.ITtask_2_2.dao.StudentMapper"> ,这一句代码出现再StudentMapper.xml的开头。
5.关于JSON的相关知识,关键是要掌握两点:
5.1 一个JSON示例:
{
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}]
}
5.2 通过JavaScript,创建一个JSON对象:
var JSONObject = [
{"firstName":"John", "lastName":"Doe"}
{"firstName":"Anna", "lastName":"Smith"}
{"firstName":"Peter", "lastName":"Jones"}]
6.在操作步骤3.4中,使用到了@Autowired这个注解,这个注解和@Resource作用大体一致,但有一些区别:@Autowired按byType自动注入,而@Resource默认按byName自动注入。
【出现的问题(已解决)】
1.在StudentMapper.xml中,在:
<if test="name != null and name != """>name=#{name},</if>
这一行总是出错,错误提示是:Element type "if" must be followed by either attribute specifications, ">" or "/>".
解决办法是:在name != ""这里需注意,不能是两个双引号,而应该写成两个单引号,即name != '',所以修改后的结果为:
<if test="name != null and name != ''">name=#{name},</if>
2.在StudentMapper.xml中,在:
<if test="age != null and age >= 1 and age<= 130">age=#{age},</if>
这一行也会报错,错误提示是:The value of attribute "test" associated with an element type "if" must not contain the '<' character.
解决办法是:不能在<if>标签内进行别的条件判断,只能判断null和空值,所以应该修改为:
<if test="age != null and age !=''">age=#{age},</if>
【出现的问题(未解决)】
1.接口基本写完了,明天把整个项目的思路理一下。
2.项目命名不规范,下个项目注意。
3.接口测试。
【疑问】
1.在StudentServiceImpl.java中,对数据库操作时,只有insert、update、delete这三个操作用到了事务处理,即被@Transactional标记,而find操作并未被标记,这是不是因为“修改”、“增加”、“删除”这三个操作如果出错会对数据库造成影响,所以需要进行回滚,因此要被@Transactional标记,而“查找”这一操作即使出错也不会影响数据库,所以不用事务处理?
评论