场景:根据ID查询用户。开发方式有两种
一,传统开发方式(了解)
接口+实现类+映射文件
1.创建映射文件UserMapper.xml
<mapper namespace="test1">
<select id="findUserById" parameterType="int" resultType="com.djc.mybatis.po.User" >
select * from user where id = #{id}
</select>
</mapper>
namespace的作用:sql隔离,两个映射有同名的statementId可以用namespace区分
2.接口和实现类
接口:
public interface UserDao {
public User findById(int id);
}
实现类:
public class UserDaoImpl implements UserDao {
SqlSessionFactory sqlSessionFactory = null;
public UserDaoImpl (SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User findById(int id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test1.findUserById", id);
sqlSession.close();
return user;
}
}
3.编写测试类
public class UserDaoTest {
SqlSessionFactory sqlSessionFactory = null;
@Before
public void init() throws Exception {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
}
@Test
public void testFindById() {
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findById(27);
System.out.println(user);
}
}
因为还有硬编码问题,所以不推荐使用
二,mapper代理形式(官方推荐)
接口+映射文件
1.开发规范:
- 接口的全路径要和映射文件的namespace保持一致
- 接口的方法名要和映射文件中的statementId保持一致
- 接口方法的参数类型、返回数据类型要和映射文件中的parameterType、resultType保持一致
- 接口和映射文件的名字最好保持一致 UserMapper.java UserMapper.xml
- 接口和映射文件最好放到同一个目录
2.接口和映射文件
接口:
public interface UserMapper {
public User findUserById(int id);
}
映射文件:
<mapper namespace="com.djc.mybatis.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="com.djc.mybatis.po.User" >
select * from user where id = #{id}
</select>
</mapper>
3.编写测试类
public class UserMapperTest {
SqlSessionFactory sqlSessionFactory = null;
@Before
public void init() throws Exception{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
}
@Test
public void testFindById(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findUserById(27);
System.out.println(user);
sqlSession.close();
}
}
三,sqlMapConfig.xml 属性说明
1、properties 加载规则:先加内后加外,两者都有会覆盖
2、typeAliases 别名
< typeAlias type=“com.djc.mybatis.pojo.User” alias=“user”/>
< package name=“com.djc.mybatis.pojo”/> 默认的别名是类名
3、mappers映射器
< mapper class=“com.djc.mybatis.mapper.UserMapper”/>
如果使用此方式:
接口和映射文件的名字要保持一致
接口和映射文件要放到同一个目录
< package name=“com.djc.mybatis.mapper”/>
如果使用此方式:
接口和映射文件的名字要保持一致
接口和映射文件要放到同一个目录