传统开发方式:
- 编写UserDao/UserMapper接口
- 编写UserDao/UserMapper实现类,里面有各种增删改查方法
- service层创建UserDao/UserMapper,并调用其中方法
Mybatis的开发方式:代理开发方式(Mapper接口开发)
- 编写Mapper接口(相当于Dao接口,也在dao包中)
- Mapper接口的名、方法、参数、返回值等要与映射文件中的一致。
Mapper接口开发需要遵循的规范:
- 映射文件中的namespace和mapper接口的全限定名相同
- mapper接口中的方法名要与映射文件中的执行语句id相同
- mapper接口中的方法参数要与映射文件中的parameterType的类型相同
- mapper接口中的方法返回值类型要与映射文件中的resultType的类型相同
代码实现:
-
定义dao包中的接口
public interface UserMapper { public List<User> findAll() throws IOException; }
-
定义映射文件userMapper.xml(注意其中的namespace/resultType/id)
<?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.dao.UserMapper"> <select id="findAll" resultType="com.domain.User"> select * from user </select> </mapper>
-
定义配置文件sqlMapConfig.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> <!-- 加载properties配置文件--> <properties resource="jdbc.properties"/> <!-- 数据源环境--> <environments default="developement"> <environment id="developement"> <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="UserMapper.xml"/> </mappers> </configuration>
-
测试
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = factory.openSession(); // 这里和原来的不一样 // 这里使用了getMapper方法 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> all = mapper.findAll(); System.out.println(all);