前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MyBatis框架点滴】——MyBatis输入映射

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

作者头像
DannyHoo
发布2018-09-13 12:33:06
4840
发布2018-09-13 12:33:06
举报
文章被收录于专栏:Danny的专栏Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337142

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

输入类型为简单类型


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

  映射文件:

代码语言:javascript
复制
<select id="findUserById" parameterType="int" resultType="com.danny.mybatis.po.User">
    select * from user where id=#{id}
</select>

  实现:

代码语言:javascript
复制
/**
 * 根据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;
 }

  测试:

代码语言:javascript
复制
@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值。

  实现:

代码语言:javascript
复制
/**
* 根据各种参数查询用户信息
* @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;
}

  映射文件:

代码语言:javascript
复制
<select id="findUserByParams" parameterType="map"
    resultType="com.danny.mybatis.po.User">
    select * from user where username=#{username} and sex=#{sex}
</select>

  测试:

代码语言:javascript
复制
@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

代码语言:javascript
复制
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
}

  映射文件:

代码语言:javascript
复制
<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>

  实现:

代码语言:javascript
复制
/**
    * 根据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;
    }

  测试:

代码语言:javascript
复制
@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全局配置文件中用如下方式配置:

代码语言:javascript
复制
 <typeAliases>
     <typeAlias type="com.danny.mybatis.po.User" alias="user"/>
 </typeAliases>

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

  2、#{} 和 $ {}

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

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


【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis输入映射》】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档