以下是Java渣渣关于使用MyBatis框架的小结,欢迎批评指导:
MyBatis
简介:
MyBatis本是
apache
的一个开源项目
iBatis
, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的
持久层
框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
//以上这些来自MyBatis官网
http://www.mybatis.org/mybatis-3/zh/index.html
以上这些都太过概括化,概念化。我的理解是:建好数据库-写项目(引jar包-写实体类-写dao层-写xml文件-配置环境-测试)
下面我将按照我说的这几步截图演示:
- 建立数据库
- 我用的是SQLyog - 64 bit(小海豚)
- 新建表格用户表
- 引jar包
- 这里会用到mybatis、mysql-connector-java、junit、log4j(分别是:今日框架、连接数据库映射sql语句、测试会用到、打印日志(可有可无毕竟不是必须))
- 我这里写项目用的是idea这款软件,所以在pom文件里面直接添加这四个就好了。
- 写实体类
- 实体类这块我就不展示了,我在实体类里面将数据库表里面的内容一一列举,并建立了getset方法,还有toString方法。为的是后面需要调用里面内容时,以及打印内容时方便。
- dao层
- 这一层是为了业务逻辑层与数据库打交道的中间层,我先写了一个接口,之后再写xml文件的。这里我想实现两个功能,分别是查询一共有多少条数据,另外遍历所有用户。
- 写xml文件
- 建立mapper的命名空间,对应到相应的接口
- 建立resultMap
-
< resultMap id ="起个名(叫啥都行后面需要映射表时需要调用)" type ="(映射的对象(类名))">< id property ="实体类中的名字" column ="表中的名字"/>< result property ="实体类中的名字" column ="表中的名字"/>(实体类有几个写几个)</ resultMap>
- 写sql语句 里面一共四个标签:select(查)、insert(增)、delete(删)、update(改),每一个标签对应一条相关语句,如果下面以查为例:
-
< select id ="起个名字(与接口中一致)" resultMap ="返回类型(由于要遍历要与列表中列明对应(上面命名空间中写的),如果是数字就写int或Integer就行)">SELECT tu.id, tu.user_name, tu.password, tu.nick_name from t_user as tu order by id DESC(见笑了)</ select>
- 配置环境
- 在resources这个配置文件夹下,我配置了数据库信息,建立一个file文件,手敲一个名字.properties,之后在里面填写数据库信息。
- 依旧在这个文件夹下配置mybatis-config.xml文件
-
< properties resource ="刚才写的数据库文件名"/>(其实数据库在下面也能配置,但是框架会以这个为准,认真点)< settings>< setting name ="logImpl" value ="LOG4J"/>(打印日志,pom文件里面提到的那个)</ settings>
< typeAliases>< package name ="包名(1.如果有多个包嵌套以点隔开。2.这里写的包对应的是实体类)"/></ typeAliases>
< environments default ="development(这个名字随便起,最好见名知意,要与下面的environment里面的id属性名一致)">< environment id ="development(与上一层environments里面的default属性名一致)">< transactionManager type ="JDBC(这个不多说了)"></ transactionManager><!--将连接放到外面,方便替换数据库时直接替换文件,面对修改关闭-->< dataSource type ="POOLED">(这块不太懂,不过好用,将来研究)< property name ="driver" value ="${jdbc.driver}"/>(用${}方式调用刚才建立数据库信息,也可以手敲配置信息,但是为了方便将来维护更换数据库还是写到外面好些)< property name ="url" value ="${jdbc.url}"/>< property name ="username" value ="${jdbc.username}"/>< property name ="password" value ="${jdbc.password}"/></ dataSource></ environment></ environments>
< mappers>< mapper resource ="这里写mapper文件对应地址先写包名一路写到.xml文件,以/隔开"/></ mappers>
- 测试
- 先通过SqlSessionFactoryBuilder的build方法调用mybatis-config,xml方法,之后将这个值赋给SqlSessionFactory,通过SqlSessionFactory建议SqlSession,调用其中的selectList方法,里面调用mapper.xml文件中的相应的方法id属性名,最有关闭SqlSession方法通过.close方法。下面通过遍历用户表为例演示:
-
SqlSession sqlSession = null;(先赋个值,因为后面多处需要调用)try {InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");(将mybatis-config.xml文件放在inputStream里面)SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();(建立sqlSessionFactoryBuilder)SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);(通过sqlSessionFactoryBuilder建立sqlSessionFactory)sqlSession = sqlSessionFactory.openSession();(通过sqlSessionFactory建立sqlSession)List< TUser> tUsers = sqlSession. selectList( "调用mapper.xml文件中的sql语句对应的id标签名");for ( TUser tUser : tUsers) {System. out. println( tUser);}(增强for循环,遍历并打印结果)} catch (Exception e) {e.printStackTrace();}finally {MyBatisUtil. closeSesstion( sqlSession);(最后记得关闭SqlSession)}