MyBatis学习(一)- 搭建MyBatis项目

最近要学习使用MyBatis,参照网上的资料和官方的教程,根据自己的理解,记录一下。

MyBatisJar包下载地址:http://download.csdn.net/detail/jolingogo/5220163

官方教程:http://mybatis.github.com/mybatis-3/zh/index.htm

一.什么是MyBatis

       MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 

     以前学习过Hibernate,在网上查了一下,说MyBatis是半自动化的,需要自己写SQL语句,这样就可以根据需要自己优化SQL了。

     Hibernate可以根据配置文件或者注解自动生成表,省去了自己写建表语句,在网上找了一下,MyBatis好像不可以。Google提供了generator,可以根据表结构生成实体类和映射文件,试了一下,还不错,以后会写一下。

二.配置文件

     这些框架什么的,基本上都需要配置文件。MyBatis的XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和 决定事务范围和控制的事务管理器。

mybatis-config.xml

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5.     
  6. <configuration>  
  7.     <!-- 数据库相关属性文件,这里不写的话,也会自动加载 -->  
  8.     <properties resource="config.properties"></properties>  
  9.       
  10.     <!-- 环境配置 -->  
  11.     <environments default="development">  
  12.         <environment id="development">  
  13.             <transactionManager type="JDBC"/>  
  14.             <!-- 数据库连接相关配置 ,这里动态获取config.properties文件中的内容-->  
  15.             <dataSource type="POOLED">  
  16.                 <property name="driver" value="${driver}"/>  
  17.                 <property name="url" value="${url}"/>  
  18.                 <property name="username" value="${username}"/>  
  19.                 <property name="password" value="${password}"/>  
  20.             </dataSource>  
  21.         </environment>  
  22.     </environments>  
  23.     
  24.     <!-- 映射文件 ,我们还没有,这里什么都不写-->  
  25.     <mappers>  
  26.     </mappers>  
  27.     
  28. </configuration>  
config.properties


三.从 XML 中构建 SqlSessionFactory

        每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。 SqlSessionFactoryBuilder 对象可以从 XML 配置文件,或从 Configuration 类的习惯准备的实 例中构建 SqlSessionFactory 对象。 

      这里的SqlSessionFactory和Hibernate中的SessionFactory是一样的,我们可以通过factory,获取session。

[java]  view plain copy
  1. package org.ygy.util;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5.   
  6. import org.apache.ibatis.io.Resources;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10.   
  11. /** 
  12.  * MyBatis的工具类 
  13.  * @author yuguiyang 
  14.  * 
  15.  */  
  16. public class MyBatisUtil {  
  17.     private static SqlSessionFactory sqlSessionFactory = null;  
  18.       
  19.     /** 
  20.      * 初始化Session工厂 
  21.      * @throws IOException 
  22.      */  
  23.     private static void initialFactory() throws IOException {  
  24.         String resource = "mybatis-config.xml";  
  25.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  26.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  27.     }  
  28.       
  29.     /** 
  30.      * 获取Session 
  31.      * @return 
  32.      */  
  33.     public static SqlSession getSession() {  
  34.         if(sqlSessionFactory == null) {  
  35.             try {  
  36.                 initialFactory();  
  37.             } catch (IOException e) {  
  38.                 e.printStackTrace();  
  39.             }  
  40.         }  
  41.           
  42.         return  sqlSessionFactory.openSession();  
  43.     }  
  44.       
  45.       
  46. }  

接下来,我们测试一下,看看配置是否正确:

[java]  view plain copy
  1. package org.ygy.model;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import org.apache.ibatis.session.SqlSession;  
  6. import org.junit.Test;  
  7. import org.ygy.util.MyBatisUtil;  
  8.   
  9. public class ModelTest {  
  10.       
  11.     @Test  
  12.     public void testGetSession() {  
  13.         SqlSession session = MyBatisUtil.getSession();  
  14.           
  15.         assertNotNull(session);  
  16.           
  17.         if(session != null) {  
  18.             session.close();  
  19.             session = null;  
  20.         }  
  21.     }  
  22. }  

貌似,想当然的悲剧了,这样测试好像不行,刚才忘记添加数据库驱动了,结果运行一样成功了,如果不执行SQL语句的话,MyBatis好像不会去连接数据库,测试还是等一下吧 委屈

既然这样的话,我们就先写一个映射文件。

首先,我们要建一张表,就来一个用户表吧(t_user),我用的SqlServer,语句就省略了吧大笑

然后,和表对应的实体类:

[java]  view plain copy
  1. package org.ygy.model;  
  2.   
  3. /** 
  4.  * 用户 
  5.  * @author yuguiyang 
  6.  * 
  7.  */  
  8. public class User {  
  9.     private Integer id;//自动增长的ID  
  10.     private String name;//用户名  
  11.     private String password;//密码  
  12.     private String email;//邮箱  
  13.     private Integer age;//年龄  
  14.     private Integer gender;//性别,0-男 ; 1-女  
  15.   
  16.     public Integer getId() {  
  17.         return id;  
  18.     }  
  19.   
  20.     public void setId(Integer id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.   
  28.     public void setName(String name) {  
  29.         this.name = name;  
  30.     }  
  31.   
  32.     public String getPassword() {  
  33.         return password;  
  34.     }  
  35.   
  36.     public void setPassword(String password) {  
  37.         this.password = password;  
  38.     }  
  39.   
  40.     public String getEmail() {  
  41.         return email;  
  42.     }  
  43.   
  44.     public void setEmail(String email) {  
  45.         this.email = email;  
  46.     }  
  47.   
  48.     public Integer getAge() {  
  49.         return age;  
  50.     }  
  51.   
  52.     public void setAge(Integer age) {  
  53.         this.age = age;  
  54.     }  
  55.   
  56.     public Integer getGender() {  
  57.         return gender;  
  58.     }  
  59.   
  60.     public void setGender(Integer gender) {  
  61.         this.gender = gender;  
  62.     }  
  63.   
  64.     @Override  
  65.     public String toString() {  
  66.         return "User [id=" + id + ", name=" + name + ", password=" + password  
  67.                 + ", email=" + email + ", age=" + age + ", gender=" + gender  
  68.                 + "]";  
  69.     }  
  70.   
  71. }  

接下来,是映射文件:UserMapper.xml

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5.     
  6. <mapper namespace="org.ygy.mapper.UserMapper">  
  7.   
  8.     <insert id="insert" parameterType="org.ygy.model.User" useGeneratedKeys="true">  
  9.         insert into t_user(name , password , email , gender , age)  
  10.         values(#{name} , #{password} , #{email} , #{gender} , #{age})  
  11.     </insert>  
  12.       
  13.     <select id="selectUser" resultType="org.ygy.model.User">  
  14.         select * from t_user  
  15.     </select>  
  16.     
  17. </mapper>  

最后,在mybatis-config.xml配置文件中添加映射文件:

[html]  view plain copy
  1. <!-- 映射文件 -->  
  2.     <mappers>  
  3.         <mapper resource="org/ygy/mapper/UserMapper.xml"/>  
  4.     </mappers>  

好了,这下,我们可以测试了:

[java]  view plain copy
  1. package org.ygy.model;  
  2.   
  3. import static org.junit.Assert.assertEquals;  
  4. import static org.junit.Assert.assertNotNull;  
  5.   
  6. import java.util.List;  
  7.   
  8. import org.apache.ibatis.session.SqlSession;  
  9. import org.junit.After;  
  10. import org.junit.Before;  
  11. import org.junit.Test;  
  12. import org.ygy.util.MyBatisUtil;  
  13.   
  14. public class ModelTest {  
  15.     private SqlSession session = null;  
  16.       
  17.     @Before  
  18.     public void before() {  
  19.         session = MyBatisUtil.getSession();  
  20.     }  
  21.       
  22.     @After  
  23.     public void after() {  
  24.         session.commit();  
  25.         session.close();  
  26.     }  
  27.       
  28.     @Test  
  29.     public void testGetSession() {  
  30.         assertNotNull(session);  
  31.           
  32.         if(session != null) {  
  33.             session.close();  
  34.             session = null;  
  35.         }  
  36.     }  
  37.       
  38.     @Test  
  39.     public void testSelectUser() {  
  40.         List<User> userList = session.selectList("org.ygy.mapper.UserMapper.selectUser");  
  41.           
  42.         for(User each : userList) {  
  43.             System.out.println("each->" + each);  
  44.         }  
  45.           
  46.     }  
  47.       
  48.     @Test  
  49.     public void testInsert() {  
  50.         User user = new User();  
  51.         user.setName("路飞");  
  52.         user.setPassword("lufei");  
  53.         user.setEmail("lufei@op.com");  
  54.         user.setAge(23);  
  55.         user.setGender(0);  
  56.           
  57.         int result = session.insert("org.ygy.mapper.UserMapper.insert" , user);  
  58.         assertEquals(1 , result);  
  59.     }  
  60. }  

微笑,这样,一个入门的示例,就差不多了。

拓展:

1.别名

在mybatis-config.xml中可以配置别名 (typeAliases)

类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关,只用来减少类完全限定名的多余部分。

看看上面UserMapper.xml中


只要在mybatis-config.xml中添加

[html]  view plain copy
  1. <!-- 配置别名 -->  
  2.     <typeAliases>  
  3.         <typeAlias type="org.ygy.model.User" alias="User"/>  
  4.     </typeAliases>  

就可以了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值