将DAO接口中的方法映射到xml文件中,也就是只需在xml文件中编写SQL语句,然后会自动创建DAO接口的实现类
示例:
1.假设有一个student表,现在要去查询该表。
1).需要有一个DAO接口IStudentDao, 完全限定名:com.test.dao.IstudentDao
2).编写mybatis的配置文件,命名为mybatis-config.xml。文件中需要配置连接参数:url、账号密
码...以及DAO接口映射到的xml文件的路径(xxxMapper.xml)
3).在xml映射文件中,编写SQL语句,以及它关联的DAO接口,该xml文件相对于mybatis-config.xml的
路径最好与其关联的DAO接口的完全限定名一致。
4).然后加载xml配置文件,3)中通过在xml文件中编写sql实现了相应的DAO接口,现在可以执行sql语句
2.mybatis-config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--连接参数-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="****"/>
</dataSource>
</environment>
</environments>
<!--映射文件的路径-->
<mappers>
<!--这里的路径是相对于mybatis-config.xml的路径-->
<mapper resource=com/test/dao/StudentMapper.xml"/>
</mappers>
</configuration>
3.StudentMapper.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">
<!--通过namespace属性将该映射文件绑定到指定的DAO接口,从而通过该xml文件实现DAO接口-->
<mapper namespace="com.test.dao.StudentMapper">
<!--id为实现的指定DAO接口中的方法名,resultType为查询结果的每一行对应的对象类型-->
<select id="getStudent" resultType="Student">
<!--#{id}为OGNL表达式,是当前上下文中的id变量,也就是方法参数-->
SELECT * FROM student WHERE id = #{id};
</select>
</mapper>
4.获取连接,执行SQL:
String resource = "mybatis-config.xml";
//Resources是mybatis中内置的类,用于获取资源文件
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory =
new SqlSessionFactoryBuilder().build(is);
//SqlSession相当于Connection
SqlSession sqlSession = factory.openSession();
//将DAO接口方法的全限定名作为参数来执行指定方法,并传入参数
1).Student s =
(Student)sqlSession.selectOne("com.test.dao.StudentMapper.getStudent",1);
//通过xml映射文件已经有了DAO接口的实现类,现在创建该实现类的实例,直接调用该对象的方法
2).IStudentDAO sDao = sqlSession.getMapper(IStudentDAO.class);
Student s = sDao.getStudent(1);
parameterType:
1.parameterType为方法传入的参数的类型,mybatis能够自动推断出来,所以可以不写。
当传入的参数是基本数据类型(int,String...),用#{}访问到的参数本身的值,如果是一个类类型
那么用#{}访问到的则是参数对象内的属性
2.<select id="getUser" parameterType="User" returnType="User">
SELECT * FROM user WHERE id=#{id};
</select>
这里#{id}访问的是User对象中的id属性
|