首先建立一个javaproject起名为firstblood-mybatis
然后建立一个和src同级的目录用来存放mybatis依赖的jar包,并build path
这些包的下载地址:
点击打开链接
添加Library JUnit4过程:右键单击项目名->build path->add librarys..->选择JUnit->next->选择JUnit4->finish
beans中存放的java文件是数据的设计与数据库的保持一致。
dao中存放的是数据持久层操作的有关文件,应该先写接口,然后再自己实现它。
test中存放的是测试类,用来测试代码的正确性。
utils中存放的是自己为了避免代码的复用而写的工具类,一般来讲该类中的方法应该都是静态的
首先要实现增删改查必须有要增删改查的对象,接下来我们就演示一下对Student的增删改查
为了简单,所以设计Student只有4个成员分别是id(唯一标识),name(名字),age(年龄),score(成绩)
如图生成GettersAndSetters方法和重写toString方法全部勾选,这是为了使属性名和成员名一致,再加上默认的无参构造器,和参数为name、age和score的构造器
写完beans之后要在数据库中创建对应的表单,为了便于使用所以表的名字和beans中的类的名字一致,表的列名和类中的属性一致如图:表起名为student(我用的是mysql的可视化工具Navicat)
等表建立好后存储数据库的sql文件,右键点击数据库选择转储sql文件,选择要存放的路径(将文件存放到你的项目的db文件夹里),如图所示(这是为了以后将项目打包的时候别人可以直接考你的sql文件利用sql文件直接生成对应的数据库的表)
点击确定将数据库的sql文件导入项目中去。这时候就会发现项目的db文件夹中有了.sql文件
数据有了接下来就是对数据进行增删改查了
首先在dao包中建立一个interface接口文件,在其中写入你要实现的功能如图:
这些是我们准备要实现的方法的接口
接下来我们就要实现这些接口了,要实现增删改查,应该先和数据库建立联系,所以我们先写数据库的连接:
新建jdbc_mysql.properties文件如图这个文件中写连接mysql的4要素属性文件(注意这个文件中不能有空格,不能有空格,不能有空格):
然后写mybatis的主配置文件,在主配置文件用到properties的文件的时候value的值根据properties的文件中的名字来写才能取到值
这样就建立好连接了,注册映射这个的路径的文件是真正实现的增删改查的配置文件,在每一个dao的impl文件对应一个mapper.xml文件,调用的时候直接将mapper.xml文件添加到主配置文件中
接下来写dao的实现类StudentDaoImpl如图所示
这里Resources.getResourceAsStream方法读取主配置文件,然后通过SqlSessionFactoryBuilder.build方法创建一个SqlSessionFactory对象,SQLsessionFactory对象再调用自己的OpenSession方法创建一个sqlsession对象由调用的是无参方法,所以生产出的sqlsession的各个属性是默认的并将读取到的配置文件进行加载。
可以看出无参的openSession方法调用的是默认类型和另外两个参数分别为null和false的openSessionFromDataSource方法
其中的newTransaction方法源码如下,调用了JdbcTransaction(ds, level, autoCommit);
JdbcTransaction进行了赋值操作根据当时传入的值datasource有值而level为null ,autoCommit为false;
由此可以看出每个sqlsession的对象都是已经加载过mybatis.xml文件的默认的类型。
后面的insert是调用插入的方法,源码如下 :
可以看出insert的本质还是调用的update方法.
后面的commit方法是事务提交,如果不写的话增删改不能真正操作,如果只执行了前面的代码没有事务提交的话,会自己进行事务回滚,生成了key值但是没有将所有的数据提交上去,相当于浪费了一个key值,例如原本你数据库中的primarykey是自增的,然后增加一个人员信息,但是不提交事务,那么就会生成了一个key值,由于你没有提交所以不会有数据添加到数据库中,等到你下向数据库中添加一个人员信息时,提交了事务的时候就会发现这次的key值在上一条记录的基础上+2了。由于查找信息不会对数据库中的信息进行改变所以写不写事务提交都可以。不会发生什么改变。
最后要将sqlsession关闭。
这是以增加为例,其他的类似。
本文是写给自己的,写的不好,以后理解更深刻的时候会修改。