mybatis之入门到开发(四)之 Mapper动态代理方式

来源:互联网 发布:dota2天梯各分段 知乎 编辑:程序博客网 时间:2024/05/15 12:55

一:原始Dao开发方式
【分析】原始Dao开发方法需要程序员编写Dao接口和Dao实现类。
Dao接口实现类如下

public class UserDaoImpl implements UserDao {    private SqlSessionFactory sqlSessionFactory;    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {        super();        this.sqlSessionFactory = sqlSessionFactory;    }    @Override    public User queryUserById(int id) {        // 创建SqlSession        SqlSession sqlSession = this.sqlSessionFactory.openSession();        // 执行查询逻辑        User user = sqlSession.selectOne("queryUserById", id);        // 释放资源        sqlSession.close();        return user;    }    @Override    public List<User> queryUserByUsername(String username) {        // 创建SqlSession        SqlSession sqlSession = this.sqlSessionFactory.openSession();        // 执行查询逻辑        List<User> list = sqlSession.selectList("queryUserByUsername", username);        // 释放资源        sqlSession.close();        return list;    }    @Override    public void saveUser(User user) {        // 创建SqlSession        SqlSession sqlSession = this.sqlSessionFactory.openSession();        // 执行保存逻辑        sqlSession.insert("saveUser", user);        // 提交事务        sqlSession.commit();        // 释放资源        sqlSession.close();    }}

原始Dao开发中存在以下问题:
       Dao方法体存在重复代码:从上面的代码来看的话,只有sqlSession调用特定的方法不同,那么其他的都是累赘。无论是,创建SqlSessionFactoryBuilder,加载SqlMapConfig.xml配置文件,创建SqlsessionFactory
都是比较累赘的。

       再者说了,针对一个User,存在一个UserPodo,UserController,UserMapper.xml,UserService,UserDao。比以前多了一个文件,使得项目管理更加的复杂起来。所以这里推荐Mapper动态代理方式

二:Mapper动态代理方式 :它其实不是一个技术,而是一种开发规范
2.1 遵循以下这四个规范
      接口方法名 = User.xml中的id名
      返回值的类型与mapper.xml文件中的返回值类型要一致
      方法的入参类型要与mapper.xml的入参数类型要一致
      命名空间 绑定此接口
2.2 这里以User为例子

    //创建一个User.java的接口    public interface UserMapper{    //遵循四个原则    //接口方法名 = User.xml中的id名    //返回值的类型与mapper.xml文件中的返回值类型要一致    //方法的入参类型要与mapper.xml的入参数类型要一致    //命名空间 绑定此接口    /*这里的传入参数,跟返回参数,方法名都是跟UserMapper.xml定义的一样*/    public User selectUserById(Integer id);    public void save(User user);    public List<User> selectUserByLikeName(String username);    public List<User> selectUserByLikeNameTwo(String username);    public List<User> selectUserByQueryVo(QueryVo queryVo);}
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 --><mapper namespace="dgut.xiaozheng.mapper.UserMapper">    <!-- 保存用户信息 -->    <insert id="save" parameterType="user" useGeneratedKeys="true">        insert into tb_user(username,sex,age) values (#{username},#{sex},#{age})    </insert>    <!-- 通过id查找用户信息 -->    <select id="selectUserById" parameterType="Integer" resultType="user">        select * from tb_user where id = #{id}    </select>    <!-- 模糊名查询用户信息 -->    <select id="selectUserByLikeName" parameterType="string" resultType="user">        select * from tb_user where username like #{like}    </select>    <!-- 第二种方法,模糊查询用户信息 -->    <select id="selectUserByLikeNameTwo" parameterType="string" resultType="user">        select * from tb_user where username like '%${value}%'    </select>    <!-- two days -->    <select id="selectUserByQueryVo" parameterType="queryVo" resultType="user">        select * from tb_user where username like "%"#{user.username}"%"    </select></mapper>
//4、修改命名空间。命名空间直接映射的是UserMapper<mapper namespace="dgut.xiaozheng.mapper.UserMapper">

2.3 写测试案例

    @Test    public void testSelectUserByQueryVo(){        SqlSessionFactory sqlSessionFactory = MybatisUtilsForMe.getSqlSessionFactory();        SqlSession session = sqlSessionFactory.openSession();        //核心代码,getMapper()        UserMapper userMapper = session.getMapper(UserMapper.class);        QueryVo queryVo = new QueryVo();        User user = new User();        user.setUsername("欣");        queryVo.setUser(user);        List<User> userList = userMapper.selectUserByQueryVo(queryVo);        for (User user2 : userList) {            System.out.println(user2);        }    }//它这里可以通过getMapper方法获取Mapper对象,然后直接就可以调用接口中的方法
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了茭白和豆腐怎么办 电气焊加工怎么办环评 手上皮肤干燥起皮怎么办 脸上起皮怎么办还痒痒 店铺4周被释放了怎么办 炫舞账号忘了怎么办 椎基底供血不足怎么办? 脑动脉供血不足怎么办 颈椎引起的脑供血不足怎么办 军人保障卡怎么办假的 正常形态精子率低怎么办 前向运动精子21怎么办 前向运动精子22%怎么办 前向运动精子19%怎么办 前向运动精子为0怎么办 被蝎子草扎了怎么办 二年级孩子成绩差怎么办 长治医保卡丢了怎么办 农商银行倒闭钱怎么办 2相电变3相电怎么办 电机六根线乱了怎么办 三相电零线带电怎么办 孕30周胎盘偏厚怎么办 偏侧咀嚼大小脸怎么办 咀嚼导致的脸歪怎么办 30岁了不想长大怎么办 4岁宝宝沉迷手机怎么办 我沉迷于了游戏怎么办 学生小红本丢了怎么办 小学玩6年初中怎么办 鼻炎喘不过来气怎么办 面对素质低的人怎么办 对没素质的人怎么办 爸妈吵架要离婚怎么办 爸妈为钱吵架怎么办 50岁父母闹离婚怎么办 父母吵架要离婚我该怎么办 爸妈40几了打架怎么办 爸妈打架我该怎么办 17岁心理有问题怎么办 孩子被同学打了怎么办