mybatis_个人总结】的更多相关文章

1.<where></where>标签的作用 可以动态的添加where关键字 可以自动去掉第一个拼接条件的and关键字 <where> <if test="username!=null and username!=''"> and username like '%${username}%' </if> <if test="gender!=null and gender!=''"> and gen…
一.一对一映射查询: 第一种方式(手动映射):借助resultType属性,定义专门的pojo类作为输出类型,其中该po类中封装了查询结果集中所有的字段.此方法较为简单,企业中使用普遍. <!-- [手动映射:] 查询用户和用户所属的订单信息: 定义一个包含用户和订单实体的所有属性的全pojo类,将查询结果中的所有字段和全pojo类中的属性相对应. --> <select id="findUserAndOrders1" resultType="com.ith…
在使用mybatis框架开发数据访问层的过程中,我在这段时间遇到很多细节问题困住我,在这里我来分享一下我遇到的坑,希望能帮到大家. 一.mybatis动态代理方式开发的规范: 1.注意在mybatis映射配置文件中的namespace属性的值必须是mapper接口的全路径名称. 2.注意映射文件中的标签上的id的值必须和mapper 接口中的方法名称保持一致. 3.要求映射文件中传入参数的数据类型必须和mapper接口中方法上形参的数据类型保持一致. 4.要求映射文件中输出参数的数据类型必须和m…
一.使用mybatis的动态代理方式开发 需求:这里以crm系统中分页条件查询所有的客户信息的功能为例? 1.创建工程 2.引入所需的jar包 3.引入日志文件.数据库连接参数的配置文件等 4.创建mybatis的核心配置文件,其中包括加载数据参数的配置文件和mybatis的映射文件,还有配置数据源(个人比较喜欢使用阿里巴巴的druid)等. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&…
一.认识mybatis: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github.    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁…
1.什么MyBatis,我们先通过百度百科先进行一个简单的了解 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access…
一.关联查询 当查询的内容涉及到具有关联关系的多个表时,就需要使用关联查询.根据表与表间的关联关系的不同.关联查询分为四种: 一对一关联查询: 一对多关联查询: 多对一关联查询: 多对多关联查询: 二.一对多关联查询 1.通过多表连接查询方式实现     定义实体类及DB表 一对一关联查询,其解决方案与多对一解决方案是相同的. 一对多关联查询:在查询一方对象的时候,同时将其所关联的多方对象也都查询出来. Demo中使用国家(country)和部长(minister)进行示例. public cl…
一.延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时, 按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的. 二.关联对象的加载时机 MyBatis根据对关联对象查询的select语句的执行时机,分为三种类型:直接加载.侵入式延迟加载.深度延迟加载. 直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询. 侵入式延…
一.动态SQL 动态SQL,主要用于解决查询条件不确定的情况:在程序运行期间,根据提交的查询条件进行查询. 动态SQL,即通过MyBatis提供的各种标签对条件作出判断以实现动态拼接SQL语句. 二.使用动态SQL原因 提供的查询条件不同,执行的SQL语句不同.若将每种可能的情况均逐一列出,就将出现大量的SQL语句. 三.<if/>标签 注意事项: (1) @Test public void test08() { Student stu = new Student("明",…
一.多查询条件无法整体接收问题的解决 在实际工作中,表单中所给出的查询条件有时是无法将其封装成一个对象,即查询方法只能携带多个参数,而不能携带将这多个参数进行封装的一个对象.对于这个问题,有两种解决方案:(1)根据Map查询:(2)使用索引号. 二.根据Map查询 1.修改Dao import java.util.List; import java.util.Map; import com.jmu.bean.Student; public interface IStudentDao { // 根…
一.查询缓存 查询缓存的使用,主要是为了提高查询访问速度.将用户对同一数据的重复查询过程简单化,不在每次均从数据库中查询获取结果数据,从而提高访问速度. MyBatis的查询缓存机制,根据缓存区的作用域与生命周期,可划分为两种:一级缓存和二级缓存. MyBatis查询缓存的作用域是根据映射文件mapper的namespace划分的,相同namespace的mapper查询数据存放在同一个缓存区域.不同的namespace下的数据互不干扰.无论是一级缓存还是二级缓存,都是按照namespace进行…
一般遇到这种问题肯定要看一看association中元素编写顺序, <resultMap id="orderRslMap" type="orders"> <id property="id" column="id"></id> <result property="number" column="number"></result>…
1.HTTP Status 500 - Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.e3mall.mapper.TbItemMapper.selectByPrimaryKey 异常现象: 异常原因:此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而…
1.使用MyBatis要非常仔细检查自己的sql语句有没有写错. jdbcType错误,有可能在控制台显示一个 builderException.…
1)sql where 条件 select id="find" parameterType="User" resultType="User"> select id,name, age,address from user_c where 1=1 <if test="id!=null"> and id=#{id} </if> <if test="name!=null">…
Mybatis入门 (一).程序环境 1.jar包 2.classpath目录下建立SqlMapConfig.xml. mybatis的配置文件.全部设置有如下 同时,数据库的参数可以用properties文件来分开,本次实现分开.properties文件为db.properties 为了区分目录.新建一个source folder(config)用来放置配置文件.两个文件分别如下. SqlMapConfig.xml头 <?xml version="1.0" encoding=&…
一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface. 在同一语法单元上,同一注解只能使用一次. 三.示例: import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import o…
一.项目结构 二.代码实现 import java.util.List; import java.util.Map; import com.jmu.bean.Student; public interface IStudentDao { void insertStudent(Student student); void insertStudentCacheId(Student student);// 插入后获取 void deleteStudentById(int id); void updat…
一.Select元素来定义查询操作 Id:唯一标识符.用来引用这条SQL语句,需要和接口的方法名一致 parameterType:参数类型.可以不传,MyBatis会根据TypeHandler自动推断 resultType:返回值类型.别名或者全类名,如果返回的是集合,定义集合中元素的类型.不能和resultMap同时使用 Employee对象 package com.nuch.edu.domain; /** * Created by yangshijing on 2017/12/4 0004.…
获取自增主键的值 若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上. <insert id="addEmp" useGeneratedKeys="true" keyProperty="id"> insert into tbl_employee (last_name,email,gender) VA…
一.前言 Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件. 二.会被拦截的接口 Mybatis 允许在映射语句执行过程中的某一点进行拦截调用. 默认情况下,Mybatis允许使用插件来拦截的接口和方法包括以下几个: 序号 接口 方法 描述 1 Executor update.query.flushState…
一.前言 使用 MyBatis 的主要 Java 接口就是 SqlSession.你可以通过这个接口来执行命令,获取映射器和管理事务. 二.主要类 (1)SqlSession 是由 SqlSessionFactory 实例创建的.SqlSessionFactory 对象包含创建 SqlSession 实例的所有方法. (2)而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML.注解或手动配置 Java 代码来创建 SqlSe…
一.前言 MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形. 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器…
1.The setting logImpl is not known 我在参考某个网站学习mybatis时,出现这个错误,后来找到的原因是因为mybatis的版本(3.1.1)太低,换成3.3.1就没有这个错误了.…
一.单个参数 1.基本数据类型 (1)直接使用 List<ChargeRuleDO> tests(long id); <select id="tests" resultType="com.xxx.bean.ChargeRuleDO"> select * from t_charge_rule t where t.id = #{id} </select> #{}中的参数名与方法中的参数名一致 (2)使用注解 List<Charg…
源码:https://github.com/mybatis/mybatis-3 一.官方 (1)Mybatis官方文档中文版 (2)MyBatis 从入门到精通  书中指定的网络资源 (3)MyBatis 通用 Mapper (4)mybatis-spring 官方文档 二.大牛博客 (1) (2)Mybatis实现原理深入解析 (3)Mybatis简介 三.mybatis源码分析 1.Mybatis3源码分析(一):从sqlSession说起 2.…
通过Mybatis逆向工程,可以从数据库中的表自动生成pojo.mapper映射文件和mapper接口 此处暂存怎么使用逆向工程,原理以后再探讨 工程结构 要修改的地方:generatorConfig.xml配置文件中数据库信息(用户名.密码等).指定数据库表  这两个地方需要修改 代码: 1.GeneratorSqlmap.java import java.io.File; import java.io.IOException; import java.util.ArrayList; impo…
mapper 层 提供 ClazzMapper 和 StudentMapper, ClazzMapper 查询所有班级信息, StudentMapper 根据班级编号查询学生信息. 在 ClazzMapper 中使用<collection>设置装配. <collection>用于关联一个集合 property: 指定要关联的属性名 select: 设定要继续引用的查询, namespace+id column: 查询时需要传递的列   直接上代码(准备俩张表,学生表和班级表,学生表…
mapper 层 提供 StudentMapper 和 ClazzMapper, StudentMapper 查询所有学生信息, ClazzMapper 根据编号查询班级信息. 再 StudentMapper 中使用<association>设置装配:(对比resultMap_集合对象_N+1方式实现) <association>用于关联一个对象 property: 指定要关联的属性名 select: 设定要继续引用的查询, namespace+id column: 查询时需要传递…