• 实训第六天(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>

  • 相关阅读:
    Quick Start WCF 4.0 RESTful Service Setup
    (面向c#开发人员) 编写javascript的好习惯六 for 表达式
    复习HTTP 14.4 HTTP Header AcceptLanguage
    visual studio 2010 中的 javascript 智能提示
    NewSlot and ReuseSlot
    复习HTTP 14.1 HTTP Header Accept (RFC 2616)
    (面向c#开发人员) 编写javascript的好习惯九 匿名自执行函数
    JQuery Template Engine 简介 1
    jquery 教程
    微博划词转发
  • 原文地址:https://www.cnblogs.com/eyeofbajie/p/12008363.html
Copyright © 2020-2023  润新知