Mybatis

简介:

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(与hibernate的作用相同,都是与数据库进行交互,hibernate 可以反射生成实体类,mybatis不能)

 

使用:

  1.导包

  导入mybatis的包:只有一个包

  另外需要的是jdbc的驱动包(这里是使用oracle):

  2.配置(在配置之前,在数据库中已经建好了一个user表 有三个字段 id,userName,password,并且实体类已经写好)

  在src下建立一个xml文件,名字没有限制

配置的属性如下,也可去官网找(百度: mybatis)

<?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>
    <!-- mybatis配置环境(复数)   default为哪个  就执行哪个-->
    <environments default="test1">
            <!-- mybatis环境 -->
            <environment id="test1">
                <!-- mybatis支持的事务  
                    JDBC 数据源自己的事务管理
                    MANAGE   托管(不支持tomcat  一般用在大型商业服务器,        weblogic ,jboss)    -->
                <transactionManager type="JDBC"></transactionManager>
                
                    <!-- 数据源     type的属性:POOLED ,UNPOOLED, JNDI -->
                    <!--POOLED:使用连接池 可以联想成c3p0 
                        UNPOOLED:不使用连接池  可以联想成jdbc的链接方式
                        JNDI:使用应用服务器的数据源链接(不常用)
                      -->
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>    <!-- Oracle数据库的驱动 -->
                    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>    <!-- Oracle数据库的jdbc协议 -->
                    <property name="username" value="zhao"/>
                    <property name="password" value="123"/>
                </dataSource>
            </environment>
    </environments>
    
    <!-- 每个实体类对应的配置文件映射 -->
    <mappers>
        <mapper resource="com/maya/dao/TUserMapper.xml"/>
    </mappers>

</configuration>

3.建立一个util包,在util包下建立(SessionFactory)

MybatisUtil类

 

package com.maya.util;

import java.io.IOException;
import java.io.InputStream;
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 MybatisUtil {

    private static SqlSessionFactory SessionFactory;        //与hibernate的sessionfactory很相像
    private static SqlSession sqlsession;
    
    public static SqlSession getSqlSession(){
        //用流的方式
        InputStream in=null;
        //第二种方式
        Reader reader=null;
        try {
            in=Resources.getResourceAsStream("mybatis.xml");    //读取配置文件
            SessionFactory=new SqlSessionFactoryBuilder().build(in);
            //第二种方法
            //reader=Resources.getResourceAsReader("mybatis.xml");
            //SessionFactory=new SqlSessionFactoryBuilder().build(reader);
            sqlsession=SessionFactory.openSession();
            in.close();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        
        return sqlsession;
        
    }
}

 

总配置文件配置完成,接下来配置每个实体类对应的配置文件,有两种方式:

  1.直接使用配置文件映射实体类(优缺点: 不需要写接口,不好维护)

  2.使用接口

1.xml配置文件的方式:建立dao包,在该包下建立一个xml文件

<?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.maya.dao.TUserMapper"><!-- 一般的命名规则,包名开始,到对应的配置文件结束 -->
    <!-- 查询集合 -->
    <select id="List" resultType="com.maya.model.TUser" > 
        <!-- parameterType 参数类型(String.int.等等) resultType返回类型  parameterMap-->
    select * from t_user <!-- sql语句 这里是我们自己来写 -->
    </select>
</mapper>

 

 

建立一个JUint测试用例

 

 

 

package com.maya.util;

import static org.junit.Assert.*;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.maya.model.TUser;

public class JTest {

    private SqlSession ss;
    
    @Before
    public void setUp() throws Exception {
        //执行时自动先执行该方法
        ss=MybatisUtil.getSqlSession();
    }

    @After
    public void tearDown() throws Exception {
        //执行完test之后自动执行该语句
        ss.commit();
        ss.close();
    }

    @Test
    public void test() {
        List<TUser> list=ss.selectList("com.maya.dao.TUserMapper.List");
        for(TUser us:list){
            System.out.println(us);
        }
    }
}

执行代码如下

数据库中的数据:

 

posted @ 2017-04-19 22:26  赵天成123  阅读(677)  评论(0编辑  收藏  举报