今天实训第六天,我们学习了mybatis这个数据库框架,虽然说框架的环境搭建非常的繁琐,但是在了解原理和流程之后是非常的舒服的。因为有一个强大的工具被我掌握了,所以今天感觉非常的开心。
首先我们是在springmvc上面搭建的mybatis框架的。所以地基一定要搭建起来。就是在pom.xml写依赖。然后在spring(applicationcontent.xml)容器里面写一个mapper的扫描器,然后在mvc里面写一个controller的扫描器。
然后就是那写mybatis的配置文件,这个配置文件大概分为两个步骤,第一写一个关于sql语句的内容,第二就是写映射内容(spring全局配置mapper映射)
接下来就是详细步骤
1.基于maven的springmvc的框架要搭建起来。

2.通过maven非常爽的依赖管理功能来下载mybatis的依赖。
<!-- 依赖软件包版本 -->
<properties>
<commons-lang.version>2.6</commons-lang.version>
<spring.version>4.1.3.RELEASE</spring.version>
<slf4j.version>1.7.6</slf4j.version>
</properties>
<!-- 配置依赖管理包 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖包 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- ContentNegotiatingViewResolver依赖包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<!-- spring jdbc支持包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<!-- 配置spring 事务管理包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<!-- 数据源 c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-dao</artifactId>
<version>2.0.3</version>
</dependency>
<!-- mybatis所需包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- jstl标签包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
plugin的内容非常重要,可以解决一些bug。见一下上,到时候maven 的tomcat7:run可以运行项目,非常的爽(没写的时候很痛苦)
然后就是spring容器的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- c3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql:///test?characterEncoding=utf-8"/> <property name="user" value="root" /> <property name="password" value="123zsj" /> </bean> <!-- mybatis的SqlSession的工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- mapper扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="mapper的路径"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!-- 创建userLoginService --> <bean id="userLoginService" class="com.farsight.service.impl.UserLoginServiceImpl"></bean> <!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager" ></tx:annotation-driven> <!-- 开启注解 --> <context:annotation-config/> </beans>
注意,数据源的备注哪里需要做相应的更改,不然找不到对应的数据库。
还有mapper的扫描器那里也必须写好路径,不然到时候mapper写了就跟没写一样
还有你自己想注册进spring容器里面的一些类和对象,就比如文中下面的这一句
<bean id="userLoginService" class="com.farsight.service.impl.UserLoginServiceImpl"></bean>
第三步,controller的创建
写一个了之后千万不要忘记
千万不要忘记
千万不要忘记
把这个controller也就是注册器写进我们的mvc容器里面,注意,不是spring容器,是mvc容器
接下来就是我们的开发流程,大体流程是用户发送数据给了controller,然后congtroller又将数据放入service里面
然后service又将数据发给mapper,最后通过mapper的映射关系,就激发了我们的mybatis框架,然后就成功的操作了数据库。
细节如下
写入controller
然后在里面把那个service的接口给导进来,这个实际作用就是把接口的实现类的方法直接调用,
因为我们之前在spring里面注册了接口的实现类,所以在这里我们调用接口的方法也就是调用了实现类的方法。
当我们调用实现类的方法的时候,我们具体的实现类怎么写呢
实现类里具体实现过程就是:将mapper装载进我们的类里,然后直接调用接口的方法,然后实现具体的MySQL语句
然后就成功了。
一开始还不知道这个是怎么实现的。逻辑不过来,后来思考了一下,我的理解如下
我们的service的实现类里面调用装载过来的usermapper接口,然后在大神底层的封装下,我们的mybatis框架直接将usermapper
的抽象方法通过在外面的mapper映射文件里面实现去运行。
一般方法如下,我们先来写一个框架的全局配置文件。这个配置文件里面可以写bean的别名(好处就是可以通过别名,将这个别名传递给下一个xml文件),比如下面这个
<typeAliases>
<typeAlias alias="User" type="com.farsight.pojo.User" />
</typeAliases>
<mappers>
<mapper resource="userMapper.xml" /> <!-- 映射文件 -->
</mappers>
就在这下一个mapper文件xml
写传入数据库的数据库具体的数据和处理的mysql。比如
<mapper namespace="com.farsight.dao.mapper.UserMapper">
<select id="getLoginUser" parameterType="User" resultType="User">
select * from user2 where username = #{username} and password = #{password}
</select>
<insert id="registerUser" parameterType="User">
insert into user2 (username,password) values (#{username},#{password})
</insert>
</mapper>
原文:https://www.cnblogs.com/eyeofbajie/p/12008363.html