正所谓“艾欧尼亚在改变,我也必须跟着改变”的大背景下,公司暂时没有iOS开发项目,又想让我快速熟悉前后端的操作,对前端还凑合的我来说,前端的todolist内容我虽然没用vue(因为半个月内熟悉vue对我而言难度有点大,所以我为了快速搭建模块,直接用纯js磨练自己的思路,然后看源码,审查元素,阅读源码作者的css思路体系,所写的),所以没有完全过关(失败的原因在于:localStorage不会熟练使用,它相对于iOS的存储(plist存储和NSUserdefault),有点复杂,然后自己一直沉迷于能存储标签这个想法,困住了长达两个工作日之久,最后还是失败了(因为不知道是不是存储到了,而且始终取不出来),然后向群里发问,群里也是鸦雀无声,让我有点寒冷,不禁感慨这些IT技术究竟是被谁掌握了,究竟这些IT大牛是如何从屌丝成为牛人的过程,不禁发问没有人的求助,自己如何度出来的,谷出来的,翻出来的?)
罢了,如今回合进入后端,
任务目标 :
用javaweb开发后端todolist
已知条件:
1.用"hibernate + springMVC + eclipse + mysql + maven"做开发 ;
2.我虽然前端能使两棒子,但是后端是零基础,也就是搞啥啥不会,看啥啥不懂,然后搭建界面上用的是jsp,里面的盒子是JQ和阿贾克斯(ajax),所以半个月学会这个,有点天方夜谭,能凑合懂,能读一些代码,这是我目前的希冀
目前获得的帮助:
在我有点困惑的情况下,同事给予帮助,在一个工作日的帮助下,帮我搭建好了eclipse里的maven环境,配置好了数据库,也就是通过某种我不知道的“黑科技”,我只需要改变其中几个字段,在代码的运行之中就可以调用我下载好的mysql的navcat,然后写入字段,这些过程我不需要关心,大致的环境,框架已经搭建好,我需要的是理解一些框架的大致意思,然后调用即可,目前知道的:dao是数据层,service是配置数据库的,操作dao层的,entity是实体,也就是我学过的model(模型),controller(控制器,大家都懂的),view是.jsp文件里的
阿贾克斯 就是jsp与springMVC的数据交互
hibernate 是数据库操作的重要环节 (必要条件)-> 你需要知道jpa
未知的疑问(也是后续开发我需要解决的问题)
1.让我眼前一亮的是dao文件里的代码
@Repository(value="DemoDAO")
public interface DemoDAO extends JpaRepository<Demo, String>,JpaSpecificationExecutor<Demo> {
@Modifying
@Query("delete from Demo where id in(:ids)")
void deleteByIds(@Param("ids") List<String> ids);
@Modifying
@Query("delete from Demo where id =:id")
void deleteById(@Param("id")String id);
}
我有很多不理解的,其中@xxxxxx的内容是不是必填,接受回答是“是的”,那是什么含义,用别的行不行?
其次就是看到没:那个像又不像sql语句的语法,你看了是不是很神奇?
最后一个就是下面调用的函数,没有实现只有声明的函数,它又是个什么故事呢?
2.了解并熟悉阿贾克斯:这个就没办法了,因为我始终觉得还是要搭建一个界面,但是不知道搭建什么好,同事给我搭建了一个阿贾克斯写的,所以我要知道这个框架该怎么使用,得写两句话,或者说最起码,我要能看得懂吧?
3.springMVC的具体内容是什么,它到底是干啥来着?这个也是我需要考虑的问题,它的作为,作用?
4.maven,我目前所知就是一个管理工具,至于它还有什么神奇的魔力,这个我就完全不得而知了(因为后续的环境,同事都给我配好了)
5.hibernate是干啥的,目前我只学习到了jpa,住hibernate,我对它一无所知
6.既然使用到了数据库,那么肯定要建表,表的建立,我的内心已经有了思路,我考虑表里面就三个字段:一个主键,一个装事件内容,最后一个装时间,这个时间怎么装,我的内心还是一无所知的
(我考虑id是自动添加的,也就是第一个事件id为0,第二个就叠加1,为1,然后第三个,第四件事,就是2,3....这么依次累加,这个思路我要知道,其次就是时间,是通过数据库设置时间,还是在写代码的时候配置时间,这个我要知道,当然时间这个开始可以不用设计,等后续代码搭建好了再考虑也是可以的)
最后注意一下,eclipse的联想功能是:ALt + /,这个算是低级问题了,不要死按control键了,后面的节目就是在剩下,不到8个工作日的时间里,完成,并解答这些问题。
现在解决的问题:(不会根据提问的顺序解决的)
1.字段设计我大概明白了,一个主键,一个做的事情,String型的,一个日期,Date型,然后主键是自增的,时间的装法,得参考一些函数,或者直接用String,让前端封装好的传过来,对于@的理解,通过观察jpa,知道了一些,主要是针对模型类里的,针对自增的问题,如果定义的主键是整形(Integer),那可以@GneratedValue(strategy=GenerationType.IDENTITY),但如果是字符型(String),那可以采取如此办法:
@GeneratedValue(generator="hibernate-uuid")
@GenericGenerator(name="hibernate-uuid",strategy="uuid2")
这个方法是生成一个不重复的随机数给id,也就不用自己设计算法了
2.针对spring MVC设计模式的一些问题(个人理解):
(1)@controller ,@repository,@service 和@Component使用的意图都差不多,可以理解为一种业务分层,分别是控制层,持久层,业务层,最后的那个算是针对一些比较中立的业务进行注释
(2)@Transactional:在service类前加上此代码,表示声明这个service所有方法需要事务管理,每一个业务方法开始都会打开一个事务,如果在后面跟上"(readOnly=true)"的话,就是获得的请求是只读的
(3) 在DAO文件里,例如我的这个TodosDAO里,有设置@Repository的话(意思是给持久层的类定义一个名字,让Spring根据这个名字关联到这个类,如果没有命名,那么default name就是className,注意:Repository跟后面TodosService的@Resource(name="xxx")里的name要是一样的,不然程序会报错,原因的话,我也不知道
(4)@Modifying @Query 是类似于建立一个查询语句方法,属于成对出现的,目前所知的就是知道怎么写删除的语句,至于改,查和增,怎么弄,暂时不是很清楚
3.Controller的设置:如果有两个控制器,那么如何保证访问的控制器位置是相同的呢?
需要在如此办法:
@Controller
@RequestMapping("/todo")
public class TodosController{
}
也就是需要在头做RequestMapping标注
它是用来处理请求地址的映射的注解,可用于类或方法上,用于类上,表示类中的所有相应请求和方法都是以该地址作为父路径
然后调用的话(用阿贾克斯的)
$.ajax({
//前缀是hello,todo/save,调用todo控制器里的save
url:"/hello/todo/save",
type:"POST",
data:{txt:$("#txt").val()},
success:function(data){
alert(data);
}
})
3.针对后端解析出来后,前端需要进行的处理,要把看上去像json的字符串,转为json:
3>Javascript支持的转换方式:
eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式
网友评论