• 主要内容
    • 使用了MyBatis,如果还是用传统方式,套路不变(Mybatis的最大作用在于映射,解耦sql和代码)
      • 传统开发方式:Dao层要定义接口,再定义实现类/impl/..
        • image.png
      • 能不能只定义接口,剩下事情就交给? 可以
      • 操作如下
        • 习惯上,我们将Dao命名为Mapper层(还是Dao层),在里面定义接口
        • 配置sqlMapConfig.xml 和 UserMapper.xml 和 上一节基本没有不用
        • 但要求:
          • UserMapper.xml Mapper标签namespace 要和定义的接口全限定名相同
          • Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
          • Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
          • Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
      • 如上,MyBatis的Dao层实现就完成了,实操时获得mapper 对象并用其方法执行:
        • UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        • 由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 ```xml package com.jquan.mapper;

    import com.jquan.domain.User;

    import java.util.List;

    public interface UserMapper { List findAll(); List findById(int id); }

    package com.jquan.test;

    import com.jquan.domain.User; import com.jquan.mapper.UserMapper; import com.sun.corba.se.spi.orbutil.fsm.Input; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test;

    import java.io.IOException; import java.io.InputStream; import java.util.List;

    /* Mybatis 的Dao 层实现/ public class MyBatisTestDao {

    1. @Test
    2. public void test() throws IOException {
    3. InputStream resources = Resources.getResourceAsStream("sqlMapConfig.xml");
    4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resources);
    5. SqlSession sqlSession = sqlSessionFactory.openSession();
    6. /*UserMapper , 就相当于我们以前Dao层的User类Impl实现*/
    7. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    8. List<User> userList = mapper.findAll();//直接调用方法,我们不需要像 MyBatisTest中一样操作 sql API: select,update,...
    9. System.out.println(userList);
    10. System.out.println("------------------");
    11. List<User> user = mapper.findById(1);
    12. System.out.println(user);
    13. }

    }

    ```xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--接口的全限定名-->
    <mapper namespace="com.jquan.mapper.UserMapper">
    
        <!--查询全部-->
        <select id="findAll" resultType="com.jquan.domain.User">
            select * from user
        </select>
        <!--根据id查询-->
        <select id="findById" resultType="user" parameterType="int">
            select * from user where id=#{id}
        </select>
    
        <!--插入-->
        <insert id="saveUser"  parameterType="user">
            insert into user values (#{id},#{username},#{password});
        </insert>
    
        <!--删除-->
        <delete id="delete"  parameterType="int">
            delete from user where id=#{id};
        </delete>
    
        <!--修改操作-->
        <update id="update"  parameterType="user">
            update user set username=#{username},password=#{password} where id = #{id}
        </update>
    
    
    </mapper>