idea mybatis cannot find xml以及一些注意事项

idea mybatis cannot find xml以及一些注意事项

映射文件和java工程在一起,sqlmapconfig.xml在maven webapp中的resources,但编译运行却报exception cannot find 映射文件,查看编译后的文件发现即target中没有Dept.xml解决办法

只需要在pom中加入

<build>
    <finalName>mybatis-base</finalName>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
  </build>
即可,意思是加载编译在java工程中的xml映射文件


但在sqlmapconfig中mapper即映射路径需要这样写,以斜杠分割

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<mappers>
   <mapper resource="com/lz/mybat/User.xml"/>
</mappers>

但在映射配置中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
    <select id="findUserById" parameterType="int" resultType="com.lzq.mybat.User">
        SELECT * FROM USER WHERE id=#{id}
    </select>
</mapper>
resulttype中路径是。分割,之所以是不同是因为,前者是路径以/分割,后者是类型即返回值类型pojo包类名



<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
sqlmapconfig 为config.dtd

映射为 mapper.dtd



 <!--中间是sql语句#{}表示展位副,其中的值可任意,parametertypetype和展位副类型一样-->
<!--虽然这个模糊查询查询出多条记录,看似返回值是list,but,resulttype结果类型是单条result所映射的java类型-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.lzq.mybat.User">
        SELECT * FROM user WHERE username like #{value}
    </select>


User user = sqlSession.selectOne("test.findUserById", 1);
//        参数一,映射文件中的 namespace+.+selectid,展位副值

SELECT * FROM user WHERE username LIKE '%${value}%'

${}表示拼接符用来模糊查询之类的,需加引号,但会引起sql注入


<!--得到主键,因为表间的关联关系,主表主键作为子表关联外键-->

<!--添加用户-->
<!--得到insert进去的主键值,仅适用于auto_increment主键-->
<!--keyproperty 值为将结果映射为parameterType中的id属性值,order相对于insert 语句执行之后-->
<insert id="insertUser" parameterType="com.lzq.mybat.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      SELECT last_insert_id()
    </selectKey>
    INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>

<!--适用于非自增主键,before,先通过uuid的到主键,在通过insert into 插入进去,所以是before-->
<insert id="insertUser" parameterType="com.lzq.mybat.User">
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">
        SELECT uuid()
    </selectKey>
    INSERT INTO user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})

</insert>

<typeAliases>
    <!--单个别名设置-->
    <!--<typeAlias type="com.lzq.mybat.User" alias="User"/>-->
    <!--批量别名设置,别名就是类名,首字母大小写都可以,用来简化mapperxml中输入输出映射的
    简写
    -->
    <package name="com.lzq.mybat"/>
    <package name="com.lzq.mapper"/>
    <package name="com.lzq.dao"/>
</typeAliases>


<!--通过mapper接口来加载映射文件
前提:通过mapper代理开发,且映射文件和mapper接口在同一个目录下
-->
<!--resource是路径用/分割,class是类名,用。引用-->
<mapper class="com.lzq.mapper.UserMapper"/>
<!--通过批量来加载,自动扫描包里面的mapper接口进行加载-->
<!--前提:通过mapper代理开发,且映射文件和mapper接口在同一个目录下-->
<package name="com.lzq.mapper"/>


<!--输入参数,输出参数多元化-->
<select id="findUserList" parameterType="com.lzq.dao.UserQueryVo" resultType="com.lzq.dao.UserExpand">
    SELECT *
    FROM user
    WHERE user.id = #{userExpand.sex} AND user.username LIKE '%${userExpand.user}%'
</select>
<!--userExpand.sex取出包装类型 的参数值,parametertype类型中包含userExpand-->