在maven中只需要在pom.xml配置文件中添加如下的依赖,则maven实现自动导入包和相关依赖
1.2 添加核心配置文件org.mybatis mybatis 3.2.1 mysql mysql-connector-java 5.1.26
jdbc.properties
jdbc.username=root jdbc.password=admin jdbc.url=jdbc:mysql:///mybatis jdbc.driverClassName=com.mysql.jdbc.Driver
接着需要添加mybatis的配置文件mybatis-config.xml,在mappers中将需要实现的具体的mapper.xml文件写入
以上是没有使用springboot的方式去实现maven对mybatis的使用,当使用springboot搭建项目的时候,配置就会比较简单,只需要在application.yml中做一些简单的配置就可以使用了
spring:
datasource:
username: root
password: root
url: jdbc:mysql:///auth
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: cn.itsource.domain, cn.itsource.query #给这些包配置别名,使得其中的类都可以小写
mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml #实现接口的配置文件 约定大于配置
通过在applciation.yml配置文件则可以使用mabatis对数据库进行操作。
1.3MybatisUtils由于没有使用spring的框架,因此不能让系统自动创建一些执行sql语句的对象,因此需要手动去创建一个工具类来执行mapper.xml文件中对数据库的操作
public class MyBatisUtils {
private static SqlSessionFactory sessionFactory;
static {
try {
//1.以流的形式读入mybatis-congif.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2.通过io流创建sqlsessionfactory对象
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 3.创建一个方法使用sqlsessing对象
public static SqlSession openSession() {
if (sessionFactory != null) {
return sessionFactory.openSession();
}
return null;
}
}
2.动态SQL
2.1批量插入
批量插入中有一些标签需要注意,colection中是传入参数的类型,如果传入的是数组的话,这里就是Array;如果传入的是集合类型,这里就应该list。seperator,是每次遍历之后就用逗号分隔开,item是给其中的对象取得别名,在后面的sql语句中就可以使用p来取值。
2.2批量删除INSERT INTO product (name,price) VALUES (#{p.name},#{p.price})
批量删除中 open属性是代表以“(”开头然后中间是遍历的值,close是代表以“)”结束。
2.3Mybatis常见标签DELETE FROM product WHERe id IN #{id}
resultType:返回值类型,collections中存放的是list集合或者Array数组类型的,item代表的是取的别名,供后面的sql语句使用。open代表的是SQL语句以“(”开始,以“)”结束。里面是循环遍历的id。
1.type 对应的返回类型,可以是javabean,也可以是其他 2.id,必须是唯一,用于标识这个resultMap的唯一性,在使用在使用resultMap的时候,就是通过id引用 3.extends 继承其他resultMap标签3.结果映射 3.1为什么使用结果映射----------------------------------------------------------------------------------------------------- 1. id 唯一性,注意啦,这个id用于标示这个javabean对象的唯一性, 不一定会是数据库的主键(不要把它理解为数据库对应表的主键) 2. property 属性对应javabean的属性名 3.column 对应数据库表的列名 ----------------------------------------------------------------------------------------------------- 1.result 与id相比,对应普通属性 ----------------------------------------------------------------------------------------------------- 1.constructor 对应javabean中的构造方法 -- Arg 对应构造方法中的id参数 ----------------------------------------------------------------------------------------------------- collection 为关联关系,是实现一对多的关键 1. property 为javabean中容器对应字段名 2. ofType 指定集合中元素的对象类型 3. select 使用另一个查询封装的结果 4. column 为数据库中的列名,与select配合使用-- arg 对应构造方法中的普通参数 -- 当使用select属性时,无需下面的配置 --------------------------------------------------------------------------------------------------------- association 为关联关系,是实现一对一的关键 1. property 为javabean中容器对应字段名 2. javaType 指定关联的类型,当使用select属性时,无需指定关联的类型 3. select 使用另一个select查询封装的结果 4. column 为数据库中的列名,与select配合使用-- 使用select属性时,无需下面的配置 --------------------------------------------------------------------------------------------------------------
结果映射是用于解决字段名和对象属性名不一样的情况,使用结果映射使得可以匹配二者的关系。结果映射还用于关联对象的查询,mybatis不会默认查询出来,所以要使用resultMap来配置表中查出来的值,供其他的SQL语句去使用,一般来说这种情况出现在一对一表查询,或者一对多这些关联查询。
3.2关联映射处理方式在mybatis中提供了两种方式:一种是嵌套查询,另一种是嵌套结果
嵌套结果:使用一条SQL语句查询所有的信息包括本身和关联对象
嵌套查询:发送1+N条SQL
3.2.1 嵌套结果发送一天关联的sql解决问题,映射文件Mapper结果手动封装ResultMap,使用嵌套结果来处理联合查询的子集,这种方式需要将所有的属性自己来。
首先建一个结果映射的resultMap,将数据都自己手动提前装好,后续只需要使用一个sql将两张表联合到一起进行查询就可以了。
3.2.2 嵌套查询嵌套查询,需要将部分的SQL先写完,然后在结果映射的时候在将select引用过来,这样在最后查询的时候就只需要查询resultmap的类型就可以了
综上来说,嵌套结果的sql语句是诙谐的比较完全,而嵌套查询的sql语句是有多条,并且几乎都是在resultMap中完成的。
3.2.3注意我们一般推荐大家使用嵌套查询,因为从性能上来考虑,大部分时间使用的都是嵌套查询,而且嵌套结果的方案是无法做真分页的。
在sql语句中也有一些属性值得注意,id和result都可以表示某个字段从表到类之间的映射,区别就是,id表示这个字段是key,property这个是类中属性的名称,column中的值则是对应的表字段的名字,这个是不能乱写的,association表示一对一的关系,collection表示一对多的关系。



