• SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper


    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

    简单概述一下本讲

    别名,sql片段简单写一下,模糊查询多写一点

    一。别名

      

    <typeAliases>
            <!--第一种-->
            <!--<typeAlias type="cn.dawn.demo01.entity.Book" alias="book"></typeAlias>-->
            <!--第二种-->
            <package name="cn.dawn.demo01.entity"></package>
        </typeAliases>

      别名写在大配置中

    二。sql片段

       在开发过程中一般不直接使用*作为sql的查询语句的列,因为会损耗性能严重,在多次,重复使用列名,但是列名太多,所以很麻烦,怎么解决?

      sql片段

      怎么使用?

      如下:

    <sql id="mysql">
            bookId,bookName,bookAuthor,bookPrice
        </sql>
    <select id="findOneBookByPK" resultType="Book" >
            SELECT <include refid="mysql"/> FROM book WHERE bookid=#{bookID}
        </select>

      用include将sql片段中的列名引用过去

    三。模糊查询

      dao层

      

    //模糊查询
        public List<Book> likeSelect(String bookName);

      小配置中

    <sql id="mysql">
            bookId,bookName,bookAuthor,bookPrice
        </sql>
    <!--模糊查询-->
        <!--不可以防止sql注入
        <select id="likeSelect" parameterType="string" resultType="Book">
            SELECT * FROM book WHERE bookName LIKE '%${value}%'
        </select>-->
        <!--可以防止sql注入
        <select id="likeSelect" parameterType="string" resultType="Book">
            SELECT * FROM book WHERE bookName LIKE '%' #{value} '%'
        </select>-->
        <!--可以防止sql注入-->
        <select id="likeSelect" parameterType="string" resultType="Book">
            SELECT <include refid="mysql"/> FROM book WHERE bookName LIKE concat('%',#{bookName},'%')
        </select>

      三种方式,第一种不可以防止sql注入(做完日志整合的从控制台就可以看到sql语句),我所喜欢的是第二种

      测试类中

    //模糊查询
        @Test
        public void t6likeSelect(){
    
            String path = "mybatis-config.xml";
    
            try {
                InputStream e = Resources.getResourceAsStream(path);
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                SqlSessionFactory factory = builder.build(e);
                SqlSession session = factory.openSession();
    
                IBookDAO mapper = session.getMapper(IBookDAO.class);
                List<Book> list = mapper.likeSelect("");
                for (Book item:list) {
                    System.out.println(item.getBookName());
                }
    
    
                session.close();
            } catch (IOException var9) {
                var9.printStackTrace();
            }
        }

      这儿模糊查询就搞定了,说说getMapper吧,

      之前我那几篇博客,用的原始方式,他要求自己测试类中手打方法,但是现在这种通过session.getMapper(dao层接口.class)反射的方式获取到了dao层这个接口的实现类,所以就可以使用强类型

    的方式,直接通过点的方式点出来供你选择,出错几率大大减少      例如mapper.findAll()

  • 相关阅读:
    安卓笔记20170117
    android笔记20170116
    meta 标签的作用
    SASS 初学者入门
    JQuery selector
    浅谈js回调函数
    自己写的jquery 弹框插件
    魔兽种子
    html页面的CSS、DIV命名规则
    各种弹框素材的链接
  • 原文地址:https://www.cnblogs.com/DawnCHENXI/p/8460302.html
Copyright © 2020-2023  润新知