• 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);
                }
  • 相关阅读:
    Freemaker Replace函数的正则表达式运用
    [Android]使用Spring for Android改善数据交互流程
    [Freemarker]自定义时间戳函数
    [jquery.validate]自定义方法实现"手机号码或者固定电话"的逻辑验证
    [Javascript]网页链接加上时间戳防止串用户
    支付系统设计
    java设计模式-抽象工厂模式
    IDEA解决maven多module出现多root的问题
    java设计模式-工厂方法模式
    java设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/alomsc/p/10455925.html
Copyright © 2020-2023  润新知