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()

原文地址:https://www.cnblogs.com/DawnCHENXI/p/8460302.html

时间: 2024-10-09 14:04:41

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper的相关文章

在JDBC中实现SQL语句的模糊查询

在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * from table where tableid like %id%; JDBC中的sql语句: String sql = "select * from table where tableid like \"%\"?\"%\"";//?为占位符 原文

在Excel中使用SQL语句实现精确查询? (2012-08-21 00:00:00)转载▼

在Excel中使用SQL语句实现精确查询 (2012-08-21 00:00:00) 转载▼ 标签: 郑来轶 数据分析 excel sql 数据查询 匹配 分类: 07.MSoffice 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQL语句实现精确查询>,觉得非常受用,分享给大家. 微博上有人回复评论说直接用vlookup.或者导入数据库进行查询处理就好了,岂不是更高效.更灵活:其实给人的第一直观感觉是这样子的,但是我们多想一步,这篇文章的应用场景.使用前提条件

[转]在Excel中使用SQL语句实现精确查询

本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQL语句实现精确查询>,觉得非常受用,分享给大家. 微博上有人回复评论说直接用vlookup.或者导入数据库进行查询处理就好了,岂不是更高效.更灵活:其实给人的第一直观感觉是这样子的,但是我们多想一步,这篇文章的应用场景.使用前提条件是什么?我想到的有以下几个方面:①数据量不是很大的时候:②数据结构导入数

mybatis动态SQL中的sql片段

在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景: 1.创建动态SQL <sql id="sql_count">select count(*)</sql> 2.使用 <select id="selectListCountByParam" parameterType="map" resultType="String"> <include refid="sql_

Mybatis入门学习篇(三)之模糊查询的两种写法

在上一讲(Mybatis入门学习篇(二)之基于注解的增删改查)中,需要用到模糊查询,比如我想查找所有含有'zjh'的Student的信息.如果是在数据库中,那么我们可以方便的使用通配符%:select * from student where name like '%zjh%' .但是如果在mybatis中直接像sql中那样,就会报错.遂百度,无果,偶然在一篇帖子中看到,遂记录下来,以备后用. 方法一: 在要查询的字符串合适位置加上%,如这里的'zjh'就应该为'%zjh%'.这是一个很管用的方

Mybatis mysql 一个搜索框多个字段模糊查询 OR

根据搜索框给定的关键词,模糊搜索用户名和账号都匹配的用户集合 <select id="list" parameterType="com.user.UserInfo" resultType="com.user.UserInfo"> SELECT * FROM user WHERE 1 = 1 <if test="searchParam != null and searchParam != ''"> AND

Sql Like 通配符 模糊查询技巧及特殊字符

1. SQL like对时间查询的处理方法 SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005-6-6 14:02:02 我用下面语句什么也搜不出来 select * from soft where soft.savetime like'%2005-3-8%' SQL帮助中说: "当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分.例如,如果将值

SQL like使用 模糊查询

模糊查询: 参考资料:http://www.w3school.com.cn/sql/sql_wildcards.asp 在搜索数据库中的数据时,您能够使用 SQL 通配符. SQL 通配符  Like 在搜索数据库中的数据时,SQL 通配符能够替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中,可使用下面通配符: 通配符 描写叙述 % 替代一个或多个字符 _ 仅替代一个字符 [charlist] 字符列中的不论什么单一字符 [^charlist] 或者 [!c

python中的mysql数据库like模糊查询

近期工作在使用python语言开发项目,工作中遇到了一个python连接mysql的like查询. 因为%在python中三个特殊的符号,如%s.%d分别代表了字符串占位符和数字占位符. 大家知道.mysql的模糊查询也须要用到%. 我们有一张test表,要对name字段进行模糊查询,预期的sql例如以下: select * from test where name like '%abc%'; 那么python中怎么写呢? sql = "select * from test where name