项目目录如上所示。
图3:这个是myBatisconfig.xml的配置,在这里定义了两个别名,Student和Teacher会在StudentMapper.xml中用到。中间是JDBC的配置,下面是mapper映射配置,StudentMapper.xml配置包含了下面两幅图的内容,只是部分的。
图1 result 里面的property属性对应的是实体类的set属性,column对应的是数据库结果集字段。这里用到了association联合查询。结果集是teacherMap,property="teacher",对应在student类中需要维护一个teacher对象,并提供get,set
图2 这里解释下parameterType的意思,是解释的参数类型。可以是Object,也可以是基本数据类型。一些复杂的数据类型在这里就不说了。返回值类型:如果没有返回值,可以不写。有返回值,有两种,1:resultType:实际的类型,如整型:java.lang.Integer,字符串型:java.lang.String,或者是实体类,要包含全路径名,第二种是resultMap:在这里引用了studentResultMap,图1中定义的resultMap。
虽然一直在用mybatis,但是都是些比较简单的。没有深入的去了解,里面好多东西都不太知道他们的意思。今天就对他的一些东西做些了解。
package com.demo;
import java.io.InputStream;
import java.io.Reader;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import com.abc.entity.Student;
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
private static String resources="resources/myBatisconfig.xml"; //这个是要读取的mybatis配置文件
static {
try {
//通过SqlSessionFactoryBuilder里面有多个方法得到SqlSessionFactory
//得到的这个SqlSessionFactory其实是new DefaultSqlSessionFactory(config);
reader = Resources.getResourceAsReader(resources);
//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 这里builder的build方法是源码自带的,实际和下面的方法调用一样(源码中也是这么调用的)
sqlSessionFactory = build(Resources.getResourceAsStream(resources)); //这个是本地的方法,其实和源码是一样的
} catch (Exception e) {
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();//得到一个SqlSession
try {
Student student = (Student) session.selectOne("com.abc.service.StudentService.queryById", 130); //这里的查询语句对应的是图1和图2,在图2中实际的sql语句是注释里面的语句,没有注释的是联合查询的语句。
System.out.println(student.getName());
} finally {
session.close();
}
}
public static SqlSessionFactory build(InputStream inputStream){
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, null, null);
return build(parser.parse());
}
public static SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
}
这个类要完成的工作是1:通过Resources加载mybatis的xml配置文件得到一个Reader或者是Stream。
2:SqlSessionFactoryBuilder.build(..)方法得到SqlSessionFactory,他返回的是DefaultSqlSessionFactory,他的构造函数需要Configuration参数,这个参数在 parser.parse()得到了。