11.MyBatis映射文件

多个映射文件

  • 在 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&amp;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&amp;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.结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值