写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最
写在这个系列前面的话:
以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个orm 工具感兴趣。因为接下来自己的项目中很有可能采用这个orm工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程.
什么是mybatis
mybatis是支持普通sql查询,存储过程和高级映射的优秀持久层框架。mybatis消除了几乎所有的jdbc代码和参数的手工设置以及结果集的检索。mybatis使用简单的xml或注解用于配置和原始映射,将接口和java的pojos(plan old java objects,普通的java对象)映射成数据库中的记录.
orm工具的基本思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是xml配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
mybatis实战教程(mybatis in action)之一:开发环境搭建mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。
首先建立一个名字为 mybaits 的 dynamic web project
1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。
2. 将 mybatis-3.2.0-snapshot.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录.
3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码
创建用户表,并插入一条测试数据
程序代码
create table `user` (
`id` int(11) not null auto_increment,
`username` varchar(50) default null,
`userage` int(11) default null,
`useraddress` varchar(200) default null,
primary key (`id`)
) engine=innodb auto_increment=2 default charset=utf8;
insert into `user` values ('1', 'summer', '100', 'shanghai,pudong');
到此为止,前期准备工作就完成了。下面开始真正配置mybatis项目了。
1. 在mybatis 里面创建两个源码目录,分别为 src_user,test_src, 用如下方式建立,鼠标右键点击 javaresource.
2. 设置mybatis 配置文件:configuration.xml, 在src_user目录下建立此文件,内容如下:
程序代码
3. 建立与数据库对应的 java class,以及映射文件.
在src_user下建立package:com.yihaomen.mybatis.model ,并在这个 package 下建立 user 类:
程序代码
package com.yihaomen.mybatis.model;public class user {private int id;private string username;private string userage;private string useraddress;public int getid() {return id;}public void setid(int id) {this.id = id;}public string getusername() {return username;}public void setusername(string username) {this.username = username;}public string getuserage() {return userage;}public void setuserage(string userage) {this.userage = userage;}public string getuseraddress() {return useraddress;}public void setuseraddress(string useraddress) {this.useraddress = useraddress;}}
同时建立这个user 的映射文件 user.xml:
程序代码
select * from `user` where id = #{id}
下面对这几个配置文件解释下:
1.configuration.xml 是 mybatis 用来建立 sessionfactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 这个别名非常重要,你在 具体的类的映射中,比如user.xml 中 resulttype 就是对应这里的。要保持一致,当然这里的 resulttype 还有另外单独的定义方式,后面再说。
2. configuration.xml 里面 的是包含要映射的类的xml配置文件。
3. 在user.xml 文件里面 主要是定义各种sql 语句,以及这些语句的参数,以及要返回的类型等.
开始测试
在test_src 源码目录下建立com.yihaomen.test这个package,并建立测试类test:
程序代码
package com.yihaomen.test;import java.io.reader;import org.apache.ibatis.io.resources;import org.apache.ibatis.session.sqlsession;import org.apache.ibatis.session.sqlsessionfactory;import org.apache.ibatis.session.sqlsessionfactorybuilder;import com.yihaomen.mybatis.model.user;public class test {private static sqlsessionfactory sqlsessionfactory;private static reader reader;static{try{reader = resources.getresourceasreader(configuration.xml);sqlsessionfactory = new sqlsessionfactorybuilder().build(reader);}catch(exception e){e.printstacktrace();}}public static sqlsessionfactory getsession(){return sqlsessionfactory;}public static void main(string[] args) {sqlsession session = sqlsessionfactory.opensession();try {user user = (user) session.selectone(com.yihaomen.mybatis.models.usermapper.selectuserbyid, 1);system.out.println(user.getuseraddress());system.out.println(user.getusername());} finally {session.close();}}}
现在运行这个程序,是不是得到查询结果了。恭喜你,环境搭建配置成功,接下来第二章,将讲述基于接口的操作方式,增删改查。
整个工程目录结构如下:
mybatis实战教程(mybatis in action)之二:以接口的方式编程前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用sqlsession实例来直接执行已映射的sql语句:
session.selectone(com.yihaomen.mybatis.models.usermapper.selectuserbyid, 1)
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和sql语句返回值的接口(比如iuseroperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:
在src_user源码目录下建立 com.yihaomen.mybatis.inter 这个包,并建立接口类 iuseroperation , 内容如下:
程序代码
package com.yihaomen.mybatis.inter;import com.yihaomen.mybatis.model.user;public interface iuseroperation {public user selectuserbyid(int id);}
请注意,这里面有一个方法名 selectuserbyid 必须与 user.xml 里面配置的 select 的id 对应(