- 第三章
-
动态代理:使用SqlSession.getMapper(dao接口.class)获取这个dao接口的对象。
- 什么是动态代理
- mybatis帮你创建dao接口的实现类,在实现类中调用SqlSession的方法执行sql语句
- 使用动态代理方式
- 获取sqlSession对象,SqlSessionFactory.openSession()
- 使用getMapper方法获取某个接口的对象,sqlSession.getMapper(接口.class)
- 使用dao接口的方法,调用方法就执行了mapper文件中的sql语句
- 使用动态代理方式的要求
- dao接口和mapper文件放在一起,同一个目录
- dao接口和mapper文件名称一致
- mapper文件中的namespace的值是dao接口的全限定名称
- mapper文件中的,,,等的id是接口中方法名称
- dao接口中不要使用重载方法,不要使用同名的,不同参数的方法
- 什么是动态代理
-
传入参数:从java代码中把数据传入到mapper文件的sql语句中
-
1)parametertype:写在mapper文件中的一个属性。表示dao接口中方法的参数的数据类型
- 例如StudentDao接口
- public Student selectStudentById(Integer id)
- 例如StudentDao接口
-
2)一个简单类型的参数
- 简单类型:mybatis把java的基本数据类型和String都叫简单类型
- 在mapper文件获取简单类型的一个参数的值,可以使用 #{任意字符}
- eg
- 接口: public Student selectStudentById(Integer id);
- mapper: select id,
name
,email,age from student where id=#{id}
- eg
-
3)多个参数,使用@Param命名参数
- 接口 public List selectMulitiParam(String name,Integer age);
- 使用 @Param(“参数名”) String name: public List selectMulitiParam(@Param(“myname”) String name,@Param(“myage”) Integer age);
- mapper:select id,
name
,email,age from student where name=#{myname} and age=#{myage};
-
4)多个参数,使用java对象作为接口中方法的参数
- 接口:public List selectMultiObject(QueryParam param); // QueryParam是一个自定义的java对象
- mapper:
select id,name
,email,age from student wherename
=#{paramName} and age=#{paramAge}
// #{} {}中存放自定义java对象的属性
-
5)多个参数,按位置传参(了解即可),---- #{0} #{1}。。。。
-
6) 多个参数,使用Map传参(了解即可)
-
-
#和$
-
#是占位符,告诉mybatis使用实际的参数值代替。并使用PrepareStatement对象执行sql语句。#{…}代替sql语句的"?".这样做更安全,
更迅速,通常也是首选做法 -
$ 字符串替换,告诉mybatis使用 包 含 的 ” 字 符 串 “ 替 换 所 在 位 置 。 使 用 S t a t e m e n t 把 s q l 语 句 和 包含的”字符串“替换所在位置。使用Statement把sql语句和 包含的”字符串“替换所在位置。使用Statement把sql语句和{}的
内容连接起来。主要用在替换表名,列名,不同列排序等操作。-
存在sql注入问题,数据执行效率低,能用#就不要用$
-
$可以替换表名或者列名,你能确定数据是安全的,可以使用$
-
-
-
mybatis的输出结果
- mybatis执行了sql语句,得到java对象
- resultType
- 结果类型,指sql语句执行完毕后,数据转为的java对象
- resultType结果类型的它值
- 类型的全限定名称
- 类型的别名,例如java.lang.Integer 别名int
- 处理方式:
- mybatis执行sql语句,然后mybatis调用类的无参数构造方法,创建对象
- mybatis把ResultSet指定列值赋给同名的属性
- resultType结果类型的它值
- resultType的默认原则是:同名的列值赋值给同名的属性,使用列别名
- 别名
- 在mybatis主配置文件定义别名
- 使用
- 使用;类名就是包名
- 在mybatis主配置文件定义别名
- 结果类型,指sql语句执行完毕后,数据转为的java对象
- resultMap
-
自定义列名和java对象的属性名对应关系
-
列名和属性名不一样解决方式
- 使用列名
- 使用resultMap
-
使用resultMap
- 1)先定义resultMap
-
- 在select标签,使用resultMap来引用自定义的
-
- resultType 和resultMap在使用的时候,二选一
- resultType
- mybatis执行了sql语句,得到java对象
-
like
- 在java代码中指定like的内容
- 在mapper中拼接like
-
MyBatis学习笔记-003
最新推荐文章于 2024-05-06 18:26:10 发布