发表于: 2016-12-28 22:00:35
2 2035
今天完成的事情:
#{ } 和 ${ } 的区别
#{ }表示一个占位符号,通过#{ }可以实现 preparedStatement 向占位符中设置值,自动进行java 类型和 jdbc 类型转换,#{ } 可以有效防止sql注入。#{ } 可以接收简单类型值或 pojo 属性值(通过 OGNL 读取对象中的值,属性.属性.属性..方式获取对象属性值)。 如果 parameterType 传输单个简单类型值,#{ } 括号中可以是 value 或其它名称。
${ } 表示拼接 sql 串,通过${ }可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${ }可以接收简单类型值或 pojo 属性值((通过 OGNL 读取对象中的值,属性.属性.属性..方式获取对象属性值)),如果 parameterType 传输单个简单类型值,${}括号中只能是 value。
UserMapper.xml
<select id="findUserById" parameterType="int" resultType="cn.zhisheng.mybatis.po.User">
select * from user where id = #{1}
</select>
知道了parameterType代表参数的类型,resultType代表返回值的类型。这个地方还可以有resultMap属性,代表pojo里的属性和数据库里的字段不对应,用一个resultMap标签做一个匹配。
resultMap的作用:
resultType 可以指定 pojo 将查询结果映射为 pojo,但需要 pojo 的属性名和 sql 查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
public class UserMapperTest
{
private SqlSessionFactory sqlSessionFactory;
//此方法是在 testFindUserById 方法之前执行的
@Before
public void setup() throws Exception
{
//创建sqlSessionFactory
//Mybatis 配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入Mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception
{
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建usermapper对象,mybatis自动生成代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper的方法
User user = userMapper.findUserById(1);
System.out.println(user);
}
}
不知道这里的Mapper接口的作用,是为了简化sqlSession.findUserById(nameSpace.#,“参数”)吗;
最近一直在看mybatis和springmvc的内容,但是一直感觉学的不好。我也有想去公司的想法,有没有哪位师兄和我聊聊。
评论