虽然MyBatis发布已经有一段时间了,一直想试试,可总是被中断,这次总算是跑了一下,对MyBatis有所了解。
在www.mybatis.org上可以找到下载链接,我下载的是mybatis-3.1.1这个版本,下载一个zip包,里面包含有主要的库文件mybatis-3.1.1.jar,还有一些引用的jar,一个PDF说明文档,这个说明文档提供的是E文版,可以在网上找到相应的中文版,下载完成后,就开始我的操作了。
在MyEclipse里创建了一个java工程,本来是打算在Web中使用的,没有创建Web工程,只是想试一下MyBatis这东东,java工程就可以了。
创建时引入MyBatis库和数据库驱动库,创建一个空的工程
准备好数据库,此处用MySQL做练习,创建一个bbs数据库,创建一个tb_users表,结构如下
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| userid | int(11) | NO | PRI | | |
| username | char(20) | NO | | | |
+----------+----------+------+-----+---------+-------+
创建一个User类,与数据表对应
package com.cuit.prj.domain;
public class User {
private int userid;
private String userName;
public User() {
super();
}
public User(int userid, String userName) {
super();
this.userid = userid;
this.userName = userName;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
再创建一个UserMapper接口,里面提供了对User的相关操作
package com.cuit.prj.presistence;
import com.cuit.prj.domain.User;
public interface UserMapper {
User selectUser(int userid);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int userid);
}
再创建一个UserMapper.xml,与UserMapper.java对应的一个配置文件,经本例测试,其中的id要和接口中的方法名一致
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cuit.prj.presistence.UserMapper">
<select id="selectUser" parameterType="int" resultType="com.cuit.prj.domain.User">
select *
from tb_users where userid = #{userid}
</select>
<insert id="insertUser" parameterType="com.cuit.prj.domain.User">
insert into tb_users(userid,username) values (#{userid},#{userName})
</insert>
<update id="updateUser" parameterType="com.cuit.prj.domain.User">
update tb_users set username = #{userName} where userid = #{userid}
</update>
<delete id="deleteUser" parameterType="int">
delete from tb_users where userid = #{userid}
</delete>
</mapper>
在src下面创建MyBatis配置文件mybatis-conf.xml,配置文件名没有特殊规定,因为在后面的代码里需要指定文件名
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/bbs" />
<property name="username" value="root" />
<property name="password" value="1233" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/cuit/prj/presistence/UserMapper.xml" />
</mappers>
</configuration>
创建一个获取连接的SessionFactory的类
package com.cuit.prj.sessionfactory;
import java.io.IOException;
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;
public class SessionFactory {
public static SqlSession getSession(){
SqlSession session = null;
String resource = "mybatis-conf.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
session = sqlMapper.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
}
做好上述准备后,写一个主方法调用测试,如下
package com.cuit.prj;
import org.apache.ibatis.session.SqlSession;
import com.cuit.prj.domain.User;
import com.cuit.prj.presistence.UserMapper;
import com.cuit.prj.sessionfactory.SessionFactory;
public class AppTest {
public static void main(String[] args) {
System.out.println("Hello");
SqlSession session = SessionFactory.getSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(2);
System.out.println(user.getUserName());
} finally {
session.close();
}
}
}
在数据库中添加两条记录,并提交
+--------+----------+
| userid | username |
+--------+----------+
| 1 | user1 |
| 2 | user2 |
+--------+----------+
接下来就可以运行看看结果了。输出如下:
终于跑起来了,在处理了一系列的Exception之后看到的结果,上面的测试只是做了一个读取数据的操作,如果有新增或修改数据,需要调用session.commit()操作。
大概小结一下,用了MyBatis感觉还是很不错的,把SQL语句和JAVA代码分离开,喜欢自己掌控SQL语句的人们可能会喜欢MyBatis一些,不像Hibernate那样可以完全不用写SQL语句。只是配置文件和接口写起来还是有些麻烦,还有POJO类的生成,工作量还是不小哇,网上找到一个生成工具,下次研究一下再补充上来。