MyBatis查看详情

查看详情

  1. 编写接口方法:Mapper接口。参数:id,结果Brand。

    在BrandMapper类下面添加方法

    复制代码
    public interface BrandMapper {
    ​
    ​
    ​
        /**
         * 查询所有
         */
        List<Brand> selectAll();
    ​
        /**
         * 查看详情:根据Id查询
         */
        Brand selectById(int id);
    ​
    }
    复制代码

     

  2. 编写SQL语句:SQL映射文件

    在BrandMapper.xml下编写文件

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--
        namespace:名称空间
     -->
    <mapper namespace="com.uestc.mapper.BrandMapper"><!--
            数据库表的字段名称,和 实体类的属性名称 不一样,则不能自动封装数据
                * 起别名: 对不一样的列名起别名,让别名和实体类的属性名一样
                       *缺点:每次查询都要定义一次别名
                            *sql片段
                                *缺点:不灵活
                * resultMap
                    1.定义<resultMap>标签
                    2.在<select>标签中使用resultMap属性替换 resultType属性
        --><!--
            id:唯一标识
            type:映射的类型,支持别名
        --><resultMap id="brandResultMap" type="brand">
            <!--
                id: 完成主键字段的映射
                    column:表的列名
                    property:实体类的属性名
                result: 完成一般字段的映射
                    column:表的列名
                    property:实体类的属性名
            -->
            <result column="brand_name" property="brandName" />
            <result column="company_name" property="companyName" /></resultMap><select id="selectAll" resultMap="brandResultMap">
    ​
                select
                       *
                from tb_brand;
    ​
            </select>
    ​
    ​
        <!--
            sql片段
        -->
    <!--    <sql id="brand_column">-->
    <!--        id,brand_name as brandName,company_name as companyName,ordered,description,status-->
    <!--    </sql>--><!--    <select id="selectAll" resultType="brand">--><!--        select-->
    <!--            <include refid="brand_column" />-->
    <!--        from tb_brand;--><!--    </select>--><!--    <select id="selectAll" resultType="brand">--><!--        select *-->
    <!--        from tb_brand;--><!--    </select>--><!--
            *参数占位符:
                1.#{}:会将其替换为 ? 为了放在SQL注入
                2.${}:拼SQL,会存在SQL注入问题
                3.使用时机:
                    * 参数传递的时候:#{}
                    * 表名或者列名不固定的情况下:${}
            *参数类型:parameterType:可以省略
            *特殊字符处理:
                1.转义字符: &lt ==>  <
                2.CDATA区:  <![CDATA[
                            <
                            ]]>
        -->
    <!--    <select id="selectById" resultMap="brandResultMap">-->
    <!--        select *-->
    <!--        from tb_brand where id = #{id};-->
    <!--    </select>--><select id="selectById" resultMap="brandResultMap">
            select *
            from tb_brand where id
            <![CDATA[
            <
            ]]>
            #{id};
        </select></mapper>
    复制代码

     

  3. 执行方法,测试

    编写测试方法MyBatisTesl类

    复制代码
    @Test
    public void testSelectById() throws IOException {
    ​
        //接收参数
        int id = 1;
    ​
        //1.获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    ​
        //2.获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
    ​
        //3.获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    ​
        //4.执行方法
        Brand brand = brandMapper.selectById(id);
        System.out.println(brand);
    ​
        //5.释放资源
        sqlSession.close();
    ​
    }
    复制代码

     

总结:

1.参数占位符:

(1)#{}:执行SQL时,会将#{}占位符替换为?将来自动设置参数

(2)${}:拼SQL。会存在SQL注入问题。

(3)使用时机:

*参数传递:都使用#{}

*如果要对应表名,列名进行动态设置,只能使用${}进行sql拼接。

2.parameterType:

*用于设置参数类型,该参数可以忽略

3.SQL语句中特殊字符处理:

*转义字符

*<![CDATA[内容]]>

posted @   Resign~as  阅读(377)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示