文档章节

mapper.xml配置文件详解

码农_皇甫
 码农_皇甫
发布于 2015/11/09 14:19
字数 875
阅读 7537
收藏 9

--命名空间通常为该mapper映射文件所对应maper接口所在的路径

<mapper namespace="com.harbsoft.com.mybatis.mapper.UserMapper">

--开启二级缓存 (实体类必须序列化)

<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

--抽取通用的SQL

<sql id="user_query_where">   
     通用sql
</sql>    

--if

<if test="id!=null and id!=''">
       通常是where条件语句
 </if>

--foreach

<foreach collection="ids" item="id" open="and (" close=")" separator="or">
     user.id=#{id}
</foreach>

--$

AND user.username LIKE '${username}%'

--#

AND user.sex = #{sex}

--resultMap对应的是表与实体类的映射  -- type 数据库表对应的实体类,别名或完整类名都可以

<resultMap type="person" id="resultMapPerson">
   <!-- 结果集的主键 -->
   --主键  <id/>
   <id  property="userid" column="id"/>
   <!-- 普通的列 -->
   --column 是数据库中字段, property是实体类中字段
   <result property="name"  column="username" />
   <result property="addr"  column="address" />
</resultMap>

-- 一对一的关系处理(一个订单对应一个用户, 此处相当于一个类中的一个字段,该字段为一个对象)

<association property="user" javaType="com.harbosoft.mybatis.po.User">
   <id  property="id" column="user_id"/>
   <result  property="username" column="username"/>
   <result  property="sex" column="sex"/>
   <result  property="address" column="address"/>
</association>

--一对多的关系处理(一个用户有多个订单,此处相当于一个类中的一个字段,该字段为一个集合)

<!-- 订单信息 -->
<collection property="orders" ofType="com.harbosoft.mybatis.po.Orders">
   <!-- 订单号 -->
   <result property="order_number" column="order_number" />
   <result property="id" column="id" />
</collection>

三者可以嵌套使用

一个用户--------多个订单-------多个订单明细

一个用户--------多个订单-------多个订单明细--------多个商品

--select

public User findUserById(int id)
<select id="findUserById" parameterType="int"  resultType="user">
     SELECT * FROM USER WHERE id=#{id}  
     <!--
     id-------mapper接口的方法名;
     parameterType -------mapper接口的方法参数的类型
     resultType ---------mapper接口的方法的返回值类型 
     user ----------是别名(全名是com.harbosoft.mybatis.Items)
     id 和形参保持一致   (#)
     -->
</select>

--返回值是list   user

public List<User> findUserByName(String username)
<select id="findUserByName" parameterType="string" resultType="user">
    SELECT * FROM USER WHERE username like '${value}%' 
    <!--
    该方法返回值类型为List,但是集合中装的是user,所以resultType 的值只要和集合中存储的一样即可
     value 可以随意些,什么都可以  ($)
    -->
</select>

--返回值是list   参数是user   resultType 

public List<User> findUserList(User user)throws Exception;
<!-- 综合查询用户信息 -->
<select id="findUserList" parameterType="user" resultType="user">
    SELECT * FROM USER 
    <where>
    <!-- 用户的查询条件 -->
      <include refid="user_query_where"/>
      <!--该条SQL可能会重用,所以抽取出来,引用时用include-->
    </where>
</select>

 

<sql id="user_query_where">
          <if test="id!=null and id!=''">
             AND user.id=#{id}
          </if>

          <foreach collection="ids" item="id" open="and (" close=")" separator="or">
               user.id=#{id} and (userid =
          </foreach>
          <if test="username!=null and username!=''">
             AND user.username LIKE '${username}%'
          </if>
          <if test="sex!=null and sex!=''">
             AND user.sex = #{sex}
          </if>
</sql>

 

--返回值是List   resultMap 

public List<Person> findUserListResultMap(User user)throws Exception;
<!-- 综合查询用户信息 使用resultMap-->
<select id="findUserListResultMap" parameterType="user" resultMap="resultMapPerson">
     SELECT * FROM USER WHERE username like '${username}%' and sex=#{sex}
</select>

--参数是map    hashmap   resultType

public List<User> findUserListByHashmap(Map map)throws Exception;
<!-- 通过hashmap查询用户信息 -->
<select id="findUserListByHashmap" parameterType="hashmap" resultType="user">
     SELECT * FROM USER WHERE username like '${name}%' and sex=#{sex}
</select>

--返回值是map    resultType

public Map findUserByIdReturnMap(int id) throws Exception;
<!-- 获取单个用户信息返回hashmap -->
<select id="findUserByIdReturnMap" parameterType="int"  resultType="hashmap">
     SELECT * FROM USER WHERE id=#{id}
</select>

--insert

public void insertUser(User user) throws Exception;
<insert id="insertUser" parameterType="user">
    <!--  
     keyProperty:指定主键映射的pojo对象的属性
        order:selectKey的执行顺序,mysql这里设置为after
        企业中实际使用时,主键通常使用uuid()即 SELECT UUID()
    -->
    <selectKey keyProperty="id" order="AFTER" resultType="int">
        SELECT LAST_INSERT_ID()
    </selectKey>

     INSERT INTO USER(username,birthday,sex,address,detail,score)
     VALUES(#{username},#{birthday},#{sex},#{address},#{detail},#{score})
</insert>

       

--update

public void updateUserById(User user) throws Exception;
<update id="updateUserById"  parameterType="com.harbsoft.mybatis.po.User">
      update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address},detail=#{detail},score=#{score}
      where id=#{id}
</update>

--delete

public void deleteUserById(int id) throws Exception;
<delete id="deleteUserById"  parameterType="java.lang.Integer">
        delete from user where id=#{value}
</delete>

 

 

© 著作权归作者所有

共有 人打赏支持
码农_皇甫
粉丝 0
博文 12
码字总数 5211
作品 0
徐汇
程序员
私信 提问
mybatis核心组件详解——MapperAnnotationBuilder

MapperAnnotationBuilder(org.apache.ibatis.builder.annotation.MapperAnnotationBuilder),mapper注解构建器。 它的职责很简单,就是解析指定的mapper接口对应的Class对象中,包含的所有...

拉风小野驴
2016/02/29
472
2
Mybatis入门到精通-Mybatis配置文件详解

6.mybatis配置文件详解 首先看一下该全局配置文件中都有哪些可以配置的东西: 配置内容 作用 用来加载属性文件 用来设置全局参数 用来设置类型的别名 用来设置类型处理器 用来设置对象工厂 ...

底层码农老陈
2017/10/23
0
0
Mybatis配置文件详解(4)

本次主要来了解: MyBatis数据库配置文件SqlMapConfig.xml SQL映射配置中输入映射的配置 SQL映射配置中输出映射的配置 SQL映射配置中动态SQL语句的配置 1. SqlMapConfig配置文件详解 主要来配...

LeaveStyle
2018/08/30
0
0
Mapped Statements collection does not contain value for com.yangyun.springmybatis.dao.UsersDao.addUs

Mapped Statements collection does not contain value for后面是什么类什么方法之类的:错误原因有几种:1、mapper.xml中没有加入namespace2、mapper.xml中的方法和接口mapper的方法不对应3...

sun是我孙子
2016/11/30
273
0
Mapped Statements collection does not contain value for

Mapped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1、mapper.xml中没有加入namespace 2、mapper.xml中的方法和接口mapper的方法不对...

sprouting
2016/09/09
23
0

没有更多内容

加载失败,请刷新页面

加载更多

域名重定向、用户认证

域名重定向 什么是域名重定向 域名重定向是通过设置web服务的配置文件,将原本访问A域名的请求访问到B域名。 为什么要做域名重定向? 一个比较简单的例子:之前做了一个网站,域名又长又复杂...

李超小牛子
12分钟前
0
0
jvm

public class Demo {    /**     * 成员变量(俗称全局变量),//有缺省值为0     *      静态变量(也称类变量),带static的     *      实例变量...

废柴
27分钟前
0
0
【Mysql技术内幕】第3章 文件

第3章 文件 3.1 参数文件 mysql 数据库的参数文件是以文本的形式进行存储的,可以用vim进行修改 my.ini my.conf等 3.1.1 什么是参数 SHOW VARIABLES 可以查看mysql 配置参数 3.1.2 参数类型 ...

HOT_POT
今天
0
0
Java8 如何正确使用 Optional

原文链接:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在...

大灰狼时间
今天
5
0
富兰克林的人生信条

春节假期期间读了富兰克林自传,这位饱经风霜的老人出身贫寒,只读过两年书,但是通过刻苦自学和不懈奋斗还是取得了令人难以置信的成就,他的一生可以作为我们普通人的励志典范。 富兰克林 ...

春哥大魔王的博客
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部