MyBatis总结
1、mapper文件中的namespace尽量不要用别名,要用全类扩展名
2、MyBatis ORM映射过程
(1)、先创建表
(2)、创建实体类
(3)、写MyBatis配置文件 mybatis-config.xml文件
(4)、创建mapper接口,等价于dao接口
(5)、创建xxxmaper.xml文件,并在mybatis-config.xml文件中注册该文件
(6)、测试类
注:1、mybaits-config.xml文件主要用于配置连接数据库,以及注册
2、mapper.xml文件用于执行sql操作,等价于daoImpl
3、mapper文件中绑定参数的方式
(1)、通过参数下标绑定
args0,args1,param1,param2
(2)、通过map集合绑定
在接口中的方法的参数中:Map map
在mapper.xml文件中通过map的key值获取map中的值
在测试类中对map进行实例化与赋值操作
(3)、通过对象绑定
在mapper.xml文件中通过对象的属性获得对应的值
(4)、注解参数绑定(推荐
)
在接口的方法中通过 @param(“别名”) 绑定参数
在mapper.xml文件中通过注解定义的别名获取参数
4、模糊查询
在mapper.xml文件中,通过 like concat(’%’,值,’%’) 进行sql语句连接,进行模糊查询
5、ResultMap映射
<resultMap id="id名" type="返回值类型">
<id column="列名" property="实体对象名"/>
<result column="列名" property="实体对象名"/>
</resultMap>
在mapper.xml文件中将resultType换成resultMap="id名"即可
注:1、type的值必须为实体类的全类扩展名
2、为主键,用于标识数据库的表,且必须在第一行
3、result必须写全
4、column的值最好为大写,sql查询时效率更高一点
6、主键回填
在mapper.xml文件中的insert | update | delete代码块中加入selectKey代码块
<insert id="方法名" resultType="" parameterType="">
<selectKey id="id名" keyColum="数据库列名" keyProperty="实体属性对象名" order="回填时间"/AFTER(sql执行结束后回填) resultType="返回值类型">
</selectKey>
sql语句
</insert>
7、sql语句块插入
在mapper.xml文件中的sql语句,若某一段过长且重复出现,可定义一个sql代码块
<sql id="id值">
sql语句
</sql>
<select id="方法名" parameterType="参数类型" resultType="返回值类型">
sql语句
<include id="id值"/>
sql语句
</select>
8、mybatis事务
mybatis默认setAutoCommit(false),因此进行 “增删改” 操作时,需要在调用处手动commit()或rollback()
9、SqlSession会话
InputStream is=Resourcew.getResourcesAsStream("mybatis-config.xml");
SqlSessionFactory build=new SqlSessionFactoryBuilder().build();
SqlSession session=build.openSession();
Mapper mapper=session.getMapper(Mapper.class);//mapper接口的类对象,通过反射调用
返回值=mapper.方法();
10、一对多,多对一联系 (显示查询)
(1)、一对多
将实体对象中的外键封装为对应类型的***集合***,不再定义单纯的外键,从而查询时可直接查出外键的所有信息
<resultMap id="id值" type="返回值类型">
<id column="列名" property="属性名"/>
<result colunm="列名" property="属性名"/>
<collection property="属性名" ofType="返回值类型">
<id column="列名" property="属性名"/>
<result colunm="列名" property="属性名"/>
</collection>
</resultMap>
(2)、多对一
将实体对象中的外键封装为对应类型的***对象***,不再定义单纯的外键,从而查询时可直接查出外键的所有信息
<resultMap id="id值" type="返回值类型">
<id column="列名" property="属性名"/>
<result column="列名" property="属性名"/>
<association property="属性名" javaType="返回值类型">
<id column="列名" property="属性名"/>
<result column="列名" property="属性名"/>
</association>
</resultMap>
在sql语句中用多表联查进行查询操作
11、多对多
由于数据库中没有多对多联系,所以将两张表转换为三张表,转换为两个一对多联系,第三张表中为两张表的主键
12、MyBatis 分页
通过 PageHelper 类进行分页
导入PageHelper依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
在 mybaits.xml 文件中加入 PageHelper 插件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="res/db.properties"/>
<!-- 添加分页插件配置-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapping/CustomMapper.xml"/>
<mapper resource="mapping/CanguanMapper.xml"/>
<mapper resource="mapping/DeptMapper.xml"/>
<mapper resource="mapping/FilmInfoMapper.xml"/>
</mappers>
</configuration>
在ServiceImpl中使用PageHelper插件 拦截原有的sql指令,将其改造成带有分页特征得sql指令,再转交下一步执行
public class DeptServiceImpl implements DeptService {
@Override
public List<Dept> findDeptByPage(int currentPage, int pageSize) {
DeptMapper mapper = MybatisUtil.getSession().getMapper(DeptMapper.class);
// 使用PageHelper插件 拦截原有的sql指令,将其改造成带有分页特征得sql指令,再转交下一步执行
PageHelper.startPage(currentPage,pageSize);
List<Dept> depts = mapper.findDeptsBypage();
MybatisUtil.closeSession();
return depts;
}
}
13、事务
在Mybaits中 默认 AutoCommit(false) ,即默认开启事务
通过 SqlSession.commit() 进行提交,若不不成功,则自动进行回滚