Mybatis 批量添加以及引入其他sql片段

不羁岁月 提交于 2020-01-28 02:29:04

批量添加非常简单,用foreach标签就可以,具体实现如下:

mapper:
    <!-- 批量增加,若使用自增主键,则设置useGeneratedKeys="true",keyProperty="id"  -->
    <insert id="insertUser" >
          insert into USER (id,email,hope_job,name,personal_evaluation,personal_skills,phone_number,user_image) values
          <foreach collection="list"  item="user" separator=",">
              (#{user.id},#{user.email},#{user.hopeJob},#{user.name},#{user.personalEvaluation},#{user.personalSkills},#{user.phoneNumber},#{user.userImage})
          </foreach>
    </insert>

测试代码:
    @Test
    public void insertBlobTest() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
//        会开启一个事务(也就是不自动提交)。
//        将从由当前环境配置的 DataSource 实例中获取 Connection 对象。
//        事务隔离级别将会使用驱动或数据源的默认设置。
//        预处理语句不会被复用,也不会批量处理更新。
        UserDao mapper = session.getMapper(UserDao.class);
        User user ;
        List<User> userList = new ArrayList<User>();
        user = new User();
        user.setEmail("751566027@qq.com");
        user.setHopeJob("java");
        user.setId(String.valueOf(System.currentTimeMillis()));
        user.setName("QWQ");
        user.setPersonalEvaluation("spring");
        user.setPersonalSkills("spring");
        user.setPhoneNumber("38438");
        byte[] bytes = {1,1,1,1,1,1,};
        user.setUserImage(bytes);
        userList.add(user);
        mapper.insertUser(userList);
        // 提交事务
        session.commit();
        session.close();
    }

当我们要查询数据库的某些特定字段时,在每个查询SQL里写很多字段是非常麻烦且枯燥的,所以我们可以写个SQL片段,在每条SQL里引入该片段即可:

mapper
    <!-- 引入sql片段 -->
    <sql id="userColumns">
         ${table}.id,${table}.email,${table}.hope_job,${table}.name,${table}.personal_evaluation,${table}.personal_skills
    </sql>
    <select id="selectUser" parameterType="String" resultMap="userMap">
            select
            <!-- 引入sql片段,Id与片段ID相对应,值为$里的值 -->
            <include refid="userColumns">
                <property name="table" value="user"/>
            </include>
            from user where id = #{id}
    </select>
测试代码:
    @Test
     public void jymTest() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream resourceAsStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDao mapper = (UserDao)sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.selectUser("0");
        System.out.println(userList.get(0).toString());
    }

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

感谢您的收看,如有哪里写的不对 请留言,谢谢。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!