zoukankan      html  css  js  c++  java
  • Mybatis中的Mapper映射Sql中传参类型(如Bean,基本类型,List...)与取值的方式 与foreach的几种用法!!

    附加:mybatis配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
        <!-- 加载Src下的配置文件   -->
        <properties resource="db.properties"/>
        <!--别名机制-->
        <typeAliases>
            <typeAlias type="com.cn.entity.User" alias="user"/>
        </typeAliases>
    
        <!-- 连接数据库   -->
        <environments default="mysql_development">
    
            <environment id="mysql_development">
                <transactionManager type="JDBC"/>
    
                <dataSource type="POOLED">
                    <property name="driver" value="${driverClass}"/>
                    <property name="url" value="${jdbcUrl}"/>
                    <property name="username" value="${user}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
    
    
            <!--  连接Oracle数据库  -->
            <environment id="oracle_development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                    <property name="url" value="jdbc:oracle:thin:localhost:1521:orcl"/>
                    <property name="username" value="${user}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
    
    
    </environments>
    
        <!-- 加载映射文件   -->
        <mappers>
            <mapper resource="com/cn/entity/mybatisUserMapper.xml"/>
        </mappers>
        
    </configuration>
    View Code

    附加:测试文件

    package com.cn.test;
    import com.cn.entity.User;
    import com.cn.utils.MyBatisUtil;
    import org.apache.ibatis.session.SqlSession;
    
    import java.util.Date;
    import java.util.List;
    
    public class TestApp {
        public static void main(String[] args) {
            try {
                /*
                    加载资源的一种方式:
                    InputStream in = Resources.getResourceAsStream("mybatis.xml");
                    //创建SqlSessionFactory
                    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
                    SqlSession sqlSession = sqlSessionFactory.openSession();
                    System.out.println(sqlSession);
                */
                SqlSession sqlSession = MyBatisUtil.getSqlSession();
                User u = new User();
                u.setId(22);
                u.setAddress("湖南");
                u.setBirthday(new Date());
                u.setSex("女");
                u.setUsername("No");
                sqlSession.insert("com.cn.entity.User.add",u);
    
                List<User> list = sqlSession.selectList("com.cn.entity.User.findAll");
                for(User u1 :list){
                    System.out.println(u1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    /*
    * User{id=1, username='zhangsan', birthday=Mon Feb 05 00:00:00 CST 2018, sex='男', address='湖南'}
    User{id=2, username='rose', birthday=Thu Mar 08 00:00:00 CST 2018, sex='女', address='东莞'}
    User{id=3, username='black', birthday=Fri Feb 19 00:00:00 CST 2021, sex='男', address='深圳'}
    User{id=4, username='pink_girl', birthday=Sat Aug 24 00:00:00 CST 2019, sex='女', address='changsan'}
    User{id=8, username='heheh', birthday=Sat Aug 24 00:00:00 CST 2019, sex='女', address='huana'}
    User{id=22, username='No', birthday=Thu Jun 04 00:00:00 CST 2020, sex='女', address='湖南'}*/
    View Code

    1 映射文件中传递的参数是 对象类型:取值的方式如下

    <?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" >
    
    <mapper namespace="com.cn.entity.User" >

    <insert id="add" parameterType="user"> <!--传递的是一个对象类型,取值时直接写属性即可--> insert into user(id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address}); </insert> </mapper>

    测试代码:

                SqlSession sqlSession = MyBatisUtil.getSqlSession();
                User u = new User();
                u.setId(22);
                u.setAddress("湖南");
                u.setBirthday(new Date());
                u.setSex("女");
                u.setUsername("No");
                sqlSession.insert("com.cn.entity.User.add",u);
                sqlSession.commit();


    2 映射文件中传递的参数是 基本数据类型:取值的方式如下  , {}里面的变量名可以随意写

        <!--查询根据id-->
        <select id="findbyid"  parameterType="int" resultType="user">
            select * from user where id = #{id};
        </select>

    测试代码

    User u = sqlSession.selectOne("com.cn.entity.User.findbyid", 8);

    3 映射文件中传递的参数是 Map:取值的方式如下  

     Map<String ,Object> map = new HashMap<String,Object>();
     map.put("keyname","1");
     map.put("key1","2");
    User uu
    = sqlSession.selectOne("com.cn.entity.User.findbymap",map);
        <!--  传入map时直接取map的key的名字即可  -->
        <select id="findbymap" parameterType="map" resultType="user">
              select * from user where id = #{keyname};
        </select>

    4 映射文件中传递的参数是 List:取值的方式如下  

    XML语句:
    
    <select id="findByRidAndType" resultMap="entryResource" parameterType="list">
            SELECT
            *
            FROM
            t_entry_resource a
            WHERE
    <foreach collection="list" index="index" item="entryResources" open="(" close=")" separator="or">
            <!--拼接的sql语句 相当与 select * from t_entry_resource where type = ? and resource_id = ? -->
    ( `type`=#{entryResources.type} and resource_id=#{entryResources.resourceId} ) </foreach> </select>

    表结构

    MySQL [test]> select * from t_entry_resource;
    +----+-------------+------+----------+--------+--------+---------------------+
    | id | resource_id | type | title    | banner | icon  | add_date            |
    +----+-------------+------+----------+--------+--------+---------------------+
    | 11 |          6  | 14   | 分类     | 1.jpg  | 2.jpg  | 2017-11-17 11:22:30 |
    | 12 |          3  | 1    | 测试12   | 3.jpg  | 4.jpg  | 2017-11-17 11:22:30 |
    | 13 |        653  | 1    | 测试34   | 5.jpg  | 6.jpg  | 2017-11-20 02:32:26 |
    | 14 |          1  | 1    | 测试5    | 7.jpg  | 8.jpg  | 2017-11-20 02:32:51 |
    | 15 |        3942 | 3    | 测试6    | 9.jpg  | 10.jpg | 2017-11-20 02:34:27 |
    +----+-------------+------+----------+--------+--------+---------------------+

    4. foreach的几种用法

    list集合

    (1) select count(*) from users id in (x1,x2,x3,...)
    <select id="countByUserList" resultType="int" parameterType="list">    
    select count(*) from users    
      <where>    
        id in    
        <foreach item="item" collection="list" separator="," open="(" close=")" index="">    
          #{item.id, jdbcType=NUMERIC}    
        </foreach>    
      </where>    
    </select> 

    (2) select count(*) from key_cols where col_a = ? AND col_b = ?

    <select id="sel_key_cols" resultType="int">    
            select count(*) from key_cols where    
    <foreach item="item" index="key" collection="map"  open="" separator="AND" close="">
            ${key} = #{item}
    </foreach>    
    </select>  

    list集合中的对象

    (3) select * from t_news n where n.tags like ? or n.tags like ?

    <select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
      select * from t_news n where 
      <foreach collection="listTag" index="index" item="tag" open="" separator="or" close="">
                n.tags like  '%'||#{tag}||'%'
      </foreach>
    <select>

    参考文献:

    https://www.cnblogs.com/coderzhw/p/11094300.html

    https://www.cnblogs.com/dflmg/p/6398033.html

    http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

    坚持
  • 相关阅读:
    connect oralce
    monolog php
    js继承
    前后端交互-一些关于接口设计的思考
    zoom:1;
    H5的新特性及部分API详解
    软文参考
    seo细节
    seo每天要做的事情
    seo(每天要干的哪些事)
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/13042592.html
Copyright © 2011-2022 走看看