mybatis(二)--相关属性及相关细节

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);
            }
原文地址:https://www.cnblogs.com/alomsc/p/10455925.html