发表于: 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的内容,但是一直感觉学的不好。我也有想去公司的想法,有没有哪位师兄和我聊聊。


返回列表 返回列表
评论

    分享到