Mybatis 的作用

可以用来执行普通的sql操作 存储过程
它是一个高级的ORM(Object Relation Mapping 对象关系映射 以面向对象的思想操作数据库)框架
它封装了几乎所有的jdbc 操作 以及参数的手工设置
结果集检索(把结果集自动转换成对象)

Mybatis 框架的构成

实体类            封住数据和业务逻辑 
SQL定义文件        写SQL语句的XML 文件 
主配置文件        用来定义连接数据库信息 和 加载SQL定义文件 以及做一些特殊设置的 XML文件 
框架的API        主要通过SqlSession 来体现   (SqlSession 略微麻烦一些)  用来完成增删改查 

案例

使用Mybatis 完成根据id 查询银行账户 
建立一个项目 导入jar包(mybatis.jar 数据库驱动)
根据表建立对应的实体类 
拷贝sql 定义文件的模板 到 一个包中     在sql 定义文件中 定义SQL语句
拷贝主配置文件模板 到src下     定义连接数据的信息  并加载sql定义文件 
获取SqlSession对象   使用SqlSession 完成查询  

代码如下:

mapper.xml :
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.xdl.mapper.XdlBankAccountDAO">
    <select id="findAccNoById"   parameterType="int"
        resultType="String">
           select  acc_no from  account  where id = #{n}
    </select>
</mapper>

AccountDao.java :

import java.util.List;
import com.xdl.bean.XdlBankAccount;
public interface XdlBankAccountDAO {
    String  findAccNoById(int id);
}

sqlmap-config.xml: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
    <environments default="environment">
        <environment id="environment">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
                <property name="username" value="system"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/mapper.xml"/>
    </mappers>
</configuration>

测试类:

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.xdl.bean.Account;

public class SqlSessionTest {

    public static void main(String[] args) {
        // SqlSession 工厂构建器
        SqlSessionFactoryBuilder   ssfb  = new  SqlSessionFactoryBuilder();
        // 获取SqlSessionFactory
        InputStream  inputStream = SqlSessionTest.class.getClassLoader().
                getResourceAsStream("sqlmap-config.xml");
        SqlSessionFactory  ssf  = ssfb.build(inputStream);
        // 通过SqlSession 工厂获取SqlSession
        SqlSession ss = ssf.openSession();
        // 根据id 完成查询 
        String  acc_no = ss.selectOne("findAccNoById",2);
        System.out.println(acc_no);
    }
}

MyBatis的 Mapper 映射器规则

  1. 如果按照规则编写DAO 接口则不用写DAO的实现类 因为可以自动生成
  2. 接口中方法的返回值类型 和 sql语句中的 resultType 保持一致
  3. 当是查询语句时 如果是返回单值 则 和 resultType 保持一致 如果可能返回多个值,则使用List<这里的类型和restultType保持一致>
    如果是增删改 语句 则返回void 或者int 推荐使用 int
  4. 接口中方法的参数和 parameterType 保持一致 如果没有 parameterType 则代表方法参数任意
  5. SQL 定义文件中的 namespace 要写 包名.接口名


11月      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!