之前学过mybatis,可惜忘得差不多了,现在需要使用,于是复习了一下。遇到一些问题:
环境:mac
IDE:idea
maven项目
问题一:读不到mybatis的配置文件
src/main/java和src/test/java
这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
我在src/main/java/uestc/下创建了一个conf.xml文件,但是程序
Resources.getResourceAsReader("uestc/config/conf.xml");
始终读不到这个文件,其实就是因为上面引用的这句话:除了*。java其他文件会被忽略掉。而getResourceAsRead貌似是读(暂时理解为这个) 存class文件目录下的东西,因为xml被maven过滤掉了,存class文件的目录中并没有xml。
解决办法:
在pom。xml文件中添加:
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
目的是让maven不要把。properties和。xml类型的文件过滤掉了。
问题解决。
今天把mybatis中简单的1对1的增删改查熟悉了一下,然后对一对多的情况,看了一下。形如:
User类中还有Post类的List,这种去数据库中拿User的时候需要把Port的集合一起拿出来,所以有下面这个User。xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="uestc.model.UserMapper">
<resultMap id="resultUserMap" type="User">
<result property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="mobile" column="mobile" />
<collection property="posts" ofType="Post" column="useri3223d">
<id property="id" column="post_id" javaType="int" jdbcType="INTEGER"/>
<result property="title" column="title" javaType="string" jdbcType="VARCHAR"/>
<result property="content" column="content" javaType="string" jdbcType="VARCHAR"/>
</collection>
</resultMap>
<select id="getUser" resultMap="resultUserMap" parameterType="int">
SELECT u.*,p.*
FROM user u, post p
WHERE u.id=p.userid AND u.id=#{user_id}
</select>
</mapper>
在简单的1对1的情况中select大概像这个样子
<select id="" resultType="" parameterType=""></select>
返回的直接就是一个普通的类 这类里面没有集合
但是上面那个
<select id="getUser" resultMap="resultUserMap" parameterType="int">
SELECT u.*,p.*
FROM user u, post p
WHERE u.id=p.userid AND u.id=#{user_id}
</select>
返回的就是resultUserMap 里面就是User这个类中有集合Post
所以才有了这个:
<resultMap id="resultUserMap" type="User">
<result property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="mobile" column="mobile" />
<collection property="posts" ofType="Post" column="useri3223d">
<id property="id" column="post_id" javaType="int" jdbcType="INTEGER"/>
<result property="title" column="title" javaType="string" jdbcType="VARCHAR"/>
<result property="content" column="content" javaType="string" jdbcType="VARCHAR"/>
</collection>
</resultMap>
里面定义了User的组成,id,username,mobile然后就是collection:posts
这里的posts就是User中的List port ports 然后定义了post中的各个属性。
这个collection中的column是干嘛的不是很清楚。
貌似后面也没有用到。
大概就是这样。