springMvc整合mybatis和mybatis 的dao层

时间:2022-10-24 22:02:38

springMvc整合mybatis

1.1 pom注入依赖
<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!--这个是日志文件,用来优化mybatis的-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
      <!-- junit是用来测试dao层的-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
1.2 配置mybatis_config.xml文件

  这个文件要配置在resources目录下。 springMvc整合mybatis和mybatis 的dao层 配置内容

<?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>
    <settings>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true" />
        <!--是否开启积极懒加载,false 按需加载 ,默认是true-->

        <setting name="aggressiveLazyLoading" value="false" />

        <!--开启二级缓存 总开关-->
        <setting name="cacheEnabled" value="true" />
    </settings>

    <typeAliases>
        <!-- <typeAlias type="net.seehope.mybatis.pojo.User" alias="user" /> -->
        <!--批量别名 首字母大小写都行-->
        <package name="net.seehope.mybatis.pojo" />
    </typeAliases>
    
    <environments default="development">
        <environment >
            <!--配置JDBC事务控制,由mybatis 管理-->
            <transactionManager type="JDBC"/>
            <!--默认使用dbcp连接池-->
            <!--这儿value要使用自己的数据库,我这里是使用了配置文件-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
        <!-- <environment >
            配置JDBC事务控制,由mybatis 管理
            <transactionManager type="JDBC"></transactionManager>
            默认使用dbcp连接池
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/spring_jdbc" />
                <property name="username" value="root" />
                <property name="password" value="qhxj,YRAN941211" />
            </dataSource>
        </environment>
 -->
    </environments>
</configuration>

mybatis 的dao层

1.1 dao层

  dao层就是使用Sql语句,或者就是拼接sql语句操作数据库,但在spring框架中我们可以通过dao层映射的操作去省去传统Jdbc的一些步骤,像dao层的实例使用。

1.2 实现

mybatis对于dao层的实现,采用了一种代理开发模式,我们可以通过自己编写的Mapper接口 (以前的dao接口),然后mybatis可以通过接口去创建相应动态代理对象,在代理对象上实现相应的方法。

   首先我们要创建对应的接口,例如这里我创建一个userMapper接口

public interface UserMapper {
//这个接口中有一个添加用户的方法,也可以写多个。
    int addUser();
}

   然后我们要去配置相应的配置文件在resources目录下。基本样式如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC " -//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:此时用mapper代理方式,它的值必须等于对应mapper接口的全限定名  -->
<!--namespace的名字就是java目录后一级,mapper里面写相应的sql语句-->
<mapper namespace="com.example.ktp.mapper.UserMapper">
     <!--语句的id指向接口中的方法名-->
     <insert >
         insert into ktp_user(name,password) values ("ss","ssssss");
     </insert>
     <!--select语句必须要有返回类型,resultType 或 resultMap-->
     <select  resultType="UserMapper">
        
    </select>
</mapper>

   这样我们就写好了一个基础的dao,但如何去检验呢,就需要junit

1.3 测试

   测试文件我们要写在test目录下,我们通过加载配置文件,和去创建一个虚拟的测试实类. 例如:

import com.example.ktp.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class test_user_mapper {
  @Test
 public void testUser() throws IOException {
       InputStream is= Resources.getResourceAsStream("mybatis_config.xml");
       //通过SqlSessionFactoryBuilder去构建SqlSessionFactory
      SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
      //再通过SqlSessionFactory和配置文件去构建SqlSession
      SqlSessionFactory sqlSessionFactory=builder.build(is);
       //Sqlsession文件充当java程序和数据库的桥梁
      SqlSession sqlSession=sqlSessionFactory.openSession(true);
      //Sqlsession文件通过接口的class文件去创建类
      UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
      //使用这个方法,返回为1,则成功了
      int t=userMapper.addUser();
      System.out.println("Result: "+t);
  }
}

总而言之,mybatis很大程度上的减少了我们的代码量