Mybatis连接数据库

Mybatis

1、普通项目搭建过程

  1. 导入jar包

  2. 创建mybatis的核心(全局)配置文件,并配置

  3. 创建映射文件,并配置

  4. 创建mapper接口,实现两个绑定

    1. 接口权限定名也和映射文件namespace保持一致
    2. 接口中的方法名和sql语句的id保持一致
  5. 获取mybatis操作数据库的会话对象sql

  6. 测试

    1. 首先获取sqlsessionfactory对象

      //mybatis使用的第一步,获取sqlsessionfactory对象
      String resource = "mybatis-config.xml";
      InputStream inputStream = Resources.getResourceAsStream(resource);
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
    2. 获取sqlsession

      	//既然有了sqlsessionfactory,顾名思义,我们就可以从中获得sqlsession中的实例了
          //sqlsession完全包含了面向数据库执行sql命令所需得所有方法。
      public static SqlSession getSqlSession(){
         SqlSession sqlSession =sqlSessionFactory.openSession();
         return sqlSession;
      }
      

      写测试方法测试

        @Test
          public void selectAll(){
      //        第一步首先获取sqlsession对象
             SqlSession sqlSession= MybatisUtils.getSqlSession();
      //       执行sql
              UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
              List<User> userList= userMapper.getUserList();
              for (User user:userList) {
                  System.out.println(user.toString());
              }
      //        关闭链接
              sqlSession.close();
          }
      

2、SpringBoot整合Mybatis

搭建过程

  1. 导入jar包

    有段mysql,dbcp,mybatis,springboot

  2. 配置springboot的配置文件

    spring在整合mybatis经历的步骤

    1. 创建数据源对象 BasicDataSource 注入连接相关参数

    2. 创建SQLSessionFactory,注入数据源对象,mapper文件所在的位置,起别名

      #起别名
      mybatis.type-aliases-package=com.as.pojo
      #配置文件的位置
      mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
      
    3. 创建Dao,MapperScannerConfiger,注入dao接口所在的包

      application.properties文件配置如下代码

    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.url=jdbc:mysql://localhost:3306/as?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    #整合mybatis
    mybatis.type-aliases-package=com.as.pojo
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
    

    开发步骤

    1. 建表
    2. 开发实体类
    3. 创建dao接口
    4. 创建mapper文件,实现dao
    5. 启动测试

当mybatis实现多表联查时候,xml配置文件的编写如下面配置

一、使用resultMap关联单个对象(N+1方式——先查询出某表的全部信息,再根据这个表的信息查询另一个表的信息)

    <select id="selStu" resultMap="stuMap">
        select * from student
    </select>

    <resultMap id="stuMap" type="student">
        <!--主键使用id标签配置映射关系,其余使用result标签配置映射关系-->
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
        <result property="tid" column="tid"></result>
        <!--如果关联一个对象,使用association,关联集合,则是使用collection-->
        <association property="teacher" select="com.mapper.StuMapper.selById" column="tid"></association>
    </resultMap>
    
    <select id="selById" resultMap="teacher" parameterType="int">
        select * from teacher where id=#{0}
    </select>

需要注意的有两点:

  1. 在主键配置的时候用id标签,其他的使用result标签配置,外键也用result

  2. 外键如果关联的是一个对像,要使用association标签,如果关联的是一个集合那么使用的标签就是collection。

    assocication:标签

    collection:收集

  3. result标签中property值得是实体类中的字段 ,column的值值得是数据库中的字段。

二、使用resultMap关联单个对象(联合查询方式)

   <resultMap type="Student" id="stuMap1">
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <result column="age" property="age"/>
        <result column="tid" property="tid"/>
        <association property="teacher"
                     javaType="Teacher">
            <id column="tid" property="id"/>
            <result column="tname" property="name"/>
        </association>
    </resultMap>
    <select id="selAll1" resultMap="stuMap1">
         select s.id sid,s.name sname,age age,t.id tid,t.name tname FROM student s left outer join teacher t on s.tid=t.id
    </select>

两表联查的xml中sql的配置如上面的代码。

三、使用resultMap关联集合对象(N+1方式)

 <select id="selByTid" parameterType="int" resultType="student">
         select * from student where tid=#{0}
    </select>
    <resultMap type="teacher" id="mymap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <collection property="list" select="com.mapper.StudentMapper.selByTid" column="id"></collection>
    </resultMap>
    <select id="selAll" resultMap="mymap">
         select * from teacher
    </select>

四、使用resultMap关联集合对象(联合查询方式)

    <resultMap type="teacher" id="mymap1">
        <id column="tid" property="id"/>
        <result column="tname" property="name"/>
        <collection property="list" ofType="student">
            <id column="sid" property="id"/>
            <result column="sname" property="name"/>
            <result column="age" property="age"/>
            <result column="tid" property="tid"/>
        </collection>
    </resultMap>
    <select id="selAll1" resultMap="mymap1">
       select t.id tid,t.name tname,s.id sid,s.name sname,age,tid from teacher t LEFT JOIN student s on t.id=s.tid
    </select>

五、使用AutoMapping关联单个对象

   <select id="selAll" resultMap="teacher">
        select t.id `teacher.id` t.name `teacher.name`,s.id id,s.name name,age,tid from student s left join teacher t on t.id=s.id
    </select>

@Param的作用

@Param:用来bai在DAO层中声明参数。例:

List selectByUserIdAndOffset(@duParam(“userId”) int userId, @Param(“offset”) int offset, @Param(“limit”) int limit);

java中@表示注解,解释一个方法,类,zhi属性的作用dao

上一篇:MyBatis:一对多和多对一


下一篇:instanceof和类型转换