SQL映射器Mapper接口
MyBatis基于代理机制,可以让我们无需再写Dao的实现。直接把以前的dao接口定义成符合规则的Mapper。
注意事项:
1.接口必须以Mapper结尾,名字是DomainMapper
2.mapper.xml文件要和Mapper接口建立关系,通过namespace:要能连接到Mapper接口
3.mapper.xml中写查询语句的标签的传入参数类型(parameterType)、返回结果类型(resultType)必须和mapper接口中对应方法的传入参数类型和返回结果类型一致,id名字必须和mapper接口中的对应方法名保持一致。
操作步骤:
1、 创建一个DomainMapper接口:直接定义方法(共用了xml配置方式和接口+注解方式两种)
注意:映射器Mapper接口,替换dao层,不用再写mapper层(dao层)实现类;名字统一以Mapper结尾。
packagecn.wang._02mapper.mapper;importcn.wang._02mapper.domain.Product;importorg.apache.ibatis.annotations.Select;importjava.util.List;
public interfaceProductMapper {/*** 查询一个商品:使用了接口+注解的方式*/@Select("select * from Product where id = #{id}")
Product findOne(Long id);/*** 查询所有商品:使用了xml配置方式*/ListfindAll();
}
2、 在mapper目录(原dao目录)下创建映射文件DomainMapper.xml(ProductMapper.xml):
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from product
3、在resources目录下创建核心配置文件:
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
MybatisUtils工具类
packagecn.wang.Utils;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.Reader;public classMybatisUtils {//保证sqlSessionFactory是单例
private staticSqlSessionFactory sqlSessionFactory;//SqlSessionFactory类似于JPA的EntityManagerFactory,Hibernate的SessionFactory//SqlSession 类似于JPA的EntityManager,Hibernate的Session//该类被加载的时候就执行该静态代码块
static{try{
Reader reader= Resources.getResourceAsReader("MyBatis-Config.xml");
sqlSessionFactory= newSqlSessionFactoryBuilder().build(reader);
}catch (Exception e) {//异常的类型要写大一些,才能够看到具体的报错
e.printStackTrace();
}
}//提供一个外界调用的类
public staticSqlSession getSession(){//创建并返回SqlSession对象
returnsqlSessionFactory.openSession();
}//关闭sqlSession,释放资源(很重要,不然项目上线后会造成内存溢出)
public static voidcolseSession(SqlSession sqlSession){if(sqlSession !=null){
sqlSession.close();
}
}
}
jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mysql数据库名称
jdbc.username=用户名
jdbc.password=密码
可能遇到的错误:
(1)namespace写错了,应该对应mapper接口的完全限定名。
(2)Mapper映射文件忘记在核心配置文件中注册了。
(3)注册的路径也可能写错。