mapper接口动态代理
动态代理dao开发规则
1.namespace必需是接口的全路径名
2.接口的方法名 必需与 映射文件的sql id一致
3.接口的输入参数必需与映射文件的parameterType类型一致
4.接口的返回类型必须与映射文件的resultType类型一致
动态代理dao开发步骤
1.创建xxxMapper.xml映射文件 编写SQL
2.创建UserMapper接口
3.加载UserMapper.xml
4.测试动态代理Dao
dao层代码
List<User> findUserByIds(QueryVo queryVo);
mapper映射xml
<select id="findUserByIds" parameterType="queryvo" resultType="user">
select * from `user`
<where>
<!-- and id in (1,2,3,4,5)
and id in (?,?,?,?,?) --> <!--foreach循环标签
collection : 要遍历的集合
item: 设置的循环变量
open: 循环开始之前输出的内容
close: 循环结束之后输出的内容
separator: 分隔符
-->
<foreach collection="ids" item="id" open="and id in(" close=")" separator=",">
#{id}
</foreach>
</where>
Dao测试代码
Test
public void testGetUserById() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
// user.setId(10);
user.setUsername("张");
// List<User> orderList = userMapper.findUserList(user);
QueryVo queryVo = new QueryVo();
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(10);
list.add(26);
list.add(30);
queryVo.setIds(list);
List<User> userByIds = userMapper.findUserByIds(queryVo);
for (User user2 : userByIds) {
System.out.println(user2);
} sqlSession.close();
}
properties(属性)
属性核心文件配置
<properties resource="jdbc.properties">
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
typeAliases(类型别名)
自定义别名
在SqlMapConfig.xml配置文件添加如下配置信息
1、单个别名配置
<!-- 配置pojo的别名 -->
<typeAliases> <typeAlias type="cn.tz.pojo.User" alias="user"/> </typeAliases>
2、包扫描别名配置
<!-- 配置pojo的别名 -->
<typeAliases>
<package name="cn.tz.pojo.User"/>
</typeAliases>
注意:resultType属性的值就是User类的别名,且别名是不区分大小写的。
SqlMapConfig.xml文件加载mapper.xml文件
Mapper(映射器)配置的几种方法:
1、<mapper resource=" " /> 使用相对于类路径的资源,如
<mapper resource="mybatis/user.xml"/>
2、<mapper class=" " /> 使用mapper接口类路径,如:
<mapper class="cn.xxx.UserMapper"/>
3、<package name=""/> 注册指定包下的所有mapper接口,如:
<package name="cn.tz.pojo.UserMapper"/>
注意:第二种和第三种的方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
虽然Mapper(映射器)配置有以上三种方法,但是实际开发中就用第三种方法
传递包装的pojo
pojo类中包含pojo类 -需求:根据用户id查询用户信息,查询条件放到QueryVo类的user属性中
步骤: 1、新建一个QueryVo类
public class QueryVo {
private User user;
private List<Integer> ids;
缺少get/set方法
}
2、映射文件中编写sql语句与配置
<!-- 加载配置文件 -->
<mappers>
<!-- <mapper resource="mybatis/user.xml"/> -->
<!-- <mapper resource="cn/xxx/mapper/UserMapper.xml"/> --> <!-- <mapper class="cn.tz.dao.UserMapper"/> --> <package name="cn.xxx.dao"/>
</mappers>
3、在对应接口中添加方法
@Select("select * from `order`")
List<Order> selAll();
4、编写单元测试
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
List<Order> selAll = orderMapper.selAll();
for (Order order : selAll) {
System.out.println(order);
}