parameterType查询条件的输入类型分为简单类型和复杂类型,简单输入类型,如string ,int等,复杂类型如,pojo包装类,数组类型,集合类型,
UserMapper.xml文件
<?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">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.skiff.www.mapper.UserMapper">
<!-- id:statement的id 或者叫做sql的id -->
<!-- parameterType:声明输入参数的类型 -->
<!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
<!-- #{}:输入参数的占位符,相当于jdbc的? -->
<select id="queryUserId" parameterType="int"
resultType="com.skiff.www.domain.User">
select * from user where id = #{id}
</select>
<!-- 如果返回多个结果,mybatis会自动把返回的结果放在list容器中 -->
<!-- resultType的配置和返回一个结果的配置一样 -->
<select id="queryUserByUsername1" parameterType="string"
resultType="com.skiff.www.domain.User">
SELECT * FROM user WHERE username LIKE #{username}
</select>
<!-- 如果传入的参数是简单数据类型,${}里面必须写value -->
<select id="queryUserByUsername2" parameterType="string"
resultType="com.skiff.www.domain.User">
SELECT * FROM `user` WHERE username LIKE '%${value}%'
</select>
<resultMap type="com.skiff.www.domain.User" id="user">
<id column="id" property="id"/>
<result column="username" property="name" />
</resultMap>
<!-- 如果传入的参数pojo包装的对象 -->
<select id="queryUserByQueryVo" parameterType="com.skiff.www.domain.vo.QueryVo"
resultMap="user">
SELECT * FROM `user` WHERE username LIKE '%${user.name}%'
</select>
<!-- foreach标签,进行遍历 -->
<!-- collection:遍历的集合,这里是QueryVo的ids属性 -->
<!-- item:遍历的项目,可以随便写,,但是和后面的#{}里面要一致 -->
<!-- open:在前面添加的sql片段 -->
<!-- close:在结尾处添加的sql片段 -->
<!-- separator:指定遍历的元素之间使用的分隔符 -->
<!-- 如果传入的参数list的集合 -->
<!-- 执行的sql语句:SELECT * FROM `user` WHERE id in ( ? , ? , ? ) -->
<select id="queryUserByparameterTypeList" parameterType="java.util.List"
resultMap="user">
SELECT * FROM `user`
<where>
<!-- idsList是QueryVo的一个属性名,并在QueryVo中有对应的get方法-->
<foreach collection="idsList" item="item" open="id in ( " close = ")"
separator=",">
#{item}
</foreach>
</where>
</select>
<!-- 如果传入的参数array数组 -->
<!-- 执行的sql语句:SELECT * FROM user WHERE id in ( ? , ? , ? ) -->
<select id="queryUserByparameterTypeArray" parameterType="Integer[]"
resultMap="user">
SELECT * FROM user
<where>
<!--如果查询的参数是array类型,那么collection中的参数应该写成array -->
<foreach collection="array" item="item" open="id in ( " close = ")"
separator=",">
#{item}
</foreach>
</where>
</select>
<!-- 插入语句中values中括号的字段和数据库中的表中的数据是一一对应的 而value后面的数据是实体的对象中对应的属性 -->
<!-- 保存用户 -->
<insert id="saveUser" parameterType="com.skiff.www.domain.User">
<!-- selectKey 标签实现主键返回 -->
<!-- keyColumn:主键对应的表中的哪一列 -->
<!-- keyProperty:主键对应的pojo中的哪一个属性 -->
<!-- order:设置在执行insert语句前执行查询id的sql,在执行insert语句之后执行查询id的sql -->
<!-- resultType:设置返回的id的类型 -->
<selectKey keyColumn="id" keyProperty="id" order="AFTER"
resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user`
(username,birthday,sex,address) VALUES
(#{name},#{birthday},#{sex},#{address})
</insert>
<!-- 更新用户 -->
<update id="updateUserById" parameterType="com.skiff.www.domain.User">
UPDATE `user` SET
username = #{name},
address = #{address},
birthday = #{birthday} WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from user where
id=#{id}
</delete>
</mapper>
/**
* @文件名称: QueryVo.java
* @描述: TODO
* @作者: 一叶扁舟(skiff)
* @时间:2018年1月12日 下午3:39:25
* @版本:V1.0
*/
package com.skiff.www.domain.vo;
import java.util.List;
import com.skiff.www.domain.User;
/**
* @类功能说明: queryVo中的一个属性是一个实体类
* @作者: 一叶扁舟 (skiff)
* @创建时间:2018年1月12日 下午3:39:25
* @版本:V1.0
*/
public class QueryVo {
private User user;
private Integer[] idsArray;//数组
private List<Integer> idsList;//list集合
/**
* @return the user
*/
public User getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(User user) {
this.user = user;
}
/**
* @return the idsArray
*/
public Integer[] getIdsArray() {
return idsArray;
}
/**
* @param idsArray the idsArray to set
*/
public void setIdsArray(Integer[] idsArray) {
this.idsArray = idsArray;
}
/**
* @return the idsList
*/
public List<Integer> getIdsList() {
return idsList;
}
/**
* @param idsList the idsList to set
*/
public void setIdsList(List<Integer> idsList) {
this.idsList = idsList;
}
}
3.junit测试类
/**
* @文件名称: UserMapperTest.java
* @描述: TODO
* @作者: 一叶扁舟(skiff)
* @时间:2018年1月9日 下午6:14:34
* @版本:V1.0
*/
package test.com.skiff.www.testUser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.skiff.www.domain.User;
import com.skiff.www.domain.vo.QueryVo;
import com.skiff.www.mapper.UserMapper;
/**
* @类功能说明:
* @作者: 一叶扁舟 (skiff)
* @创建时间:2018年1月12日 下午3:41:07
* @版本:V1.0
*/
public class UserMapperVo {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void parameterType1(){
SqlSession session = this.sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
User user = new User();
user.setName("无悔");
vo.setUser(user);
List<User> users = mapper.queryUserByQueryVo(vo);//pojo包装对象
for (User user2 : users) {
System.out.println(user2);
}
}
@Test
public void parameterType2(){
SqlSession session = this.sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(24);
ids.add(25);
vo.setIdsList(ids);
List<User> users = mapper.queryUserByparameterTypeList(vo);//list集合
for (User user2 : users) {
System.out.println(user2);
}
}
@Test
public void parameterType3(){
SqlSession session = this.sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
Integer[] ids = new Integer[3];
ids[0] = 1;
ids[1] = 24;
ids[2] = 25;
vo.setIdsArray(ids);
List<User> users = mapper.queryUserByparameterTypeArray(ids);//数组
for (User user2 : users) {
System.out.println(user2);
}
}
}