DAO模式开发:需要先建立一个实现功能接口和实现类A,完成xml文件sql语句配置,在接口实现类A里需要完成xml里对sql语句的操作并返回操作结果。在测试类里要完成sqlsession的开启并通过新建一个实现接口类对象A调用实现的方法来得到功能的实现
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
//需要向dao实现类中注入SqlSessionFactory工厂
//这里我们暂时没用spring,我们通过构造方法注入
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public User findUserById(int id) throws Exception {
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findUserById",id); 需要完成这个方法,之后再test类实例化调用
//释放资源
sqlSession.close();
return user;
}
再测试类里:
- //配置文件(SqlMapConfig.xml)
- String resource = "SqlMapConfig.xml";
- //加载配置文件到输入流
- InputStream inputStream = Resources.getResourceAsStream(resource);
- //创建会话工厂
- sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream); //得到会话工厂
- public void testFindUserById() throws Exception {
- UserDao userDao = new UserDaoImpl(sqlSessionFactory); //将会话工厂传入
- User user = userDao.findUserById(1) ; //通过实现的方法得到操作结果
- System.out.println(user);
- }
mapper代理开发模式:需要建立一个实现功能接口,完成xml文件的语句配置,不需要实现接口方法的类,通过mapper代理机制直接获得接口实现类。
但是xml文件里有了一些限制
在xml文件中
<!--
mapper代理中,id必须和mapper接口的方法名一致
parameterType必须和接口方法的参数类型一致
resultType必须和返回类型一致
-->
<select id="findUserById" parameterType="int" resultType="User"(这里用了设置别名,可以不用写路径名)>
select * from mb_test1 id=#{_parameter}
</select>
这样做是为了让xml文件内的statement能自动匹配接口中的方法,并自动完成方法的实现
在test文件中
String resource="SqlMapConfig.xml";
InputStream inputSteam=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputSteam);
SqlSession sqlSession= sqlSessionFactory.openSession();
ShopUserMapper shopUserMapper=sqlSession.getMapper(ShopUserMapper.class);
这句就是通过mapper代理的方法直接建立一个对象,完成操作不像dao开发要创建实现类
List<UserShopQuery> query=shopUserMapper.findUserById() ;sqlSession.close();
System.out.println(query);