第一章 如何使用MyBatis?1.导入MyBatis核心包及其依赖包2.配置mybatis.xml文件 (1).配置驱动管理器 (2).配置数据源 (3).配置映射文件 3.书写一个接口,包含将对数据库执行的操作方法 例如: /** * 添加商品信息 * @param goods * @return */ public Integer addGoods(Goods goods);4.配置映射文件(这里是真正书写sql语句的文件) 包含的基本内容有对数据库进行增删改查的SQL语句。 例如: //sql语句 insert into goods (goodsName,price,unit,madeTime,shui) values (#{goodsName},#{price},#{unit},#{date},#{shui}) //#{}表示占位符;${}表示sql串拼接 ... 5.开始执行对数据库的操作 (1).读取配置文件 String resource = "mybatis.xml"; //配置文件的路径名称 InputStream inputStream = Resources.getResourceAsStream(resource); //读取配置文件 (2).获得session工厂,获得session SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); (3).执行 例如: IGoodsDaoMapper goodsDao = session.getMapper(IGoodsDaoMapper.class); goodsDao.insert(Goods goods); (4).session提交 session.commit();/**对数据进行增删改时,一定要记得提交**/ 第二章 查询详解(1)1.在第一章中提到,在对数据库进行查询的时候,我们需要在查询语句中对查询的列名取别名,并且 别名的名称要与java实体类中对应。在本章,我们采用 来对数据库进行基本的查询。 回顾第一章查询代码: //采用取别名的方式 //使用 例如: //主键 ...... //查询语句 采用这种方式进行查询,可以避免每次查询都需要进行取别名的繁琐;并且使用 可以 单独提出,这样如果对一张表进行多次查询的时候,可以使用 的id属性。这样,查询 是不是变得简单多了呢?第三章 查询详解(2)1.在上一章内容中,我们讲到,可以使用 标签来查询,省去了查询时取别名的麻烦。之前 提到的查询都是对一张表进行简单查询。那么,对于两张表,甚至多张表进行查询时,我们往往会遇到 "多对一"或者"一对多"的查询。 例如:多个商品对应一种商品类型或者一种商品类型对应多个商品......2.多对一的查询 方式1: property:实体类中对应的变量名称 column:数据库中对应的列名 javaType:该属性对应的实体类(包+类) select:对应的查询语句id 例如: 方式一的查询流程: 1.首先将goods表中的数据全部查询出来,包括typeId 2.将查询出来的每一个typeId作为参数传入到id="findGoodsTypeById"的 select goods.*,tb_type.* from goods inner join tb_type on goods.typeId = tb_type.id 方式2显然是在sql语句中进行了改进,避免了产生多次查询的情况。 3.一对多的查询 ...... ofType:集合中元素类型 例如: 第四章 查询详解(3)以及动态SQL1.在对一张表进行查询的时候,我们通常会进行模糊查询。 例如: 此处用到了${},而之前我们队参数的传入一直都是#{}。 这里就涉及到了#{}与${}的区别: (1).#{}能够防止SQL注入,而${}不能 在学习过程中,我们发现在一般查询过程中,#{}与${}似乎并没有什么区别,都能查询到我们 想要的结果。 例如: select * from goods where goodsName = #{goodsName} select * from goods where goodsName = '${goodsName}' 但是在动态解析的时候,使用#{}时,会被解析成一个占位符,也就是: select * from goods where goodsName = ? 而${}在动态解析的时候,传入的参数就会被当成一个普通的字符串常量,也就是: select * from goods where goodsName = '哇哈哈' (2).在用${}进行传参的时候,参数变量名必须是parameterType中的属性,并且该属性有对应的 setter()和getter()方法。 在刚才的模糊查询的例子中,我们发现,参数名称为goodsName,而parameterType是Goods实体类 goodsName是Goods实体类中的属性。在这里,如果把goodsName换成name或者其他名称,就会报错。 同样的,加入把parameterType换成其他类型,同样会报相同的错误。因为该类中没有对应的该属性 的setter()和getter()方法。2.动态SQL (1).if判断 例如: 属性: test:if判断的内容,并且test中的变量名称必须是parameterType中的属性,且有对应getter() (2). 循环 例如: insert into tb_type values (default,#{typeName}) 属性: collection:被循环的类型 item:元素名称 separator:分隔符 #{}中的名称必须与item相同,否则报错 其他动态SQL标签可自行去官网查看。 第五章 MyBatis调用存储过程 在实际开发中,我们常常会去调用存储过程,那么在MyBatis中,如何去调用存储过程呢? (1).对数据库进行增删改,且有返回值时,通常使用Map