持久层框架MyBatis学习(3)-DAO层的开发方式

场景:根据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.开发规范:

  1. 接口的全路径要和映射文件的namespace保持一致
  2. 接口的方法名要和映射文件中的statementId保持一致
  3. 接口方法的参数类型、返回数据类型要和映射文件中的parameterType、resultType保持一致
  4. 接口和映射文件的名字最好保持一致 UserMapper.java UserMapper.xml
  5. 接口和映射文件最好放到同一个目录

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”/>
如果使用此方式:
接口和映射文件的名字要保持一致
接口和映射文件要放到同一个目录

你可能感兴趣的:(笔记)