Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

MyBatis и параметры в запросах SQL

          Написано: Maryna Pylnyk, 17/01/2017     

В прошлой статье я написала о конфигурации и имплементации Mybatis-маппинга в java коде .
Читайте статью " MyBatis в java приложениях, конфигурация и имплементация "
В этой статье остановлюсь на вопросе параметризации, т.е. как из кода java посылать параметры в запросы, находящиеся в маппере.
    Напомню наш метод:

    SqlSession session = null;
    try { 
        session = DatabaseInstance.getInstance().getFactory().openSession();  
        /* с openSession() без параметра, открываем SqlSession 
	  с default NON-AUTOCOMMIT, и это работает с запросами по выборке данных, 
	  однако, если вы хотите использовать запросы, 
	  которые должны вносить изменения данных в базу данных, 
	  вы должны правильно указывать
	  это значение через openSession(true)*/

        List<Object> = session.selectList("selectObjects", параметр);
	  
    } catch (Exception e) {
        // всегда полезно включать распечатку исключений
    } finally {
        if (session != null)
        session.close();
    }

    Наш маппер:

    <mapper namespace="package.Example">
        <select id="selectObjects" parameterType="тип параметра" resultType="some Object">
            select 
                field1,  
                field2 
            from table
        </select>
    </mapper>

Реклама
Как мы видим в нашем маппере есть атрибут "parameterType", который содержит в себе указание какого типа у нас входной параметр. <тип параметра> может быть любым объектом, от примитивных (String) до POJO и JavaBean, и должен соответствовать тому, который указан как аргумент в запросе SQL в методе java.
    в методе:

    List<Object> = session.selectList("selectObjects", new String("test1"));

    и соответствующий запрос в маппере:

    <select id="selectObjects" parameterType="String" resultType="some Object">
        select
            field1,
            field2
        from table
        where field2 = #{value} /* field2 = "test1" */
    </select>

Ещё один пример:

    в методе:

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("test2",new Integer(5));
    List<Object> = session.selectList("selectObjects", map);

    и соответствующий запрос в маппере:

    <select id="selectObjects" parameterType="hashmap" resultType="some Object">
        select 
            field1,  
            field2 
        from table
        where field2 = ${test2}
    </select>
Реклама


Замечу, что атрибут parameterType необязателен,
это значит, что в вышестоящих примерах в маппере можно не указывать атрибут parameterType, т.к. Mybatis автоматически распознает тип параметра.
Обращу внимание на специальные знаки: в первом случае используется # , а во втором $ .

В чём разница.
Для примитивных объектов, таких как String, Integer, Mybatis подставляет полное их значение в #{value} (слово value может быть заменено на любое другое), распознавая тип параметра.
Таким же образом Mybatis действует и с объектами JavaBean, которые имеют для каждой переменной свои методы get() и set().
Т.е. достаточно указать в запросе имена переменных класса, который указан как тип входного параметра:

    Наш класс:

    public class User {

        private int id;
        private String name;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    в методе:

    User obj = new User();
    obj.setId(10);

    List<Object> = session.selectList("selectObjects", obj);


    и соответствующий запрос в маппере:	

    <mapper namespace="package.Example">
        <select id="selectObjects" parameterType="package.User" resultType="some Object">
            SELECT
                field1,
                field2
            from table
            where field2 = #{id}
        </select>
    </mapper>
    <!-- Повторюсь, parameterType может быть и не указан. -->

По-другому дело обстоит с типом "hashmap". Тут надо указать alias, который мы дали каждому параметру и использовать значок $.
    в методе:

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("param1",new Integer(1));
    map.put("param2",new String("2"));
    map.put("param3",new Integer(3));
    List<Object> = session.selectList("selectObjects", map);

    и соответствующий запрос в маппере:	

    <select id="selectObjects" resultType="some Object">
        select
            field1,
            field2
        from table
        where
            (field1 = ${param1}
            or
            field1 = ${param3})
            and
            field2 = ${param2}
    </select>


Если Вы нашли эту статью полезной для себя
поделитесь ею с друзьями в социальных сетях или поставьте "Мне нравится" (вверху справа) .
Большое спасибо!


Вы должны разрешить сохранение куки-файлов и согласиться на правила о конфиденциальности для использования "поделиться" и "мне нравится".
Вы всегда можете отказаться от сохранения куки-файлов и можете удалить куки "cookieconsent_status" из вашего браузера.

 

Tools (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Поиск в @myjsp.feelinglinux.com

Реклама