首页 > 代码库 > MyBatils课程一

MyBatils课程一

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

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

搭建开发的环境:mybatis-3.1.1.jar和mysql-connector-java-5.1.7-bin.jar

  • 配置文件:

1. 设置mybatis 配置文件:SQLMapconfig.xml, 在src目录下建立此文件(文件名任意,格式为.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>
    <typeAliases>
        <typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC" />
            <dataSource type="POOLED">  
                            <property name="driver" value="http://www.mamicode.com/com.mysql.jdbc.Driver" />
                <property name="url" value="http://www.mamicode.com/jdbc:mysql://127.0.0.1:3306/yiibai" />
                <property name="username" value="http://www.mamicode.com/root" />
                <property name="password" value="" />
                       </dataSource>
        </environment>
    </environments>

    <mappers>
         <mapper resource="com/yiibai/mybatis/models/User.xml" />
    </mappers>
</configuration>

2、定义表所对应的实体类,如下图所示:

技术分享

 

package org.wangyi.com;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 定义实体类
 * 
 * @author wangyi
 * @version 1.0 <br />
 *          <a href="http://www.mamicode.com/www.baidu.com">百度一下</a>
 */
public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String bd = format.format(this.birthday);
        String content = "User[ " + this.id + "," + this.username + ","
                + this.sex + "," + bd + "," + this.address + " ]";
        return content;
    }

}

 

 3、定义操作users表的sql映射文件userMapper.xml

  创建一个me.gacl.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 
    例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) -->
<mapper namespace="org.wangyi.mapping.userMapper">
    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为finduserByid,id属性值必须是唯一的,不能够重复 
        使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="org.wangyi.com.User"就表示将查询结果封装成一个User类的对象返回 
        User类就是users表所对应的实体类 -->
    <!-- 根据id查询得到一个user对象 -->
    <select id="finduserByid" parameterType="int" resultType="org.wangyi.com.User">
        select
        * from user where id=#{id}
    </select>
</mapper>

 

 

下面是对这几个配置文件一点解释说明:
1、配置文件SQLMapconfig.xml.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="User" type="org.wangyi.mapping.userMapperr"/> 这个别名非常重要,在具体的类的映射中,比如:User.xml 中 resultType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面学习到我们再详细介绍说明。
2、SQLMapconfig.xml 里面 的<mapper resource="com/yiibai/mybatis/models/User.xml"/>是包含要映射的类的 xml 配置文件。
3、在userMapper.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。

开始测试

package org.wangy.first;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.wangyi.com.User;

/**
 * MyBatis的入门程序
 * 
 * @author wangyi
 * @version 1.0 <br />
 *          <a href="http://www.mamicode.com/www.baidu.com">百度一下</a>
 * 
 */
public class MyBatisFirst {
    // 查询一条记录
    @Test
    public void findUserByid() throws IOException {
        // MyBatis的配置文件
        String resource = "SQLMapConfig.xml";
        // 得到SQLMapConfig.xml配置文件流
        String path = MyBatisFirst.class.getClassLoader().getResource(resource)
                .getPath();
        InputStream inputStream = new FileInputStream(path);
        // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        // Reader reader = Resources.getResourceAsReader(resource)或者
        // InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建MyBatis的会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder()
                .build(inputStream);
        // 得到会话sqlSession
        SqlSession sqlSession = factory.openSession();
        // 通过sqlSession操作数据库
        /**
         * 第一个参数:值=xxxMapper.xml文件中mapper标签的namespace属性的值+“.”+sql语句标签的id值,
         * 第二个参数:值=和映射文件所匹配的ResultType类型的参数
         */
        User user = sqlSession.selectOne(
                "org.wangyi.mapping.userMapper.finduserByid", 31);
        // 释放资源,不要忘记
        sqlSession.close();
        System.out.println(user);
    }

}

技术分享

MyBatils课程一