MyBatis框架总结

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() 进行提交,若不不成功,则自动进行回滚

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值