posts - 2, comments - 27, trackbacks - 0, articles - 60
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

初试MyBatis

Posted on 2012-07-22 12:48 ZhouFeng 阅读(407) 评论(0)  编辑  收藏 所属分类: 原创Web开发DataBase
虽然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    |
+--------+----------+
接下来就可以运行看看结果了。输出如下:
Hello
user2
终于跑起来了,在处理了一系列的Exception之后看到的结果,上面的测试只是做了一个读取数据的操作,如果有新增或修改数据,需要调用session.commit()操作。
大概小结一下,用了MyBatis感觉还是很不错的,把SQL语句和JAVA代码分离开,喜欢自己掌控SQL语句的人们可能会喜欢MyBatis一些,不像Hibernate那样可以完全不用写SQL语句。只是配置文件和接口写起来还是有些麻烦,还有POJO类的生成,工作量还是不小哇,网上找到一个生成工具,下次研究一下再补充上来。

只有注册用户登录后才能发表评论。


网站导航: