发表于: 2018-03-12 23:46:41

1 585


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

1.首先解决昨天的残留问题,关于为什么查找语句有效另外三个语句无效的问题,最后经过师兄帮忙发现是因为没有提交事务。

public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession(true);
Person p =session.selectOne("getPerson", 1413);
System.out.println(p.getAge());

Person p1=new Person();
p1.setName("wangwu");
p1.setAge(25);
p1.setPersonID("20155555");
session.insert("addPerson",p1);

session.delete("deletePerson",1511);

Person p2=new Person(1502,"wangwu",38,"20177777");
session.update("updatePerson",p2);
session.commit();       //提交事务
session.close();       //关闭连接
}

结果如下,可以看到删除修改和增加操作都成功了。

事务是单个的工作单元,如果某一事物成功,则在该事务中进行的所有数据修改都会提交,成为数据库中的永久组成部分,如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。

事务使用可以提供一个机制,防止在执行过程中出错,而之前正确的sql有影响了数据库的情况出现。

而在mybatis中默认不开启事务的自动提交,目的就是为了保持事务的一致性,所以在完成一连串数据后需要手动提交,即session.commit();才可以对数据库进行修改。至于查找,因为不影响数据库的属性,所以可以正常进行。

最后session.close();则是关闭数据连接,如果每次使用都不关闭连接的话,达到连接池数量上限后,再进行的数据操作就会变慢,因为系统要去判断之前借出去的连接哪些已经没用了要收回来,然后再通知在等待的操作来领新的连接。

2.继续学习其他语句

①查询所有

<select id="listPerson" resultType="Person">
select * from person1
</select>
List<Person> ps=session.selectList("listPerson");   //新建一个表存储
for(Person p5:ps){ //遍历循环
   System.out.printf("%d\t%s\t%d\t%s%n",p5.getId(),p5.getName(),p5.getAge(),p5.getPersonID());
}

相对而言和前几个差不多,只是需要建一个表类似与res来存储查询的结果,然后依靠遍历输出结果

②模糊查找

<select id="listPersonByName"  parameterType="string" resultType="Person">
select * from person1 where name like concat('%',#{0},'%')
</select>
List<Person> ps2=session.selectList("listPersonByName","lisi");
for(Person p6:ps2){ //遍历循环
   System.out.printf("%d\t%s\t%d\t%s%n",p6.getId(),p6.getName(),p6.getAge(),p6.getPersonID());

}

模糊查找不仅可以是姓名,也可以是其他字段,比如personID,只需将id="listPersonByPersonID",select *from person1 where personID like concat('%',#{0},‘%’)即可。

其中concat('%',#{0},'%')为模糊查找的固定写法,因为可能不止一个结果所以也要用一个表来存储数据。

③按条件模糊查找,即多条件查询

因为selectList方法只支持输入一个参数,而不能说将两个参数一起输入,所以需要一个Map对象来储存这多个参数

<select id="listPersonByIdAndName"  parameterType="map" resultType="Person">
select * from person1 where id> #{id} and name like concat('%',#{name},'%')  //注意{}内为name而不是上面的0
</select>

Map<String,Object> params=new HashMap<>();         //新建一个Map对象      
params.put("id",1412);                   //调用Map的put方法输入参数
params.put("name","lisi");
List<Person> ps3=session.selectList("listPersonByIdAndName",params);  //注意不要忘掉后面的params
for(Person p7:ps3){
System.out.printf("%d\t%s\t%d\t%s%n",p7.getId(),p7.getName(),p7.getAge(),p7.getPersonID());
}

注意map函数的使用及它可调用的方法,分别是什么作用。

2.学习Junit相关知识

按照网上教程配置好了JUnit,但是还不怎么会用,在自己的PersonDao文件里面按Alt+Insert,选择JUit4插入结果发现和想象的不太一样,文件生成位置好像也不对,不是在Test文件中生成而是在main/java下面自己产生了一个新的test.dao文件夹,所以将PersonDao改名成了PersonTest,明天重新写一个Dao和实现类,先把分开,再写不需要实现类的Mapper类。

此为Creat Test的选项菜单,从上往下分别为选择测试框架,类名,父类名,包名,初始化方法,释放资源,展示继承方法,最下面则是勾选需要测试的方法。选完后就可以得到一个测试类文件,填写好测试代码就可以运行了。

JUnit 4 开始使用 Java 5 中的注解(annotation),常用的几个 annotation 介绍: 

@BeforeClass:针对所有测试,只执行一次,且必须为static void 

@Before:初始化方法 

@Test:测试方法,在这里可以测试期望异常和超时时间 

@After:释放资源 

@AfterClass:针对所有测试,只执行一次,且必须为static void 

@Ignore:忽略的测试方法  

一个单元测试用例执行顺序为: @BeforeClass –> @Before –> @Test –> @After –> @AfterClass 

每一个测试方法的调用顺序为: @Before –> @Test –> @After



明天计划的事情:(一定要写非常细致的内容) 

研究一下JUnit的用法,用DAO和实现类写一下之后再学习Mapper


遇到的问题:(遇到什么困难,怎么解决的)

对于已经写好的代码不能定义它的类型了,感觉也不是DAO和实现类,写的时候模仿的太多了,还是需要多思考。

JUnit比较陌生,刚接触有点不知所措,明天系统学习下用法,多试几次比较一下用和不用的区别

学习效率还是不高,遇到新东西有点不知道从哪儿下手


收获:(通过今天的学习,学到了什么知识)

初步接触JUnit

昨天的遗留问题在师兄的帮助下解决了


返回列表 返回列表
评论

    分享到