精华内容
下载资源
问答
  • MyBatis 映射文件

    2020-10-21 09:35:07
    MyBatis映射文件 1.Mybatis映射文件简介 1)MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即...

    MyBatis映射文件

    1.Mybatis映射文件简介

    1)MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。
    2)SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
    cache – 给定命名空间的缓存配置。
    cache-ref – 其他命名空间缓存配置的引用。
    resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加 载对象。
    parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能 在将来被移除,这里不会记录。
    sql – 可被其他语句引用的可重用语句块。
    insert – 映射插入语句
    update – 映射更新语句
    delete – 映射删除语句
    select – 映射查询语

    2.Mybatis使用insert|update|delete|select完成CRUD

    1.select

    1)Mapper接口方法

    public Employee getEmployeeById(Integer id );
    

    2)Mapper映射文件

    <select id="getEmployeeById" 
         resultType="com.atguigu.mybatis.beans.Employee" 
         databaseId="mysql">
    	 select * from tbl_employee where id = ${_parameter}
    </select>
    
    2.insert

    1)Mapper接口方法

    public Integer  insertEmployee(Employee employee);
    

    2)Mapper映射文件

    <insert id="insertEmployee" 
    		parameterType="com.atguigu.mybatis.beans.Employee"  
    			databaseId="mysql">
    		insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})
    </insert>
    
    3.update

    1)Mapper接口方法

    public Boolean  updateEmployee(Employee employee);
    

    2)Mapper映射文件

    <update id="updateEmployee" >
    	update tbl_employee set last_name = #{lastName},
    		email = #{email},
    		gender = #{gender}
    		where id = #{id}
    </update>
    
    4.delete

    1)Mapper接口方法

    public void  deleteEmployeeById(Integer id );
    

    2)Mapper映射文件

    <delete id="deleteEmployeeById" >
    		delete from tbl_employee where id = #{id}
    </delete>
    

    3.主键生成方式、获取主键值

    1.主键生成方式

    1)支持主键自增,例如MySQL数据库
    2)不支持主键自增,例如Oracle数据库

    2.获取主键值

    1)若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上。

    <insert id="insertEmployee" 	parameterType="com.atguigu.mybatis.beans.Employee"  
    			databaseId="mysql"
    			useGeneratedKeys="true"
    			keyProperty="id">
    		insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})
    </insert>
    
    展开全文
  • idea-利用maven构建web工程: mybatis映射文件目录位置(在resoucres/ 文件夹下创建mybatis映射文件包路径) 在resources/ 文件夹下创建mybatis的mapper.xml文件.png 在resources/ 文件文件夹下创建mybatis 的...
        

    idea-利用maven构建web工程: mybatis映射文件目录位置(在resoucres/ 文件夹下创建mybatis映射文件包路径)

    4165335-2996e877ac97b651.png
    在resources/ 文件夹下创建mybatis的mapper.xml文件.png

    在resources/ 文件文件夹下创建mybatis 的 mapper.xml 映射文件的包

    创建方式: cn/itcast/mybatis/mapper
    注意中间是 斜杠/ 而不是点. 作为分割符;

    打包之后, 就会把 resources/cn/itcast/mybatis/mapper下的映射文件与java/cn/itcast/mybatis/mapper 下的接口合并到一个目录下: classes/cn/itcast/mybatis/mapper文件夹下;

    4165335-b6de6a7584e5a49a.png
    maven打包后 resources/cn/itcast/mybatis/mapper 和 java/cn/itcast/mybatis/mapper 内容合并.png

    只要按照resuorces/cn/itcat/mybatis/mapper这样的以 / 作为分割符的方式创建mybatis的映射文件包路径, 就能完成与 java/ 下的同名包的合并;

    无需其他配置;也就是说无需再pom文件中做其他配置;

    展开全文
  • 第4章 MyBatis 映射文件Mybatis 框架第4章 MyBatis 映射文件4.1 Mybatis映射文件简介4.2 Mybatis使用insert|update|delete|select完成CRUD4.2.1 select4.2.2 insert4.2.3 update4.2.4 delete4.3主键生成方式、获取主...

    Mybatis 框架

    第4章 MyBatis 映射文件

    4.1 Mybatis映射文件简介

    1)MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。

    2)SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
    cache – 给定命名空间的缓存配置。
    cache-ref – 其他命名空间缓存配置的引用。
    resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加 载对象。

    parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能 在将来被移除,这里不会记录。
    ————————————————————————————

    sql – 可被其他语句引用的可重用语句块。

    sql语块
    insert 映射插入语句
    update 映射更新语句
    delete 映射删除语句
    select 映射查询语

    ————————————————————————————

    4.2 Mybatis使用insert|update|delete|select完成CRUD

    4.2.1 select

    1)Mapper接口方法

    public Employee getEmployeeById(Integer id );
    

    2)Mapper映射文件

    <select id="getEmployeeById" 
              resultType="com.atguigu.mybatis.beans.Employee" 
              databaseId="mysql">
    		 select * from tbl_employee where id = ${_parameter}
    </select>
    

    ————————————————————————————

    4.2.2 insert

    1)Mapper接口方法

    public Integer  insertEmployee(Employee employee);
    

    2)Mapper映射文件

    <insert id="insertEmployee" 
    		parameterType="com.atguigu.mybatis.beans.Employee"  
    			databaseId="mysql">
    		insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})
    </insert>
    
    

    ————————————————————————————

    4.2.3 update

    1)Mapper接口方法

    public Boolean  updateEmployee(Employee employee);
    

    2)Mapper映射文件

    <update id="updateEmployee" >
    		update tbl_employee set last_name = #{lastName},
    				email = #{email},
    				gender = #{gender}
    				where id = #{id}
    </update>
    

    ————————————————————————————

    4.2.4 delete

    1)Mapper接口方法

    public void  deleteEmployeeById(Integer id );
    

    2)Mapper映射文件

    <delete id="deleteEmployeeById" >
    		delete from tbl_employee where id = #{id}
    </delete>
    

    ————————————————————————————

    4.3主键生成方式、获取主键值

    4.3.1 主键生成方式

    1)支持主键自增,例如MySQL数据库

    2)不支持主键自增,例如Oracle数据库
    ————————————————————————————

    4.3.2 获取主键值

    1)若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上。

    <insert id="insertEmployee" 	parameterType="com.atguigu.mybatis.beans.Employee"  
    			databaseId="mysql"
    			useGeneratedKeys="true"
    			keyProperty="id">
    		insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})
    </insert>
    

    ————————————————————————————

    4.4 参数传递

    4.4.1 参数传递的方式

    1)单个参数

    可以接受基本类型,对象类型。这种情况MyBatis可直接使用这个参数,不需要经过任	何处理。
    

    2)多个参数

    任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,或者0,1…,值就是参数的值
    

    3)命名参数

    为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字
    

    4)POJO

    当这些参数属于我们业务POJO时,我们直接传递POJO
    

    5)Map

    我们也可以封装多个参数为map,直接传递
    

    6)Collection/Array

    会被MyBatis封装成一个map传入, Collection对应的key是collection,Array对应的key是array. 如果确定是List集合,key还可以是list.
    

    ————————————————————————————

    4.4.2 参数传递源码分析

    1)以命名参数为例:

    public Employee getEmployeeByIdAndLastName
    (@Param("id")Integer id, @Param("lastName")String lastName);
    

    ————————————————————————————
    2)源码: (*****)

    public Object getNamedParams(Object[] args) {
        final int paramCount = names.size();
        if (args == null || paramCount == 0) {
          return null;
        } else if (!hasParamAnnotation && paramCount == 1) {
          return args[names.firstKey()];
        } else {
          final Map<String, Object> param = new ParamMap<Object>();
          int i = 0;
          for (Map.Entry<Integer, String> entry : names.entrySet()) {
            param.put(entry.getValue(), args[entry.getKey()]);
            // add generic param names (param1, param2, ...)
            final String genericParamName = GENERIC_NAME_PREFIX + String.valueOf(i + 1);
            // ensure not to overwrite parameter named with @Param
            if (!names.containsValue(genericParamName)) {
              param.put(genericParamName, args[entry.getKey()]);
            }
            i++;
          }
          return param;
        }
      }
    

    ————————————————————————————

    4.4.3 参数处理

    1)参数位置支持的属性:
    javaType、jdbcType、mode、numericScale、resultMap、typeHandler、jdbcTypeName、expression

    2)实际上通常被设置的是:可能为空的列名指定 jdbcType ,例如:·

    insert into orcl_employee(id,last_name,email,gender) values(employee_seq.nextval,#{lastName, ,jdbcType=NULL },#{email},#{gender})
    //可以在全局配置文件指定为null 也可以像上面这面这样单独配置//
    

    ————————————————————————————

    4.4.4 参数的获取方式

    1.  #{key}:可取普通类型、POJO类型、多个参数、集合类型
       获取参数的值,预编译到SQL中。安全。Preparedstatement
      
    2.  ${key}:可取单个普通类型、POJO类型、多个参数、集合类型
       注意:取单个普通类型的参数,${}中不能随便写 必须用_parameter 
       _parameter是Mybatis的内置参数
       获取参数的值,拼接到SQL中。有SQL注入问题。Statement ORDER BY  ${name}
      
       原则:能用#{}取值就优先使用#{} 解决不了的使用${}
      
       e.g.原生的JDBC不支持占位符的地方 就可以使用${}
       e.g.Select column1,column2…from 表 where 条件 group by 组表示 having 条件 
       order by 排序字段 desc/asc  limit X,X;
      

    ————————————————————————————

    4.5 select查询的几种情况

    1)查询单行数据返回单个对象

    public Employee getEmployeeById(Integer id );
    

    2)查询多行数据返回对象的集合

    public List<Employee> getAllEmps();
    

    3)查询单行数据返回Map集合

    public Map<String,Object> getEmployeeByIdReturnMap(Integer id );
    

    4)查询多行数据返回Map集合
    @MapKey(“id”) // 指定使用对象的哪个属性来充当map的key(对象的属性,而不是数据库的列)

    public Map<Integer,Employee>  getAllEmpsReturnMap();
    

    ————————————————————————————

    4.6 resultType自动映射

    1)autoMappingBehavior默认是PARTIAL,开启自动映射的功能。唯一的要求是列名和javaBean属性名一致
    2)如果autoMappingBehavior设置为null则会取消自动映射
    3)数据库字段命名规范,POJO属性符合驼峰命名法,如A_COLUMNaColumn,我们可以开启自动驼峰命名规则映射功能,mapUnderscoreToCamelCase=true

    缺点:多表查询 完成不了
    ————————————————————————————

    4.7 resultMap自定义映射

    1)自定义resultMap,实现高级结果集映射

    2)**id **:用于完成主键值的映射

    3)result :用于完成普通列的映射

    4)association:一个复杂的类型关联;许多结果将包成这种类型

    5)collection : 复杂类型的集
    ————————————————————————————

    4.7.1 id&result

    Alt

    在这里插入图片描述

    <select id="getEmployeeById" resultMap="myEmp">
    		select id, last_name,email, gender from tbl_employee where id =#{id}
    </select>
    
    <resultMap type="com.atguigu.mybatis.beans.Employee" id="myEmp">
    		<id column="id"  property="id" />
    		<result column="last_name" property="lastName"/>
    		<result column="email" property="email"/>
    		<result column="gender" property="gender"/>
    </resultMap>
    

    ————————————————————————————

    4.7.2 association

    1)POJO中的属性可能会是一个对象,我们可以使用联合查询,并以级联属性的方式封装对象.使用association标签定义对象的封装规则

    public class Department {
    	private Integer id ; 
    	private String departmentName ;
    //  省略 get/set方法
    }
    
    public class Employee {
    	private Integer id ; 
    	private String lastName; 
    	private String email ;
    	private String gender ;
    	private Department dept ;
        // 省略 get/set方法
    }
    

    2)使用级联的方式:

    <select id="getEmployeeAndDept" resultMap="myEmpAndDept" >
    		SELECT e.id eid, e.last_name, e.email,e.gender ,d.id did, d.dept_name FROM tbl_employee e , tbl_dept d   WHERE e.d_id = d.id  AND e.id = #{id}
    </select>
    	
    	<resultMap type="com.atguigu.mybatis.beans.Employee" id="myEmpAndDept">
    		<id column="eid" property="id"/>
    		<result column="last_name" property="lastName"/>
    		<result column="email" property="email"/>
    		<result column="gender" property="gender"/>
    	    <!-- 级联的方式 -->
    		<result column="did" property="dept.id"/>
    	<result column="dept_name" property="dept.departmentName"/>
    </resultMap>
    

    3)Association‘

    <resultMap type="com.atguigu.mybatis.beans.Employee" id="myEmpAndDept">
    		<id column="eid" property="id"/>
    		<result column="last_name" property="lastName"/>
    		<result column="email" property="email"/>
    		<result column="gender" property="gender"/>
    		<association property="dept" javaType="com.atguigu.mybatis.beans.Department">
    			<id column="did" property="id"/>
    			<result column="dept_name" property="departmentName"/>
    		</association>
    </resultMap>
    

    ————————————————————————————

    4.7.3 association 分步查询

    1)实际的开发中,对于每个实体类都应该有具体的增删改查方法,也就是DAO层, 因此

    对于查询员工信息并且将对应的部门信息也查询出来的需求,就可以通过分步的方式
    完成查询。

    ①先通过员工的id查询员工信息
    ②再通过查询出来的员工信息中的外键(部门id)查询对应的部门信息.

    <select id="getEmployeeAndDeptStep" resultMap="myEmpAndDeptStep">
    		 select id, last_name, email,gender,d_id  from tbl_employee where id =#{id}
    </select>
    	
    <resultMap type="com.atguigu.mybatis.beans.Employee" id="myEmpAndDeptStep">
    		<id column="id"  property="id" />
    		<result column="last_name" property="lastName"/>
    		<result column="email" property="email"/>
    		<result column="gender" property="gender"/>
    		<association property="dept" 			select="com.atguigu.mybatis.dao.DepartmentMapper.getDeptById" 
    				column="d_id" fetchType="eager">
    		</association>
    </resultMap>
    

    ————————————————————————————

    4.7.4 association 分步查询使用延迟加载

    1)在分步查询的基础上,可以使用延迟加载来提升查询的效率,只需要在全局的
    Settings中进行如下的配置:

    <!-- 开启延迟加载 -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 设置加载的数据是按需还是全部 -->
    <setting name="aggressiveLazyLoading" value="false"/>
    

    4.7.5 collection

    1)POJO中的属性可能会是一个集合对象,我们可以使用联合查询,并以级联属性的方式封装对象.使用collection标签定义对象的封装规则

    public class Department {
    	private Integer id ; 
    	private String departmentName ;
    	private List<Employee> emps ;
    }
    

    2)Collection

    <select id="getDeptAndEmpsById" resultMap="myDeptAndEmps">
    		SELECT d.id did, d.dept_name ,e.id eid ,e.last_name ,e.email,e.gender 
    		FROM tbl_dept d  LEFT OUTER JOIN tbl_employee e ON  d.id = e.d_id 
    		WHERE d.id = #{id}
    	</select>
    	<resultMap type="com.atguigu.mybatis.beans.Department" id="myDeptAndEmps">
    		<id column="did" property="id"/>
    		<result column="dept_name" property="departmentName"/>
    		<!-- 
    			property: 关联的属性名
    			ofType: 集合中元素的类型
    		 -->
    		<collection property="emps"  ofType="com.atguigu.mybatis.beans.Employee">
    			<id column="eid" property="id"/>
    			<result column="last_name" property="lastName"/>
    			<result column="email" property="email"/>
    			<result column="gender" property="gender"/>
    		</collection>
    </resultMap>
    

    ————————————————————————————

    4.7.6 collection 分步查询

    1)实际的开发中,对于每个实体类都应该有具体的增删改查方法,也就是DAO层, 因此

    对于查询部门信息并且将对应的所有的员工信息也查询出来的需求,就可以通过分步的方式完成查询。

    ③先通过部门的id查询部门信息

    ④再通过部门id作为员工的外键查询对应的部门信息.

    <select id="getDeptAndEmpsByIdStep" resultMap="myDeptAndEmpsStep">
    	 	select id ,dept_name  from tbl_dept where id = #{id}
    	 </select>
    	 <resultMap type="com.atguigu.mybatis.beans.Department" id="myDeptAndEmpsStep">
    	 	<id column="id" property="id"/>
    	 	<result column="dept_name" property="departmentName"/>
    	 	<collection property="emps" 
    	 			select="com.atguigu.mybatis.dao.EmployeeMapper.getEmpsByDid"
    	 			column="id">
    	 	</collection>
     </resultMap>
    

    ————————————————————————————
    【下面4.7.7转载部分,讲解比较细节我就分享给大家分布查询使用延迟加载!!!】

    4.7.7 collection 分步查询使用延迟加载

    collection 分布查询使用延迟加载可以查看这个!转载自qq_36901488
    仅限转载这个!个人理解总结这个比较全面细节!
    ————————————————————————————
    ————————————————————————————
    我们继续整理
    ————————————————————————————

    4.7.8 扩展: 分步查询多列值的传递

    1)如果分步查询时,需要传递给调用的查询中多个参数,则需要将多个参数封装成
    Map来进行传递,语法如下: {k1=v1, k2=v2…}
    2)在所调用的查询方,取值时就要参考Map的取值方式,需要严格的按照封装map
    时所用的key来取值.
    ————————————————————————————

    4.7.9 扩展: association 或 collection的 fetchType属性

    1)在 和标签中都可以设置fetchType,指定本次查询是否要使用延迟加载。默认为 fetchType=”lazy” ,如果本次的查询不想使用延迟加载,则可设置为fetchType=”eager”.

    2)fetchType可以灵活的设置查询是否需要使用延迟加载,而不需要因为某个查询不想使用延迟加载将全局的延迟加载设置关闭.

    ————————————————————————————

    下章预告:【第5章:MyBatis 动态SQL】

    ———————————————————————————————————————————————————————————————————————————————————————————————————

    展开全文
  • maven自动生成mybatis映射文件工程
  • 自动生成mybatis映射文件工具; 步骤: 1》打开generatorConfig.xml文件,配置自己的数据库连接参数 2》配置实体类、mapper映射文件、mapper接口 3》:回到根目录,按住Shif+鼠标右键(即在当前目录打开命令行),...
  • 生成springMvc和mybatis映射文件
  • Mybatis映射文件(学习总结)Mybatis映射文件cacheselect 查询**接口方法中传递多个参数** Mybatis映射文件 上次讲注解的方式@select(sql语句) @update @delete @insert 只适合简单的且后期基本上不修改的curd 对于...

    Mybatis映射文件

    上次讲注解的方式@select(sql语句) @update @delete @insert 只适合简单的且后期基本上不修改的curd

    对于复杂的sql语句一般还是需要使用映射文件来实现,一般情况映射文件命名 和接口一致以mapper作为后缀比如 UserMapper.xml

    • cache – 该命名空间的缓存配置。
    • cache-ref – 引用其它命名空间的缓存配置。
    • resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
    • sql – 可被其它语句引用的可重用语句块。
    • insert – 映射插入语句。
    • update – 映射更新语句。
    • delete – 映射删除语句。
    • select – 映射查询语句。

    在映射文件中,不像核心配置文件中节点次数和顺序必须固定 在映射文件中没有这个限制

    cache

    启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存(默认开启),表示当前的映射文件中的查询开启缓存

    <cache
      eviction="FIFO"
      flushInterval="60000"
      size="512"
      readOnly="true"/>
    

    Mybatis 缓存:

    一级缓存:sqlSession 级别

    mybatis在第一次执行sql语句的查询时会将查询到的结果保存在sqlSession中,也就是数据会纳入sqlSession的管理,一级缓存自动开启

    如果多次查询的sql语句一致且在同一个sqlsession的管理中,第二次直接从sqlSession中获取数据

    一级缓存在哪些情况下会 失效:

    1、sqlSession关闭 2、sqlsession不是同一个对象 3、sqlsesion清除纳入管理的缓存

    二级缓存:

    二级缓存是指会话级别的缓存,当sqlsession关闭时,一级缓存中的数据会保存到二级缓存,二级缓存需要手动开启

    在映射文件中使用 就可以解决

    select 查询

    <select
      id="selectPerson"
      parameterType="int"
      resultType="hashmap"
      resultMap="personResultMap"
      flushCache="false"
      useCache="true"
      timeout="10"
      fetchSize="256"
      statementType="PREPARED"
      resultSetType="FORWARD_ONLY">
    
    <select id="findProviderById" resultType="provider" >
           select * from  smbms_provider  where  id= #{id}
    </select>
    

    #与$的区别

    #: 占位符,mybatis会根据参数的类型自动映射,使用的preparedStatement,预编译处理

    $: 拼接,如果遇到字符类型的 需要手动加’ ’ ,使用的是Statement

    #只能用于where条件的参数传递 where id=#{id} ,对于其他的位置 order by group by 表名这些非where条件字句只能用$

    查询中的模糊查询

     <select id="getProviderByProName" resultType="com.ketai.pojo.Provider">
              select  * from  smbms_provider  where  proName  like  concat('%',#{proName},'%')
        </select>
    
    <select id="getProviderByProName" resultType="com.ketai.pojo.Provider">
              select  * from  smbms_provider  where  proName  like  '%${proName}%'
        </select>
    

    接口方法中传递多个参数

    在mybatis中,一个以上的 传参,默认封装成Map集合key值以arg0 arg1… 或者param1 param2 …

    解决方案:

    方式一:使用注解@param

    使用注解就是给mybatis封装参数的map集合重新设置key值的名称,在映射文件中可以使用重新命名的key获取value值,与形参的名称无关,一般建议key值名称和形参名称一致

        List<Provider>  getProviderByProName(@Param("proName")String  proName, @Param("phone")String  proPhone);
    
    
        <select id="getProviderByProName" resultType="com.ketai.pojo.Provider">
              select  * from  smbms_provider  where  proName  like  concat('%',#{proName},'%')
              and  proPhone=#{phone}
        </select>
    

    规范: 在java方法中,参数的个数不能超过5个,如果参数的数量比较多可以考虑使用 对象、集合(Map 、list、set)

    方式二:把对象作为参数:

    ​ 取值的时候直接使用对象的属性名去获取值,如果对象里面还有引用类型的属性,

        List<Provider>  getProviderByProName(Provider provider);
    
      <select id="getProviderByProName" resultType="com.ketai.pojo.Provider">
              select  * from  smbms_provider  where  proName  like  concat('%',#{proName},'%')
              and  proPhone=#{proPhone}
        </select>
    

    如果我们需要获取的是属性的属性,在取值的时候可以直接使用属性.属性去取值,支持级联属性

    public class Provider implements Serializable {
        /** 版本号 */
        private static final long serialVersionUID = 4939626231680488827L;
    
        /** 主键ID */
        private Long id;
    
        .....省略其他属性...
    
        private  User  user;
    
    }
    
       <select id="getProviderByProName" resultType="com.ketai.pojo.Provider">
              select  * from  smbms_provider  where  proName  like   concat('%',#{proName},'%')
               and prophone=#{user.phone}
        </select>
    

    方式三:使用集合

    map集合: 查询时间在2013-1-1 到2015-1-1 之间的所有供应商信息

      List<Provider>  getProviderByTime(Map<String,String> params);
    
     <select id="getProviderByTime" resultType="com.ketai.pojo.Provider">
    
            select  * from  smbms_provider  where creationdate between #{startTime}  and #{endTime}
        </select>
    

    使用Map集合作为参数,取值的时候直接使用map的key值获取参数值

    list/array集合: 查询id是 {1,2,3}的供应商信息

        List<Provider>  getProviderByIds(List ids);
    
      <select id="getProviderByIds" resultType="com.ketai.pojo.Provider">
            select  * from  smbms_provider  where id
              in( #{collection[0]} , #{collection[1]} ,  #{collection[2]} )
    
        </select>
    

    可以使用collection[index]形式获取,一般list和set 一般是结合循环来处理

    java中方法的参数一般不超过5个, 在mybatis中即使只传递一个参数 规范也是使用注解起别名

    sql片段

    把一些公共的常用的字段或者条件提取出来,在其他的select update delete insert 节点中直接引用

    
        <sql id="colums">
            `id`, `pro_code`, `proName`, `proDesc`, `proContact`, `proPhone`, `proAddress`, `proFax`, `createdBy`, `creationDate`, `modifyDate`, `modifyBy`
        </sql>
    
        <sql id="orderbyid">
           order  by  id  desc
        </sql>
    

    在其他地方引用sql片段

    <select id="getProviderByTime" resultType="com.ketai.pojo.Provider">
    
            select
             <include refid="colums"> </include>
    
            from  smbms_provider  where creationdate between #{startTime}  and #{endTime}
    
            <include refid="orderbyid"></include>
        </select>
    
    展开全文
  • Mybatis映射文件简介

    2020-10-20 20:16:03
    Mybatis映射文件简介 1) Mybatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,因施工和器的XML文件就显得i相对简单。如果拿他跟具有相同功能的JDBC代码对比。会发现省掉了将近95%的代码。...
  • mybatis 映射文件,若属性是一个集合,使用collection <collection property="books" ofType="Book"> property="books" :对应实体的属性名 ofType="Book" :该属性名的类型 如下是Book类 ...
  • Mybatis映射文件元素的作用与用法
  • 主要介绍了mybatis 映射文件中if标签判断字符串相等的方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • mybatis映射文件属性含义

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,424
精华内容 7,769
关键字:

mybatis映射文件