Mybatis【创建一个MyBatis项目】
Mybatis
Mybatis是一个优秀的持久层框架,它对JDBC几乎所有的数据库操作进行了封装(包括加载驱动、创建Connection、创建Statement、手动设置参数、结果集检索等繁琐操作),开发者只需关注SQL本身。
使用MVC框架制作第一个MyBatis项目(非Maven)
(一)创建一个javaEE项目,将制作MyBatis需要用的包放入WEB-INF下我们创建的lib文件夹下,并将其add as Library,除了mysql-connector-java-5.1.48-bin.jar和mybatis-3.5.2.jar,还可以添加一个log4j-1.2.17.jar,用于记录与后台数据库的连接交互情况。

(二)在src中建包,实例中取名就叫mybatis,在目录下,创建mybatis-config.xml,在下载的mybatis-3.5.2文件夹中,找到mybatis-3.5.2pdf,并在第三页找到mybatis-config.xml内容格式

将文本框中内容赋值粘贴到配置文件中,并按照自己mysql实际情况,将property标签的内容填写完整

(三)在mybatis包下
创建dao包(也可以取名叫mapper包),用于编写Dao层,以及放置mappper.xml;
创建entity包,用于创建实体类,
创建service包,用于编写service层
创建util包,用于获取SqlSession,以及编写动态代理类等(后面会具体说)
创建Test包,写主方法,用于测试
将log4j.properties配置文件放到src目录下

(四)在util包下创建SqlSessionUtil类,用以获取SqlSession,以及关闭SqlSession,通过mybatis-3.5.2.pdf第二页中我们可以找到需要的代码
将代码复制粘贴后,我们发现我们得到的是一个SqlSessionFactory,这和之前JDBC加载驱动时一样,如果每次需要SqlSession的时候都创建一个SqlSessionFactory会极大的消耗内存,因此我们想到了将这段代码放到静态代码块中,在类加载时,静态代码块只执行一次就能很好解决这个问题。

同时,为了保证所有与数据库交互的操作统一归纳到同一个事务当中,那么所有的业务操作都需要使用同一个SqlSession,因此需要用ThreadLocal<SqlSession>,第一次使用则创建并存入ThreadLocal,当程序运行到其他类中需要再次用到SqlSession时则可以直接到ThreadLocal中直接去取出刚才的SqlSession对象

最后需要关闭SqlSession对象,需要注意的是,在关闭SqlSession对象后,还需要对ThreadLocal进行清空,因为这里的线程并没有直接销毁,而是回到了线程池中

(五)在util包下创建TransactionInvocationHandler类,用以编写动态代理类,首先将该类实现InvocationHandler接口,并重写invoke方法,同时声明一个私有的Object成员变量,变量名为target,并编写一个带target的构造方法,这里的target指的就是业务对象也就是目标对象。然后在invoke中编写代理类的业务方法,值得提的是,在mybatis中所有的事务都是需要手动提交的。

最后再写一个方法通过Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this)用以获取代理类对象,这个方法具体里面的原理有点复杂,我完全没搞懂,反正先背着用吧,希望有朝一日能搞懂

(六)在util包下,再创建ServiceFactory类以及getService方法,通过将业务对象输入可以直接获取代理对象,就是再进行一层封装

(七)创建实体类,属性构造方法,set以及重写toString一应俱全,这个就不用截图了
(八)开始写Dao层了,创建接口,规矩是每一张表的具体操作创建一个接口,接口名以表名加Dao命名,在接口中创建需要实现的方法,方法名最好见名知义

(九)在dao包下,创建mapper.xml配置文件,这里需要注意,有的项目会把dao层直接命名为mapper,如果用的名字是dao,那么配置文件也用EmpDao.xml,反之则用EmpMapper.xml,基本格式在pdf文件第四页

这里MyBatis规定,dao层中的接口不需要实现类,可以通过xml文件映射,但是接口中的方法和xml文件中<mapper>标签里的每套标签中id名保持一致,数量也必须相同,即一套标签对应接口中的一套方法,这里写完以后,可以回头把之前第二步的mybatis-config.xml文件中的<mappers>里的<mapper resource="mybatis\dao\EmpDao.xml">完善了

(十)在service包下,创建业务接口,以及其对应的业务实现类,这时我们需要创建一个EmpDao对象,本应使用private EmpDao empDao = new EmpDaoImpl();创建,但是我们前面没有实现EmpDao接口,所以我们采用MyBatis里特定的方式private EmpDao empDao = SqlSessionUtil.getSession().getMapper(EmpDao.class);来创建EmpDao对象,通过该对象的相应方法,来完成我们的业务

(十一最终)在Test包中创建test类,写主方法进行测试


浙公网安备 33010602011771号