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>
- 多个参数,使用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低。
$ :可以替换表名或者列名, 你能确定数据是安全的。可以使用$
#和 $区别
- #使用 ?在sql语句中做站位的, 使用PreparedStatement执行sql,效率高
- #能够避免sql注入,更安全。
- $不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低
- $有sql注入的风险,缺乏安全性。
- $:可以替换表名或者列名
4 输出结果
mybatis执行了sql语句,得到java对象。
4.1 resultType结果类型,
指sql语句执行完毕后, 数据转为的java对象, java类型是任意的,resultType结果类型的它值
- 类型的全限定名称
- 类型的别名, 例如 java.lang.Integer别名是int
处理方式: