首先程序进入启动类MyBatisDemo.java中,读取配置文件mybatis-config.xml
再由mybatis-config的mappers属性
找到sql映射文件UserMapper.xml文件,通过其中的namespace属性,
找到User类,并和数据库表做映射。
package com.itheima.pojo;
public class User {
String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
'}';
}
}
package com.itheima;
import com.itheima.pojo.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
// 加载mybatis核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// SqlSession,用它执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行sql
List users = sqlSession.selectList("test.selectAll");
System.out.println(users);
// 释放资源
sqlSession.close();
}
}
这里的
是因为UserMapper和mybatis-config同处于一个包,所以可以只写名字。但是如果UserMapper不和其同处于一个包的话,就需要写全路径。
这里的namespace
相当于这个mapper文件的唯一标识,不能与其他mapper文件的重复,就相当于外面套了一个test包,在其他地方调用,譬如启动类MyBatisDemo.java中调用时,要用test.方法名。
想在resources包下面创建多级目录,譬如"com.itheima.mapper",不能直接创建一个目录,然后名称写"com.itheima.mapper",这样只会默认创建一个"com.itheima.mapper"的目录,而不会自动分级。
如果想要自动分级,需要写"com/itheima/mapper"
首先程序进入启动类MyBatisDemo中,读取配置文件mybatis-config.xml
再由mybatis-config的mappers属性
找到mapper包下面的mapper接口。
因为mapper接口和sql映射文件属于同一个包层次结构,所以由mapper接口可以找到sql映射文件UserMapper.xml。再由其中的resultType字段
找到pojo类,并映射对应的数据库表结构。
package com.itheima.mapper;
import com.itheima.pojo.User;·54
import java.util.List;
public interface UserMapper {
List selectAll();
}
package com.itheima.pojo;
public class User {
String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
'}';
}
}
namespace为mapper接口的全限定名。
可以右键点击mapper接口,复制引用,即其全限定名。
package com.itheima;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
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 MyBatisDemo {
public static void main(String[] args) throws IOException {
//加载mybatis核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取UserMapper对象,用它直接执行sql方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Listusers = userMapper.selectAll();
System.out.println(users);
//释放资源
sqlSession.close();
}
}
其中可以使用class=全类名,来找到mapper接口。
也可以使用包扫描的方式,来找到mapper接口。
mybatis-config.xml里面的属性是有顺序的,顺序如下:
和2.0 代理开发一样,但是xml文件里面不需要再写select属性,只需要在pojo的类上面加上对应的注解即可。
package com.itheima.mapper;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("select * from tb_user")
List selectAll();
}