killerxf 发表于 2016-11-24 08:37:11

MyBatis入门示例

  说明:
1,本文采用的Mybatis框架版本为: mybatis-3.0.4.jar
2, 以持久化一个简单的User bean为例
User实体类的代码如下:


[*]package bean; 
[*]  
[*]public class User { 
[*]    private String name; 
[*]    private Integer age; 
[*]    
[*]    public String getName() { 
[*]       return name; 
[*]    } 
[*]    public void setName(String name) { 
[*]       this.name = name; 
[*]    } 
[*]    public Integer getAge() { 
[*]       return age; 
[*]    } 
[*]    public void setAge(Integer age) { 
[*]       this.age = age; 
[*]    } 
[*]    public User(String name, Integer age) { 
[*]       super(); 
[*]       this.name = name; 
[*]       this.age = age; 
[*]    } 
[*]    
[*]    public User() { 
[*]       super(); 
[*]    }  //必须要有这个无参构造方法,不然根据UserMapper.xml中的配置,在查询数据库时,将不能反射构造出User实例 
[*]} 

 
User实体的映射器取名为UserMapper(接口),其代码如下


[*]package Mapper; 
[*]import bean.User; 
[*]  
[*]public interface UserMapper { 
[*]    public void insertUser(User user); 
[*]    public User getUser(String name); 
[*]} 

 
注意,该接口类似于Hibernate中的DAO层接口,唯一不同的是,MyBatis中,只声明该接口就可以,不需要去实现.
UserMapper映射器对应的配置文件如下(相当于Hibernate中的User.hbm.xml,当然这里面不是属性映射字段,而是直接是映射器中各种方法对应的sql语句):


[*]<?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="Mapper.UserMapper"> 
[*]<!-- 这里namespace必须是UserMapper接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”--> 
[*]    <insert id="insertUser" parameterType="User"> 
[*]       insert into vincent_user(name,age) values(#{name},#{age}) 
[*]       <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 --> 
[*]    </insert> 
[*] 
[*]    <!-- 这里的id必须和UserMapper接口中的接口方法名相同,不然运行的时候也要报错 --> 
[*]    <select id="getUser" resultType="User" parameterType="java.lang.String"> 
[*]        select * from vincent_user where name=#{name} 
[*]    </select> 
[*]</mapper> 

 
MyBatis的配置文件这里取名为mybatis-config.xml其配置代码如下(相当与Hibernate的hibernate.cfg.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> 
[*]    <settings> 
[*]        <!-- changes from the defaults for testing --> 
[*]        <setting name="cacheEnabled" value="false" /> 
[*]        <setting name="useGeneratedKeys" value="true" /> 
[*]        <setting name="defaultExecutorType" value="REUSE" /> 
[*]    </settings> 
[*]    <typeAliases> 
[*]       <typeAlias alias="User" type="bean.User"/> 
[*]    </typeAliases> 
[*]    <environments default="development"> 
[*]       <environment id="development"> 
[*]           <transactionManager type="jdbc"/> 
[*]           <dataSource type="POOLED"> 
[*]              <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> 
[*]              <property name="url" value="jdbc:oracle:thin:@192.168.56.201:1521:system"/> 
[*]              <property name="username" value="vincent"/> 
[*]              <property name="password" value="1234"/> 
[*]           </dataSource> 
[*]       </environment> 
[*]    </environments> 
[*]    <mappers> 
[*]        <mapper resource="resource/UserMapper.xml" /> 
[*]    </mappers> 
[*]</configuration> 

加载配置文件得到sqlSessionFactory的工具类


[*]package Util; 
[*]  
[*]import java.io.IOException; 
[*]import java.io.Reader; 
[*]  
[*]import org.apache.ibatis.io.Resources; 
[*]import org.apache.ibatis.session.SqlSessionFactory; 
[*]import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
[*]  
[*]public class MyBatisUtil  { 
[*]    private  final static SqlSessionFactory sqlSessionFactory; 
[*]    static { 
[*]       String resource = "resource/mybatis-config.xml"; 
[*]       Reader reader = null; 
[*]       try { 
[*]           reader = Resources.getResourceAsReader(resource); 
[*]       } catch (IOException e) { 
[*]           System.out.println(e.getMessage()); 
[*]           
[*]       } 
[*]       sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 
[*]    } 
[*]    
[*]    public static SqlSessionFactory getSqlSessionFactory() { 
[*]       return sqlSessionFactory; 
[*]    } 
[*]} 

 
测试代码如下:



[*]package TestMapper; 
[*]import org.apache.ibatis.session.SqlSession; 
[*]import org.apache.ibatis.session.SqlSessionFactory; 
[*]import org.junit.Test; 
[*]  
[*]public class TestMapper { 
[*]    static SqlSessionFactory sqlSessionFactory = null; 
[*]    static { 
[*]       sqlSessionFactory = MyBatisUtil.getSqlSessionFactory(); 
[*]    } 
[*]    
[*]    @Test 
[*]    public void testAdd() { 
[*]       SqlSession sqlSession = sqlSessionFactory.openSession(); 
[*]       try { 
[*]           UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
[*]           User user = new User("tom",new Integer(5)); 
[*]           userMapper.insertUser(user); 
[*]           sqlSession.commit();//这里一定要提交,不然数据进不去数据库中 
[*]       } finally { 
[*]           sqlSession.close(); 
[*]       } 
[*]    } 
[*]    
[*]    @Test 
[*]    public void getUser() { 
[*]       SqlSession sqlSession = sqlSessionFactory.openSession(); 
[*]       try { 
[*]           UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
[*]           User user = userMapper.getUser("jun"); 
[*]           System.out.println("name: "+user.getName()+"|age: "+user.getAge()); 
[*]       } finally { 
[*]           sqlSession.close(); 
[*]       } 
[*]    } 
[*]  
[*]} 
页: [1]
查看完整版本: MyBatis入门示例