没有系统的学过mybatis,但之前的工作中用到过,与hibernate比起来个人更喜欢mybatis一点,因为感觉只要配置的映射关系对了sql写对了一半不会出错,就算出错感觉找bug比hibernate要来的容易,最近抽空系统的学习了一下mybatis,这里记录下我的学习笔记和感想,仅供备忘;
一、简单介绍(mybatis是什么)
mybatis是一个持久层的框架,让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句。它有两种开发方式,一种是ibatis也支持的原始dao的开发,既编写dao接口和它的实现类,另一种是使用mapper代理的方法,只需编写mapper的接口和它的配置文件即可,此方法是ibatis不支持的,也是企业中常用的;
二、一般开发步骤(使用mapper代理开发)
1、创建mybatis的主配置文件,SqlMapConfig.xml,用于配置mybatis的运行环境、数据源、事务等,如下:
1 <configuration> 2 <!-- 加载属性文件 --> 3 <!--properties中还可以配置一些属性名和属性值 --> 4 <!-- <property name="jdbc.driver" value=""/> --> 5 <properties resource="db.properties"> 6 </properties> 7 <!-- 全局配置参数,需要时再设置 --> 8 <!-- <settings></settings> --> 9 <!-- 别名定义 --> 10 <typeAliases> 11 <!-- 批量别名定义 12 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) 13 --> 14 <package name="cn.itcast.mybatis.po"/> 15 </typeAliases> 16 17 <!-- 和spring整合后 environments配置将废除--> 18 <environments default="development"> 19 <environment id="development"> 20 <!-- 使用jdbc事务管理,事务控制由mybatis--> 21 <transactionManager type="JDBC" /> 22 <!-- 数据库连接池,由mybatis管理--> 23 <dataSource type="POOLED"> 24 <property name="driver" value="${jdbc.driver}" /> 25 <property name="url" value="${jdbc.url}" /> 26 <property name="username" value="${jdbc.username}" /> 27 <property name="password" value="${jdbc.password}" /> 28 </dataSource> 29 </environment> 30 </environments> 31 32 </configuration>
2、创建你需要操作数据库表的实体类
3、通过mapper代理的方法开发dao
3.1 编写mapper.xml(这里以根据id查询为例)
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper"> <!-- 在 映射文件中配置很多sql语句 --> <!-- 需求:通过id查询用户表的记录 --> <!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM USER WHERE id=#{value} </select> </mapper>
3.2 编写mapper接口
编写mapper接口需要遵循如下规范:
3.2.1 在mapper.xml中namespace等于mapper接口地址
3.2.2 mapper.java接口中的方法名和mapper.xml中statement的id一致
3.2.3 mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
3.2.4 mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
4、在SqlMapConfig.xml中加载mapper.xml,可参考下面代码:
<mappers> <mapper resource="sqlmap/User.xml"/> <!--通过resource方法一次加载一个映射文件 --> <!-- <mapper resource="mapper/UserMapper.xml"/> --> <!-- 通过mapper接口加载单个 映射文件 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中 上边规范的前提是:使用的是mapper代理方法 --> <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中 上边规范的前提是:使用的是mapper代理方法 --> <package name="cn.itcast.mybatis.mapper"/> </mappers>
这样,mybatis的一个流程基本就走完了,然后就是写方法测试了,接下来的笔记来记录下mybatis的各个xml里的参数的意义及一些杂七杂八的备忘录!