本文共 4627 字,大约阅读时间需要 15 分钟。
mysql mysql-connector-java 5.1.32 org.mybatis mybatis 3.2.8
1)配在全局文件中包含2)集成spring可以用 MapperScannerConfigurer的basePackage来配置要扫描成mapper的路径
public class TestMybatis { @Test public void test() throws IOException { // 1、根据mybatis全局配置文件,获取SqlSessionFactory String resource = "mybatis-config.xml"; // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流 InputStream inputStream = Resources.getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 2、从SqlSession工厂中,获取sqlsession,用来执行sql SqlSession session = sqlSessionFactory.openSession(); try { // 查询selectOne(用getMapper()方法也可以) Employee employee = (Employee) session.selectOne("com.hd.test.mapper.EmployeeMapper.getEmployeeById", 1); // 输出信息 System.out.println(employee); } finally { // 关闭session session.close(); } } }
1)MyBatis提供的多环境适应机制,例如开发、测试、生产环境都需要有不同的配置
1)该属性主要作用就是引入外部的properties是文件,文件格式为xxx=xxx2)eg:
1)调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为 (1)cacheEnabled 该配置影响的所有映射器中配置的缓存的全局开关 (2)lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态 (3)logPrefix 指定 MyBatis 增加到日志名称的前缀 (4)logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找
1)类型别名是为 Java 类型命名的一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余
1)
1)MyBatis中的插件,其实类似于拦截器的效果,可以实现在MyBatis的整个运行流程中的 某些指定位置进行拦截 (1) Executor:对执行器进行拦截 (2) ParameterHandler:参数处理时进行拦截 (3) ResultSetHandler:处理结果集,封装Java对象时进行拦截 (4) StatementHandler:编译statement时进行拦截
1)select (1)id:当前名称空间下的statement的唯一标识。必须。要求id和mapper接口中的方法的名字一致 (2)resultType:将结果集映射为java的对象类型。必须(和 resultMap 二选一) (3)parameterType:传入参数类型。可以省略(或者在Dao层加@Param注解映射,多个参数的时候很有用)2)insert (1)id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致 (2)parameterType:参数的类型,使用动态代理之后和方法的参数类型一致 (3)useGeneratedKeys:开启主键回写 (会返回插入的表id) (4)keyColumn:指定数据库的主键 (5)keyProperty:主键对应的pojo属性名3)update (1)id:当前名称空间下的statement的唯一标识(必须属性) (2)parameterType:传入的参数类型,可以省略 4)delete (1)id:当前名称空间下的statement的唯一标识(必须属性) (2)parameterType:传入的参数类型,可以省略
1)#{} 只是替换?,相当于PreparedStatement使用占位符去替换参数,可以防止sql注入2)${} 是进行字符串拼接,相当于sql语句中的Statement,使用字符串去拼接sql;$可以是sql中的任一部分传入到Statement中,不能防止sql注入3)#{} 只是表示占位,与参数的名字无关,如果只有一个参数,会自动对应(多个的话Dao层加@Param注解,${} 也可以这样用)
1)概念 (1)ResultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中 (2)完成高级查询,比如一对一,一对多,多对多2)属性说明 (1)id: resultMap标签的标识 (2)type: 返回值的全限定类名,或类型别名 (3)autoMapping: 值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法3)子元素说明 (1)id : 用于设置主键字段与领域模型属性的映射关系 (2)result: 用于设置普通字段与领域模型属性的映射关系 a. property : 需要映射到JavaBean 的属性名称 b. column : 数据表的列名或者标签别名 c. javaType : 一个完整的类名,属性的java类型 d. jdbcType :JDBC类型 e. typeHandler : 数据库与Java类型匹配处理器 (3)association联合(联合元素用来处理“一对一”的关系) a. 概念 需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler b. 不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载 select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活 resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型 c. 属性 select:指定嵌套SQL,可以是本XML或者其他XML文件中的 fetchType:延迟加载,lazy打开延迟加载;eager积极加载
1)定义可重用的部分,然后
1)if(注意 null和空串‘’ 赋值和判断相等的区别)2)choose when otherwise 3)update中的where update table_name set name = "a" and source = 'superVip' and source != 'superVip' 4)foreach (一般和in一起用) emsType=#{emsType} and goodsOrderNO=#{goodsOrderNo} #{id}
1)sql语句中出现’<’ (1)使用xml中的字符实体 —— < 、> 2) (1)被这个标记所包含的内容将表示为纯文本 (2)比如表示文本内容“a < c”
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。 ps : 有错误的还望各位大佬指正,小弟不胜感激