【MyBatis框架点滴】——MyBatis输入映射

简介:   在MyBatis的映射文件中,通过parameterType指定输入数据的类型,输入类型可以是简单类型如Integer、HashMap、pojo包装类等。


  在MyBatis的映射文件中,通过parameterType指定输入数据的类型,输入类型可以是简单类型如Integer、HashMap、pojo包装类等。


输入类型为简单类型



  输入类型为简单类型时,传入一个简单类型的参数,用#{参数名} 接收参数值(PS:其实这时#{}内可以为任何参数)。

  映射文件:

<select id="findUserById" parameterType="int" resultType="com.danny.mybatis.po.User">
  select * from user where id=#{id}
</select>

 实现:

/**
 * 根据id查询用户信息
 * @param id
 * @return
 * @throws Exception
 */
 @Override
 public User findUserById(int id) throws Exception {
  SqlSession session=sqlSessionFactory.openSession();
  User user=(User)session.selectOne("com.danny.mybatis.findUserById",id);
  session.close();
  return user;
 }


  测试:


@Test
public void testFindByUserId() throws Exception{
  UserDao userDao=new UserDaoImpl(sqlSessionFactory);
  User user=userDao.findByUserId(1);
  System.out.println(null == user ? "" : user.getUsername());
}

输入类型为HashMap



  输入类型为简单类型时,只可以传递一个参数,有很大的局限性。因此当输入参数较多时,可以将参数都放到HashMap中进行传参。在映射文件中,用#{key值}的方式取map中key所对应的value值。

  实现:

/**
* 根据各种参数查询用户信息
* @param paramMap(username,sex)
* @return
* @throws Exception
*/
@Override
public List<User> findUserByParams(Map paramMap) throws Exception {
  SqlSession session=sqlSessionFactory.openSession();
  List<User> userList=(List<User>)session.selectList("com.danny.mybatis.findUserByParams",paramMap);
  session.close();
  return userList;
}


  映射文件:

<select id="findUserByParams" parameterType="map"
  resultType="com.danny.mybatis.po.User">
  select * from user where username=#{username} and sex=#{sex}
</select>


  测试:


@Test
public void testQueryByParams() throws Exception{
  UserDao userDao=new UserDaoImpl(sqlSessionFactory);
  Map map=new HashMap();
  map.put("username", "danny");
  map.put("sex", 2);
  List<User> userList=userDao.findUserByParams(map);
  if(null!=userList && userList.size()>0){
    for(User user:userList){
      System.out.println(user.getId()+":"+user.getUsername());
    }
  }   
}

输入类型为pojo


 在映射文件中,当访问pojo的简单属性(比如User.java中的id、username、sex、birthday、address)时,只需要用#{属性} 这种方式直接获取属性值即可;当访问类似partner的属性(非简单类型)时,可以用OGNL的方式获取属性值#{属性.属性},比如上面的#{partner.sex}。


 User.java



public class User implements Serializable {
  private int id;
  private String username;
  private int sex;
  private Date birthday;
  private String address;
  private User partner;
  //getter、setter
}

  映射文件:

<select id="findUserByPojo" parameterType="com.danny.mybatis.po.User"
    resultType="com.danny.mybatis.po.User">
    select * from user where username =#{username} and sex=#{partner.sex} 
  </select>


  实现:

/**
  * 根据pojo查询用户信息
  * @param user
  * @return
  * @throws Exception
  */
  @Override
  public List<User> findUserByPojo(User user) throws Exception {
    SqlSession session=sqlSessionFactory.openSession();
    List<User> userList=session.selectList("com.danny.mybatis.findUserByPojo",user);
    session.close();
    return userList;
  }


 测试:

@Test
public void testQueryByPojo() throws Exception{
  UserDao userDao=new UserDaoImpl(sqlSessionFactory);
  User partner=new User();
  partner.setSex(1);
  User user=new User();
  user.setUsername("DannyHoo");
  user.setPartner(partner);
  List<User> userList=userDao.findUserByPojo(user);
  if(null!=userList && userList.size()>0){
    for(User u:userList){
      System.out.println(u.getId()+":"+u.getUsername());
    }
  }   
}


扩展:


 1、mybatis别名


 上述parameterType的属性值为int,其实就代表是从java.lang.Integer映射来的,这是mybatis的特性,mybatis默认支持java中一些常用类型的别名,如


 int-java.lang.Integer

 string-java.lang.String

 date-Date

 ……


 其他mybatis不支持的数据类型还可以在mybatis全局配置文件中用如下方式配置:


 <typeAliases>
   <typeAlias type="com.danny.mybatis.po.User" alias="user"/>
 </typeAliases>


 配置完成后,就可以在映射文件中用 user 来“充当”com.danny.mybatis.po.User 类型了。



 2、#{} 和 $ {}

 #{} 表示一个占位符号,接收输入参数,参数类型可以为简单类型、hashmap、pojo。


 ${} 也用来接收简单类型、hashmap、pojo的输入参数,但由于它表示一个拼接符号,所以会引起sql注入,如无特殊情况,不建议经常使用。


相关文章
|
22小时前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
30 6
|
22小时前
|
SQL Java 数据库连接
MyBatis 优秀的持久层框架(一)
MyBatis 优秀的持久层框架
76 0
|
21小时前
|
SQL 缓存 Java
持久层框架MyBatis
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的操作。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
21 1
|
22小时前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
31 4
|
21小时前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
22小时前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
22小时前
|
XML Java 数据库连接
java对象有集合mybatis如何映射
java对象有集合mybatis如何映射
21 4
|
21小时前
|
SQL Java 数据库连接
什么是MyBatis持久层框架?
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象) 映射成数据库中的记录。
40 5
|
22小时前
|
开发框架 Java 测试技术
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
34 1
|
22小时前
|
SQL XML Java
这样使用MyBatis框架,被攻击了
这样使用MyBatis框架,被攻击了
16 0