解决多个接口出现的问题:动态扫描开发
指定UserMapper的包名在UserMapper.xml上。
通过传递一个接口生成一个实现类,并且调用实现类中的方法。7:25
在spring中,它将SqlSessionFactory注入SqlSessionDaoSupport中,所以使用Spring-Dao式开发的时候,利用UserDaoImpl去extends SqlSessionDaoSuppot即可。(省去builder)
ref:引用
可以利用sql标签把重复代码整理放在UserMapper.xml的始端:
foreach标签中的collection就是参数,item就是取出数组中的值(但是这里collection的参数应该是array,因为在我们传递数组需要遍历的时候,ids默认帮我们封装)
1.<where></where>标签可以去掉开头的AND
2.<trim></trim>标签可以定制where标签的规格
prefix前缀:prefix=“where”
编译后sql语句就会变成:
动态sql-if标签:
一对多关联查询使用标签:
<collection></collection>
一对一关联查询标签:
<association></association>
在单表查询的时候,使用<resultMap>,手动映射不同字段的时候,可以省略那些名字相同的字段;但是在多表查询的时候,不可以省略:
当mapper.java里面的变量跟数据库中的表的变量名不一致,就是用resultMap(该变量需要手动映射):
---注意:但是坚持用resultType的话,字段不匹配的输出结果会用null表示。---
左边箭头:bean对象中的id;
右边箭头:数据库中表的id;
输出映射-resultType:
输入映射-parameterType:
包装类(UserVo.java):封装除了本对象以外的信息
通过Vo中的User中的u_id获取id:
相对路径映射配置:
url(全路径:绝对路径)映射配置:对着xml文件右键选择show in再选择system explodrer:
接口形式进行映射配置(点击mapper下的UserMapper.java复制接口的全包名):
注意:需要把xml复制到mapper下并且跟UserMapper.java保持文件名相同:
-----------------
以包的形式:
配置映射器的位置:<mappers></mappers>
推荐使用包的xing'shi'pei'zhi
在主配置文件中配置别名配置:
当只有一个bean对象时:(如1)
当有多个bean对象时(以包的方式进行配置):(如2)
-------------------
如果属性在不止一个地方进行了配置,那么myBatis会按照这样的顺序来加载:
通过方法参数传递的属性具有最高优先级,resourse/url属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性。
myBatis会自动帮我们选择:
当方法返回值是User,那就自动选择select one,当方法返回值是List,那就自动选择select list
通过session去get一个mapper:
Mapper动态代理-通过id查询用户:操作数据库的实现类是由mybaits帮我们li'yongmapper动态代理完成,较为方便。
返回值是User,所以:
在UserDaoImpl.java;
具体步骤: