发表于: 2017-10-24 21:38:19

2 709


今日完成的事情:

1;进一步学习spring注解测试

首先是会用到junit,两个相关jarjunit-jarhamcrest-all-jar;实际上junithamcrest是两个不同的框架,不同的东西;只不过是junit使用了hamcrest框架而已。具体好像是junit-jar包含junit-dep-4jar全部内容和必要的harmcres的包,而junit-dep-jarjunit的包,不含harmcres的相关的类,hamcrest-all-jar几乎包含所有的hamctest的类;这样看来最好是导入junit-dep.jar+hancrest-all.jar;这样会避免重复导包,不过好像问题不大,就没有深究,直接导入junithamcrest包了。

然后用昨天小课堂的测试类做练习对比一下结果,看看注解测试的好处

先是昨天的这个就不多说了,流程已经很清晰了

然后用注解测试重新写代码

结论;对spring的注解测试有了清晰的认识,基本上能独立写出一个简单的注解测试


2;然后再学一遍mybatis

先是实体类pojo

public class Student
{
   
private int id;
   
private String name;

然后是配置文件mybatis-config.xml

加载数据库信息

<dataSource type = "POOLED">
    <
property name="driver" value="com.mysql.jdbc.Driver"/>
    <
property name="url" value="jdbc:mysql://localhost:3306/task1?characterEncoding=UTF-8"/>
    <
property name="username" value="root"/>
    <
property name="password" value="1234"/>
</
dataSource>

这里定义一个package的别名,后续自动扫描包下面的类可省略包名,直接些类名,如配置文件Student.xml中使用resultType的时候

<typeAliases>
    <
package name="com.dada.pojo"/>
</
typeAliases>

????这里的映射mapper有点不太理解,我看百度意思是student.xml里包含了sql语句,但是要想使用sql语句,就必须在mybatis的配置文件里注册加载,那为什么不直接把sql语句写在这个配置文件里,还要单独写个sqlxml?????

<mappers>
      <
mapper resource="resource/Student.xml"/>
</
mappers>

这个就是sqlstudent.xml文件, sql语句用id: listStudent 进行标示以供后续代码调用。resultType表示返回的数据和student关联起来,这里本应该使用的是 com.dada.pojo.student, 但是因为上一步配置了包的别名,所以直接使用student,这里有一个疑问,写在下面了????????

<mapper namespace="com.dada.pojo">
    <
select id="listStudent" resultType="Student">
       
select * from student
   
</select>
</
mapper>

 最后是测试类就没什么好说的了,之前也写过了,重写一遍只是更熟悉了一点,流程更清晰,这样看一大段代码也不会很生硬了,这一块就是根据配置文件一步步得到session,然后调用sql语句。小疑问放在下面了

String resource = "resource/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();


3;上面是普通查询,这里顺便学习一下模糊查询

首先是通过名字来查询,在student.xml的配置文件里定义好数据库的sql语句,mysql的模糊查询为select * from table where name like concat('%',#{0},'%')

<!--模糊查询,通过名字来查询的-->
<select id="listStudentByName" parameterType="String" resultType="Student">
   
select *from student where name like concat('%',#{0},'%')
</select>

然后,简单测试,很ok

List<Student> ss = session.selectList("listStudentByName", "");
for (Student student : ss) {
   
System.out.println(student.getName() + "   " + student.getId());
}


4;然后再附加一个条件id>N的多条件查询

首先是配置好sql语句用and连接好

<!--多条件查询,附加一个id大于n的条件,并且是模糊-->
<select id="listStudentByIdAndName" parameterType="map" resultType="Student">
   
select *from student where id > #{id} and name like concat('%',#{0},'%')
</select>

然后是测试类稍微麻烦点,因为查询用到了两个参数,而方法selectlist直接收一个参数对象,所以,这里需要引入Map概念,把多个参数放进map里,然后把map作为一个对象传给list方法。

Map<String, Object> params = new HashMap<>();
//因为是多个参数,而selectList方法又只接受一个参数对象,
//所以需要把多个参数放在Map里,然后把这个Map对象作为参数传递进去
params.put("id", 75);
params.put("name", "");
List<Student> ss = session.selectList("listStudentByIdAndName", params);
for (Student student : ss) {



5;看一下三层架构,终于看到完整的了。。一直以为MVC就是三层架构。。今天才看懂好像不是一个概念。。。三层架构是最基本的项目分层结果,MVC是三层架构的一个变体,是一种开发模式;再具体点就是前者从整个应用程序架构的角度来分的三层;后者是在应用程序(BS结构)的视图层划分出来的不同功能的几个模块。

a,再具体细致的说一下三层;三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。

界面层(UI|User Interface):表现层通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得(Struts框架)

业务逻辑层(BLL|Business Logic Layer);针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理(Spring

数据访问层(DAL|Data Access Layer);层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等(Hibernateb,MVC Model-View-Controller严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话(这里暂时不多说了,等学了ssm再总结一下)

总结一下:mvc可以是三层中的一个表现层框架,属于表现层(三层和mvc可以共存), 三层是基于业务逻辑来分的,而mvc是基于页面来分的。 MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成MVC(Model View Controller)模型-视图-控制器


6;部署tomcat发现有日志可以查看,很方便排查问题

 


明日计划的事情:

1;再巩固一下springmybatis,为ssm整合打基础

2;学习springmvc



遇到的问题及解决方法:

1;这个位置没注意到,写类的时候可以用这种方式,但是定位配置文件,需要用反斜杠来指明路径。


2;这里也出现小问题,命名空间必须写。。。不能为空。。就像包名一样吗?只是为了重用某些词??命名空间不太理解,这里虽然起了一个包名,但是可以随便起。。。我看网上说有一定规则namespace并不能随便写,它貌似会跟后面讲的Mapper起到关联作用,让xml中的sql语句与Mapper中的同名的函数自动配匹配。。暂时还没理解吧


3;还有一个疑惑,就是这里的parametetype参数类型,我百度了下“_int” 代表 java中的基本类型int ,“int” 代表 java中的类类型Integer,在配置文件这我用三种效果是一样的。。是不是只需要遵守规范??用下划线即可??

<select id="getStudent" parameterType="Int" resultType="Student">
   
select * from student where id =#{id}
</select>


4;还有正常查询的时候,这里的参数#{id}mybatis好像根本不看具体内容,只知道这是个参数。。我用XXXbbb都没问题。。????

<select id="getStudent" parameterType="Int" resultType="Student">
   
select * from student where id =#{bbbbbbXXX}
</select>


5;模糊查询的时候,参数也是不重要,都可以正常运行,应该只是规范看起来好看了



收获:

1;对三层构架以及mvc有了更为准确的认识,这点很重要,代码全是围绕这个大框架来的。

2;对mybatis理解运用更熟悉了一些。





返回列表 返回列表
评论

    分享到