Mybatis(三):使用mybatis的动态代理与传入参数和输出结果

1 动态代理

使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象
实现代码如下:

SqlSession sqlSession= MybatisUtils.getSqlSession();
StudentDao dao=sqlSession.getMapper(StudentDao.class);

然后我们就可以使用dao接口直接.id操作数据库。

2 传入参数

传入参数: 从java代码中把数据传入到mapper文件的sql语句中。
1)parameterType : 写在mapper文件中的 一个属性。 表示dao接口中方法的参数的数据类型。
例如StudentDao接口
ublic Student selectStudentById(Integer id)
2) 一个简单类型的参数:
简单类型: mybatis把java的基本数据类型和String都叫简单类型。
在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}
接口:public Student selectStudentById(Integer id)
mapper:select id,name, email,age from student where id=#{studentId}
3) 多个参数,使用@Param命名参数
接口 public List selectMulitParam(@Param(“myname”) String name, @Param(“myage”) Integer age)
使用 @Param(“参数名”) String name
mapper文件:

<select>
     select * from student where name=#{myname} or age=#{myage}
</select>
  1. 多个参数,使用java对象,或者使用map。

3.#{}与${}

select id,name, email,age from student where id=#{studentId}
# 的结果: select id,name, email,age from student where id=?
select id,name, email,age from student where id=${studentId}
$ 的结果:select id,name, email,age from student where id=1001
String sql=“select id,name, email,age from student where id=” + “1001”; 使用的Statement对象执行sql, 效率比PreparedStatement低。
$ :可以替换表名或者列名, 你能确定数据是安全的。可以使用$
#和 $区别

  1. #使用 ?在sql语句中做站位的, 使用PreparedStatement执行sql,效率高
  2. #能够避免sql注入,更安全。
  3. $不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低
  4. $有sql注入的风险,缺乏安全性。
  5. $:可以替换表名或者列名

4 输出结果

mybatis执行了sql语句,得到java对象。

4.1 resultType结果类型,

指sql语句执行完毕后, 数据转为的java对象, java类型是任意的,resultType结果类型的它值

  1. 类型的全限定名称
  2. 类型的别名, 例如 java.lang.Integer别名是int

处理方式:

  • mybatis执行sql语句, 然后mybatis调用类的无参数构造方法,创建对象。

  • mybatis把ResultSet指定列值付给同名的属性。

    定义自定义类型的别名

  • 在mybatis主配置文件中定义,使定义别名

  • 可以在resultType中使用自定义别名

    4.2 resultMap:结果映射, 指定列名和java对象的属性对应关系。

    1)你自定义列值赋值给哪个属性
    2)当你的列名和属性名不一样时,一定使用resultMap
    resultMap和resultType不要一起用,二选一

猜你喜欢

转载自blog.csdn.net/qq_41984117/article/details/110100259