如何在操作SQL语句执行时 携带动态的信息
    sqlSession调用方法时 增删改查方法都提供了两个重载
    insert(“sql的id”); insert(“sql的id”,object)
    执行sql语句的时候 sql语句中使用#{key}

    如果sql语句中只有一个#{key} key是可以随便写
    如果sql语句中两个以上的#{key} 需要key与传递参数的值对应
    domain对象
    map
    StudentDao中的方法

    1. //设计一个方法,根据给定的学生id,修改学生性别
    2. public void update(Student student){
    3. SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
    4. InputStream inputStream=Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    5. SqlSessionFactory factory= builder.build(inputStream);
    6. SqlSession sqlSession=factory.openSession(true);
    7. sqlSession.update("update",student);//1.SQL语句id号 2.SQL语句上的动态信息
    8. //底层原理:
    9. //1.加载驱动 参考核心配置文件driver
    10. //2.获取连接 参考核心配置文件url、username、password
    11. //3.创建状态参数 参考mapper文件,通过我们给的sql语句的id找到真正的SQL语句
    12. //4.将SQL和问号动态信息拼接完整
    13. // 对象(sex id name) 反射对象中每一个属性,分析SQL的每一个#{key} 匹配
    14. //5.执行SQL操作 6.。。。。。。
    15. }
    16. //设计一个方法,查询单条记录 读操作,携带返回值
    17. public Student selectOne(Integer id){//此处模拟用用固定记录来进行演示
    18. /*
    19. 原先的框架底层:
    20. JDBC+SQL,告知SQL--告知SQL上问号信息(非必须有)---告知容器(一行记录)类型
    21. 加载驱动--获取连接--状态参数(conn.preparedStatement(sql))--
    22. 将SQL和问号信息拼接完整--执行操作--将查询结果取出后装入新容器(数组、集合、domain对象)--关闭结果集--
    23. 关闭操作--返回新的容器
    24. */
    25. //找寻SqlSession对象
    26. SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
    27. InputStream inputStream=Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml");
    28. //第二种获取输入流的方式,有几点需要注意
    29. //InputStream inputStream1= Resources.getResourceAsStream("configuration.xml");
    30. //1.Resources这个类是Mybatis框架提供的,依赖度很高
    31. //2.方法名与我们之前用到的ClassLoader加载方法一致,且框架提供的这个方法必须处理异常
    32. SqlSessionFactory factory=builder.build(inputStream);
    33. SqlSession sqlSession=factory.openSession(true);
    34. //让SqlSession对象帮我们做事
    35. return sqlSession.selectOne("selectOne",id);//1.SQL语句的id、SQL语句上的问号信息(暂无)、查询结果装入什么容器
    36. }

    StudentMapper.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="dao.StudentDao">
    6. <select id="selectOne" resultType="domain.Student">
    7. select * from newstudent where id = #{id};
    8. </select>
    9. <update id="update">
    10. update newstudent set sex = #{sex} where id = #{id} ;
    11. </update>
    12. </mapper>

    #{} ——-> 表示类型和值 通常用来做条件 列的值
    ${} ——-> 表示的就是一个普通字串 “asc” 通常是表名 列名 关键字
    比如

    //设计一个方法 查询所有学生 根据id进行排序 (升序、降序不一定)
        //  设计一个参数 排序的方式 String flag
        public List<Student> selectAllByOrder(String flag){//asc升序 desc降序
            //1.找寻sqlSession
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml"));
            SqlSession sqlSession = factory.openSession(true);
            //2让sqlSession干活
            return sqlSession.selectList("selectAllByOrder",flag);
        }
    
    <select id="selectAllByOrder" resultType="domain.Student">
            select * from newstudent order by id ${flag};
        </select>
    

    这里就不能用#{}