首先说一下dao使用原型: dao接口->dao实现类->dao测试代码
举例:
dao接口
public interface UserDao { //根据id查询用户信息 public User findUserById(int id) throws Exception; //根据用户名列查询用户列表 public List<User> findUserByName(String name) throws Exception;}
public class UserDaoImpl implements UserDao{ // 需要向dao实现类中注入SqlSessionFactory // 这里通过构造方法注入 private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory){ this.sqlSessionFactory = sqlSessionFactory; } @Override public User findUserById(int id) throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); User user = sqlSession.selectOne("test.findUserById",id); //释放资源 sqlSession.close(); return user; } @Override public List<User> findUserByName(String name) throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> list = sqlSession.selectList("test.findUserByName", name); // 释放资源 sqlSession.close(); return list; }
这里可以发现dao的实现到代码除了sqlSession调用的数据库操作语句不一样其他都相似。
so这里利用mapper的代理方法就是省略中间的dao实现类的代码以代理方式自动生成
1.建立dao接口,创建需要实现的功能方法
public User findUserById(int id) throws Exception;
2.mapper代理书写方式:建立一个任意名字的mappe.xml文件
内容填写有以下要求:
通过这个namepace将mapper.xml和接口联系在一起
<mapper namespace="dao接口的地址">
<select id="findById" parameterType="int" resultType="vo.User">
SELECT * FROM user WHERE id=#{value}
</select>
//与接口方法对比
public User findUserById(int id) throws Exception;
方法返回值类型为resultType的类型,方法名为id,参数类型为parameterType对应
另:当查询多个时,根据方法的返回是list或者单个决定生成的查询语句是selectone或者selectList
</mapper>