这篇博文记录一下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,参见官网