【MyBatis框架点滴】——MyBatis输入映射
2016-05-31 23:08
232 查看
在MyBatis的映射文件中,通过parameterType指定输入数据的类型,输入类型可以是简单类型如Integer、HashMap、pojo包装类等。
输入类型为简单类型
输入类型为简单类型时,传入一个简单类型的参数,用
映射文件:
实现:
测试:
输入类型为HashMap
输入类型为简单类型时,只可以传递一个参数,有很大的局限性。因此当输入参数较多时,可以将参数都放到HashMap中进行传参。在映射文件中,用
实现:
映射文件:
测试:
输入类型为pojo
在映射文件中,当访问pojo的简单属性(比如User.java中的id、username、sex、birthday、address)时,只需要用
User.java
映射文件:
实现:
测试:
扩展:
1、mybatis别名
上述parameterType的属性值为int,其实就代表是从java.lang.Integer映射来的,这是mybatis的特性,mybatis默认支持java中一些常用类型的别名,如
int-java.lang.Integer
string-java.lang.String
date-Date
……
其他mybatis不支持的数据类型还可以在mybatis全局配置文件中用如下方式配置:
配置完成后,就可以在映射文件中用 user 来“充当”com.danny.mybatis.po.User 类型了。
2、#{} 和 $ {}
#{} 表示一个占位符号,接收输入参数,参数类型可以为简单类型、hashmap、pojo。
${} 也用来接收简单类型、hashmap、pojo的输入参数,但由于它表示一个拼接符号,所以会引起sql注入,如无特殊情况,不建议经常使用。
【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis输入映射》】
输入类型为简单类型
输入类型为简单类型时,传入一个简单类型的参数,用
#{参数名}接收参数值(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注入,如无特殊情况,不建议经常使用。
【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis输入映射》】
相关文章推荐
- c语言实现hashmap(转载)
- php expects parameter 1 to be resource, array given 错误
- JS hashMap实例详解
- Mybatis传递多个参数的解决办法(三种)
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
- 解析WeakHashMap与HashMap的区别详解
- SpringMVC整合mybatis实例代码
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- 全面解析Java中的HashMap类
- MyBatis学习笔记(二)之关联关系
- 浅析Mybatis 在CS程序中的应用
- Java Mybatis框架入门基础教程
- Windows下Java+MyBatis框架+MySQL的开发环境搭建教程
- Mybatis与Ibatis的区别
- PDO版本问题 Invalid parameter number: no parameters were bound
- 基于Java HashMap的死循环的启示详解
- Java中HashMap和Hashtable的区别浅析
- 重载toString实现JS HashMap分析
- Android中实现HashMap排序的方法