发表于: 2017-04-08 12:05:21
1 1674
今天完成的事情:
解决昨天的遇到的Mybatis插入问题;
向这个项目中加入Junit测试以及打印Log4j日志;
了解了实体类的相关知识;
下载安装Tomcat;
学习Mybatis中的namespace命名空间;
郑州组织师兄项目审核:讲解如何加入项目
学习如何使用禅道;
明天计划的事情:
开始学习服务器的知识;
接着做任务
遇到的问题:
1) 使用mybatis向数据表中中插入记录时,mybatis会获取插入记录的自增长ID,如何修改?
在修真院师兄的帮助下,了解到原来在mybatis中每执行插入一条数据的操作,id便会自动增加1(前提是在数据表中将主键id设置为AUTO_INCREMENT)
解决方法:使用navicat将id的自动增值的value改成(表中记录总数+1)
收获:
1. 完成了Mybatis对数据库插入记录的操作,解决了昨天困扰我的问题,原来id值为递增时,就不必在向数据库中插入id值了
Student.java中:
student.xml中:
MybatisTest.java的测试代码:
细心的你也许已经注意到:上面图中的第5行代码为Student.addStudent(student), 直接用类名Student调用了addStudent()方法,其前提是该方法是一个静态方法(下面参考的一个很好的例子结合我的测试代码的具体分析,觉得写得很好就贴上来了)
Student类的静态方法是程序启动时自动放在内存中的,是属于程序的公共内存(但只能访问),而类名在这里你可以理解为命名空间。我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。 房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家都用不了。 我们再看一看定义,java的静态变量也叫做类变量,非静态变量叫做实例变量。如果一个类中有静态变量的话,程序首先会把该静态变量加载进内存中,也就是在堆中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。 静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象先加载进内存,而这个时候可能其它的非静态方法或者变量还没有被加载进来。就好比我现在想做包子,现在面粉被static修饰,首先已经拿到你身边,可是因为包子馅不是static修饰的,所以可能包子馅儿还没运过来,你说怎么做的出包子呢。 被static修饰过的都是随着类的初始化后就产生了,在堆内存中都有一块专门的区域来存放,所以只需要类名点方法名或者变量名即可。而非静态的就必须通过类的对象去调相应的。就像是你想要红色的衣服,你必须是从穿红色的衣服的人的身上拿过来才行,所以你必须找到穿红色衣服的人,也就是类的实例对象,而你如果要去找一个桌子,而桌子就在房间里摆着,你只要进到房间里直接走过去拿来就可以了。
2) 在configuration.xml文件中的有一个配置叫做别名<typeAliases>
直接可以用"student"这个别名来替换后面的一长串"com.jason.mybatis.model.mybatis_task1.Student",使得代码更加简洁:
3) 在不断完善自己的代码的时候会学到很多东西,总是听到师兄在聊”实体类“,今天才体会到什么是实体类:
在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法。entity(实体类)的作用一般是和数据表做映射。所以快速写出规范的entity(实体类)是java开发中一项必不可少的技能。
4) 下午在QQ上看到老大关于MyBatis命名空间的分享:
在大型项目中,可能存在大量的 SQL 语句,这时候,为每个 SQL 语句起一个唯一的标识 id 就变得并不容易了。为了解决这个问题,在 mybatis 中,可以为每个映射文件起一个唯一的命名空间,这样,定义在这个映射文件中的每个 SQL 语句就成了定义在这个命名空间中的一个 id。只要我们能够保证每个命名空间是唯一的,即使在不同映射文件中的语句的 id 相同,也就不会冲突了。
评论