Mapper接口
package com.nmg.mybatis.mapper;
import com.nmg.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ParameterMapper {
List<User> getAllUser();
List<User> getUserByUsername(String username);
List<User> checkLogin(String username,String password);
int insertUser(User user);
List<User> checkLoginByParam(@Param("username") String username, @Param("password") String password);
}
1 取值的两种方式
Mybatis获取参数值的两种方式:
- ${}:本质是字符串拼接
- #{}:本质是占位符赋值(常用),预编译处理,将“ ?”调用PreparedStatement的set方法赋值
<select id="getUserByUsername" resultType="com.nmg.mybatis.pojo.User">
-- select * from t_user where username ='${username}';
select * from t_user where username = #{username};
</select>
2 多个入参
mapper的接口方法的参数有多个时,此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储:
- a.以arg0,arg1...为键,以参数为值
- b.以param1,param2...为键,以参数为值
<select id="checkLogin" resultType="com.nmg.mybatis.pojo.User">
select * from t_user where username = #{arg0} and password = #{param2};
</select>
3 入参为实体
当mapper接口方法的参数是实体类型的参数, 只需要通过#{}的方式访问属性即可
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email});
</insert>
4 @Param注解
使用@Param注解命名参数,此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储:
- a.以@Param注解的值为键,以参数为值
- b.以param1,param2...为键,以参数为值
<select id="checkLoginByParam" resultType="com.nmg.mybatis.pojo.User">
select * from t_user where username = #{username} and password = #{password};
</select>
测试
在测试时需要先获取sqlSession,具体实现为
package com.nmg.mybatis.utils;
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 java.io.IOException;
import java.io.InputStream;
public class SqlSessionUtils {
public static SqlSession getSqlsession(){
SqlSession sqlSession = null;
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
sqlSession = build.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
测试类
package com.nmg.test;
import com.nmg.mybatis.mapper.ParameterMapper;
import com.nmg.mybatis.pojo.User;
import com.nmg.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class mybatistest {
@Test
public void test1() throws IOException {
SqlSession sqlSession = SqlSessionUtils.getSqlsession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
List<User> allUser = mapper.getAllUser();
allUser.forEach(user -> System.out.println(user));
System.out.println("++++++++++++++++++++++++++++++++++++");
List<User> users = mapper.getUserByUsername("张三");
users.forEach(user -> System.out.println(user));
System.out.println("+++++++++++++++++++++++++++++++++++++++++++");
List<User> users2 = mapper.checkLogin("张三","123456");
users2.forEach(user -> System.out.println(user));
}
@Test
public void test2() throws IOException {
SqlSession sqlSession = SqlSessionUtils.getSqlsession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++");
int result = mapper.insertUser(new User(null, "王七", "345678", 88, "女", "345678@qq.com"));
System.out.println(result);
System.out.println("{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}");
List<User> users = mapper.checkLoginByParam("王五", "345678");
users.forEach(user -> System.out.println(user));
}
}