mybatis框架

1.SSH三大框架:搭建WEB项目的基础
1)SpringMVC:
解决了:
优化页面跳转
优化参数获取
封装了基于反射的接口访问,不需要去写BaseServlet也不需要在web.xml中配置多个控制器。

2)Spring:
实现了:
IOC实现 自动化扫描与装载类对象
切面化编程(响应)

3)mybatis:ORM(Object Relational Mapping)框架:对象关系
实现了:
对数据库的访问,执行sql语句
建立了实体类与关系型数据库之间数据表的映射关系

2.对MyBatis的解释:
1)每一个MyBatis的应用程序都以一个SqlsessionFactory对象的实例为核心
2)SqlsessionFactory是线程安全的,SqlsessionFactory一旦被创建,在应用执行期间都存在,SqlsessionFactory在应用执行期间不需要重复创建多次,建议使用单例模式。
3)sqlSessionFactory是创建SqlSession的工厂。
sqlSession是mybatis的关键对象,是执行持久化操作的对象,类似于JDBC中的Connection。
sqlSession是应用程序与持久层之间执行交互操作的一个单线程对象,也是mybatis执行持久化操作的关键对象。
sqlSession对象完全包含以数据库为背景的的所有执行sql操作的方法(sqlsession可以做JDBC中preparedStatement对象的事情),他的底层封装了JDBC连接(sqlsession可以做DBHelper中Connection对象的事情),可以用sqlsession实例来直接执行被映射的sql语句。

3.MyBatis框架结构
1)pom.xml配置文件

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- mybatis核心包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <!-- mybatis集成spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <!-- mysql驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>
    <!-- 导入dbcp数据库连接池的依赖,用来在spring-mybatis.xml中配置数据库 -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>

    <!--j2ee相关包 servlet、jsp、jstl-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    
<build>
    <finalName>spring-mvc-demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

2)spring.xml配置文件

<!--myBatis配置-->
    <!--1.引入jdbc配置文件-->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>
    <!--2.配置数据源-数据库连接池   关联jdbc.properties配置文件中的信息-->
    <bean id="dbSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 最大空闲连接数 -->
        <property name="maxIdle" value="${maxIdle}"/>
        <!-- 初始化连接数 -->
        <property name="initialSize" value="${initialSize}"/>
        <!--最大连接等待时间,连接超时时间 单位:ms-->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>
    <!--3.spring和myBatis整合  通过spring来管理MyBatis的SqlSessionFactory会话工厂 -->
    <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定数据库连接池引用 -->
        <property name="dataSource" ref="dbSource" />
        <!-- 引入mybatis配置文件 从路径可以看出,mybatis.xml 和spring.xml同级-->
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <!-- 自动扫描mapping.xml文件 -->
        <!--<property name="mapperLocations" value="classpath:mapper/*.xml"></property>-->
    </bean>
    <!--sqlSession模板对象,sqlSession可以实现数据库连接以及包含所有执行SQL操作的方法-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="ssf" />
    </bean>

3)mybatis.xml:mybatis配置文件

<?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>
    <!--关联  mapping文件(ORM对象关系映射文件)路径配置 -->
    <mappers>
        <mapper resource="mapper/StaffMapper.xml" />
    </mappers>

</configuration>

4)mapper.StaffMapper.xml配置文件

<?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">
<mapper namespace="com.st.dao.IStaffDao"><!--namespace属性关联dao层-->
    <!--orm 对象和数据表之间的映射关系-->
    <resultMap id="baseMap" type="com.st.model.Staff">
        <!--
        column 指定数据表字段
        property 指定类属性
        jdbcType 指定数据类型 int-INTEGER string-VARCHAR
        -->
        <result column="staff_id"         property="staffId"        jdbcType="INTEGER"/>
        <result column="staff_name"       property="staffName"      jdbcType="VARCHAR"/>
        <result column="staff_phone"      property="staffPhone"     jdbcType="VARCHAR"/>
    </resultMap>

    <!--
    parameterType 参数类型
    resultMap 结果集映射 对应的是resultMap.id
    -->
    <!--namespace属性关联dao层--><!--指定关联Dao层queryOne方法,参数为Integer类型-->
    <select id="queryOne" parameterType="java.lang.Integer" resultMap="baseMap">
        SELECT * FROM staff_info WHERE staff_id = #{staffId}
    </select>

</mapper>

5)jdbc.properties配置文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?serverTimezone=GMT%2B8&allowMultiQueries=true
username=root
password=123456

#初始化连接数
initialSize=0
maxActive=20
#最大空闲连接数
maxIdle=20
minIdle=1
#进行数据库连接的最长等待时间
maxWait=60000

6)model /dao /service /controller层

//Dao层实现:
@Repository
public class StaffDao implements IStaffDao {
    @Autowired
    private SqlSession sqlSession;
    @Override
    public Staff queryOne(Integer staffId) {//跟StaffMapper的select标签关联
        /*selectOne(mapper.namespace,params)*/
        /*sqlsession实例对象执行sql语句*/
        return sqlSession.selectOne("com.st.dao.IStaffDao.queryOne",staffId);
    }
}

上一篇:vue-quill-editor自定义工具栏、确定光标位置、插入内容。


下一篇:Spring Boot配置类处理