多个映射文件
- 在 Configuration XML 里可以配置多个映射文件
在mybatis-config.xml里面可以配置多个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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/af_example?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="a1b2c3"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis-mapper-student.xml"/>
<mapper resource="mybatis-mapper-teacher.xml"/>
</mappers>
</configuration>
mybatis-mapper-student.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">
<mapper namespace="af.student">
<select id="get" resultType="my.Student">
select * from student where id = #{id}
</select>
</mapper>
mybatis-mapper-teacher.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">
<mapper namespace="af.teacher">
<select id="list" resultType="hashmap">
select * from teacher order by id ASC
</select>
</mapper>
注解方式的Mapper
- 除了xml方式的mapper,Mapper也可以用Java代码的方式来定义
- 步骤 :
1.定义一个接口,对应于 Mapper
添加一些方法
添加注解,定义SQL和参数
方法的参数,方法的返回值类型
2.在mybatis-config.xml里注册
3.在代码里调用
- 注解方式写的mapper优点:简洁一些,参数类型和返回值可以自动提示
- 注解方式写的mapper缺点:不适用于复杂的SQL(比如太长的SQL,要换行书写)
1.添加接口类mapper StudentMapper.java
package my;
import org.apache.ibatis.annotations.Select;
import my.Student;
public interface StudentMapper
{
@Select("SELECT * FROM student WHERE id = #{id}")
Student getStudent(int id);
}
我们来与xml形式的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="af.student">
<select id="getStu" resultType="my.Student">
select * from student where id = #{id}
</select>
</mapper>
接口类里面的getStudent对应xml里面的id,参数id对应sql里面的参数id,Student对应xml里面的resultType。
再添加另一个mapper TeacherMapper.java
package my;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Select;
public interface TeacherMapper
{
@Select("SELECT * FROM teacher ORDER BY ID ASC ")
List<Map> getList();
}
2.在mybatis-config.xml里注册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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/af_example?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="a1b2c3"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="my.StudentMapper"/>
<mapper class="my.TeacherMapper"/>
</mappers>
</configuration>
3.测试
package my;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
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 Test
{
public static void main(String[] args) throws Exception
{
// 创建 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 以注解方式定义的 Mapper
try (SqlSession session = sqlSessionFactory.openSession()) {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student stu = mapper.getStudent(20190001);
if(stu != null)
System.out.println("找到学生记录");
}
try (SqlSession session = sqlSessionFactory.openSession()) {
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
List<Map> rows = mapper.getList();
if(rows != null)
System.out.println("找到教师记录: " + rows.size());
}
System.out.println("Exit");
}
}
4.结果