文章目录
Mybatis初体验
1.根据配置文件创建SqlSessionFactory
想要使用mybatis,最先创建的对象为SqlSessionFactory
的实例。这个对象的创建需要使用SqlSessionFactoryBuilder.builder()
方法,这个方法需要一个参数,将配置文件传入。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
下面的XML可以看个大概,<properties/>
用来引入一个配置文件,看到下面的EL表达式,以及引入的配置文件名,可以看出来这个标签就是引入一个JDBC的配置文件。
<environments/>
用来配置数据源。
剧透一下,<mappers/>
用来注册<mapper/>
,关于mapper的作用,下面介绍。
<?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>
<properties resource="jdbc-config.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/test/mapper/CollegeDaoMapper.xml"/>
</mappers>
</configuration>
mapper
mybatis可以通过动态代理,根据mapper,动态创建一个对象
请看下面的mapper:
<?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.test.dao.ICollegeDao">
<select id="getCollegeById" resultMap="college">
select * from college where college_id = #{id};
</select>
<resultMap id="college" type="com.test.entity.College">
<id column="college_id" property="id"></id>
<result column="college_name" property="name"></result>
</resultMap>
</mapper>
namespace
属性:指出接口的全限定类名<select/>
表示接口中的查询方法,id
属性指出方法名,resultMap
指出表的记录每一列与实体类之间的对应关系。<resultMap>
配置数据库中表的记录每一列与实体类的关系。
分析得出,这里配置了一个查询方法,方法名为getCollegeById
,他有一个参数id
(下面的sql中,通过#{id}
使用这个参数)。
表中college_id
这一列,被封装到javabean时,封装到id
字段;college_name
这一列,被封装到javabean中时,封装到name
字段。
根据上面的配置,Mybatis就可以通过动态代理生成一个代理对象
怎样获取代理对象?
获取上述的代理对象,需要使用SqlSession
中的方法,所以,要先获取SqlSession
的实例。
2.从SqlSessionFacory
中获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
3.从SqlSession
中获取代理对象
ICollegeDao collegeDao = sqlSession.getMapper(ICollegeDao.class);
4.使用代理对象操作
College college = collegeDao.getCollegeById(1);
System.out.println(college);
使用过程出现的问题:找不到配置文件
问题原因:IDEA编译之后,在class文件夹中没有将mapper.xml文件所在的文件加(包)拷贝到target\classes\com\test
目录下,所以会找不到这个文件
解决方法:配置maven
将src/main/java
目录下的所有xml都参与编译
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
配置完之后,再次进行编译,就会出现一个文件夹,就是我们配置的包。
这样,类就可以找到配置文件了