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); }