实训第六天(mybatis)

今天实训第六天,我们学习了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