美文网首页
Mybatis学习笔记一

Mybatis学习笔记一

作者: sunny4handsome | 来源:发表于2017-12-10 16:01 被阅读0次

这篇博文记录一下Mybatis的学习情况

[Mybatis官方教程](http://www.mybatis.org/mybatis-3/zh/index.html

Mybatis配置文件

configuration xml

该文件主要配置Mybatis的一些核心配置,包括数据源、事务、mapper 配置文件的路径、别名等配置信息,官方教程列出了详细的配置信息,这里不在赘述,下面是我的配置文件,仅供参考

<configuration>
    <properties resource="database.properties"></properties>
    <settings>
        <setting name="cacheEnabled" value="true" />
    </settings>
    <typeAliases>
        <typeAlias type="com.payne.entity.User" alias="User" />
        <typeAlias type="com.payne.entity.Board" alias="Board" />
        <typeAlias type="com.payne.entity.Topic" alias="Topic" />
        <typeAlias type="com.payne.entity.Reply" alias="Reply" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="userMapper.xml" />
        <mapper resource="userMapper2.xml" />
        <mapper resource="topicMapper.xml" />
        <mapper resource="topicMapper2.xml" />
        <mapper resource="topicMapper3.xml" />
    </mappers>

</configuration>

mapper配置文件

Mybatis主要是�主要用来放置我们sql语句的地方,下面�是我的两个mapper,一个对应用户表,一个对应话题表,可以查看一个用户发表了那些话题

userMapper.xml

<mapper namespace="userMapper">
    <sql id="selectAllUsers">
        select *  from user
    </sql>
    <select id="selectOneUser" parameterType="map" resultType="User">
        select * from user where uId = #{id} and uName = #{name}
    </select>
    <select id="selectUserByUId" parameterType="int" resultType="hashmap">
        <include refid="selectAllUsers"></include>
        where uId = #{id}
    </select>
    <select id="selectAllUsers" resultType="User">
        <include refid="selectAllUsers"></include>
    </select>

    <select id="selectAllTopic" resultType="Topic">
        select * from topic
    </select>
    <select id="selectTopicsByUId" resultMap="resultUsers">
        select
        u.uId as userId
        ,u.uName as userName
        ,uPass as userPass
        ,u.head as userHead
        ,u.regTime as userRegTime
        ,u.gender as userGender
        ,t.topicId as topicId
        ,t.title as topicTitle
        ,t.content as topicContent
        ,t.publishTime as
        topicPublishTime
        ,t.modifyTime as topicModifyTime
        from user u left join
        topic t on u.uId = t.uId where u.uId = #{id}
    </select>
    <resultMap id="resultUsers" type="User" >
        <id property="uid" column="userId" />
        <result property="uname" column="userName" />
        <result property="upass" column="userPass" />
        <result property="head" column="userHead" />
        <result property="regTime" column="userRegTime" />
        <result property="gender" column="userGender" />
        <collection property="topics" javaType="ArrayList" ofType="Topic" resultMap="topicMapper.resultTopic">
            
        </collection>
    </resultMap>
    <resultMap type="User" id="resultUser">
        <id property="uid" column="userId" />
        <result property="uname" column="userName" />
        <result property="upass" column="userPass" />
        <result property="head" column="userHead" />
        <result property="regTime" column="userRegTime" />
        <result property="gender" column="userGender" />
    </resultMap>
</mapper>

topicMapper.xml

<mapper namespace="topicMapper">

  <select id="selectAllTopic"  resultType="Topic">
    select * from topic
  </select>
  <select id="selectAllTopicsByUid"  resultMap="resultTopics">
    select 
    u.uId as userId
    ,u.uName as userName
    ,uPass as userPass
    ,u.head as userHead
    ,u.regTime as userRegTime
    ,u.gender as userGender
    ,t.topicId as topicId
    ,t.title as topicTitle
    ,t.content as topicContent
    ,t.publishTime as topicPublishTime
    ,t.modifyTime as topicModifyTime
     from topic t left join user u on u.uId = t.uId
  </select>
  <resultMap id="resultTopics" type="Topic">
    <id property="topicId" column="topicId"/>
    <result property="title" column="topicTitle"/>
    <result property="content" column="topicContent"/>
    <result property="publishTime" column="topicPublishTime"/>
    <result property="modifyTime" column="topicModifyTime"/>
    
    <collection property="user" javaType="User">
        <id property="uid" column="userId"/>
        <result property="uname" column="userName"/>
        <result property="upass" column="userPass"/>
        <result property="head" column="userHead"/>
        <result property="regTime" column="userRegTime"/>
        <result property="gender" column="userGender"/>
    </collection>
  </resultMap>
  <resultMap type="Topic" id="resultTopic">
        <id property="topicId" column="topicId" />
        <result property="title" column="topicTitle" />
        <result property="content" column="topicContent" />
        <result property="publishTime" column="topicPublishTime" />
        <result property="modifyTime" column="topicModifyTime" />
  </resultMap>
</mapper>

一对一用association标记,多对一、一对多用collection标记

获得sqlSessionFactory

Mybatis执行sql语句的核心类是sqlSessionFactory,通过如下方式获得sqlSessionFactory

InputStream inputStream = null;
        inputStream = Resources.getResourceAsStream(resourceFile);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

参数

Mybatis给Mapper中的sql语句传递参数, �单个参数直接传递,多个参数可以用索引、类、Map等方式传递

List<User> users = sqlSession.selectList("userMapper.selectTopicsByUId",1);
        Map<String, Object> mapParams = new HashMap<>();
        mapParams.put("id", 1);
        Map<String,Map<String,String>> map = sqlSession.selectMap("userMapper.selectUserByUId", mapParams,"uName");
        System.out.println(map);

其他

Mybatis ��核心的东西保护ResultMap、动态sql,参见官网

相关文章

网友评论

      本文标题:Mybatis学习笔记一

      本文链接:https://www.haomeiwen.com/subject/mcrvixtx.html