2、Spring技术栈-整合Mybatis
来源:互联网 发布:数字摇号软件 编辑:程序博客网 时间:2024/06/09 16:34
在1、Spring技术栈-博客系统基础架构中,我们基本上已经搭建好了博客系统的基本框架,但系系统,是需要链接数据库,和数据库进行数据交换的,所以本文我们将会告诉大家,在一个模块化的项目中,我们如何整合Spring+Mybatis来连接数据库并进行数据交换。
首先我们需要说明的是,我们数据库采用的MySQL。
1、SSM框架必备的依赖和解释
spring-core :spring的核心包,包含spring框架基本的核心工具类,spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。包括asm,cglib以及相关的工具类
spring-orm : spring 整合第三方的 orm 映射支持,如 hibernate 、ibatis、jdo 以及spring的jpa的支持
spring-beans : 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。
spring-context : 这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类;
spring-context-support : spring-context 的扩展支持,用于 MVC 方面;
spring-oxm:spring 对Object/XML 的映射的支持,可以让JAVA与XML之间来回切换;
spring-tx : spring提供对事务的支持,事务的相关处理以及实现类就在这个Jar包中;
spring-jdbc : 这个jar文件包含对Spring对JDBC数据访问进行封装的所有类;
spring-aop : 这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
spring-aspects : 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中;
在Web MVC项目中还需要有一下几个依赖
spring-web : 这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web ApplicationContext 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类,外部依赖spring-context, Servlet API, (JSP API, JSTL,Commons FileUpload, COS);
spring-webmvc : 这个jar 文件包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。
以上的这些是对Spring的依赖,除此之外,系统还需要依赖Mybatis核心包、mybatis/spring包、Mysql数据库链接jar包、dbcp数据源所依赖的一些包,这里我们就不一一列举了,在配置dao层的pom.xml文件时我们会加以说明;
2、父级项目pom.xml配置
在我们上诉的所有依赖中,除了spring-web和spring-webmvc是web项目独有的依赖之外,其他的基本上是每个模块都必须依赖的,而所有模块都需要依赖的jar呢,我们就不用一个一个的配置在不同模块,我们直接配置到父级项目的pom.xml中,子模块直接从父级项目继承就可以了。
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ron.blog</groupId> <artifactId>blog</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>blog</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.5.RELEASE</spring.version> <jdk.version>1.8</jdk.version> <jstl.version>1.2</jstl.version> <junit.version>3.8.1</junit.version> <slf4j.version>1.7.21</slf4j.version> <servlet_version>3.1.0</servlet_version> <mybatis.version>3.4.1</mybatis.version> <mysql.connector.version>6.0.5</mysql.connector.version> <commons_pool_version>1.6</commons_pool_version> <jackson.version>1.9.13</jackson.version> <log4j2_version>2.7</log4j2_version> <dbcp.version>1.4</dbcp.version> </properties> <modules> <module>blog_domain</module> <module>blog_dao</module> <module>blog_service</module> <module>blog_pc</module> <module>blog_facade</module> <module>blog_common</module> <module>blog_api</module> </modules> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- Javax 依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet_version}</version> </dependency> <!-- Spring 依赖 --> <!-- spring的核心包,包含spring框架基本的核心工具类,spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。包括asm,cglib以及相关的工具类 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- spring 整合第三方的 orm 映射支持,如 hibernate 、ibatis、jdo 以及spring的jpa的支持。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- 这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- spring-context 的扩展支持,用于 MVC 方面 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- spring 对Object/XML 的映射的支持,可以让JAVA与XML之间来回切换。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <!-- spring提供对事务的支持,事务的相关处理以及实现类就在这个Jar包中 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- 这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- 这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- spring对JUnit框架的简单封装。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- json数据 --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson.version}</version> </dependency> <!-- LOGGING begin --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2_version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2_version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j2_version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- common-logging 实际调用slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <!-- java.util.logging 实际调用slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <!-- LOGGING end --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>jdk-1.8</id> <activation> <jdk>${jdk.version}</jdk> </activation> <properties> <maven.compiler.source>${jdk.version}</maven.compiler.source> <maven.compiler.target>${jdk.version}</maven.compiler.target> <maven.compiler.compilerVersion>${jdk.version}</maven.compiler.compilerVersion> </properties> </profile> </profiles></project>
3、dao层依赖配置
在我们模块化的应用中,为了更清晰的区分哪些依赖用在那一层,所以呢我们就按照每一层所负责的逻辑,将只有该层才使用的依赖配到该模块。所以我们将和Mybatis、MySQL数据库链接、dbcp数据源相关的依赖都配置在dao层。
<?xml version="1.0"?><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>ron.blog</groupId> <artifactId>blog</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>blog_dao</artifactId> <packaging>jar</packaging> <name>blog_dao</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--依赖blog-domain模块 --> <dependency> <groupId>ron.blog</groupId> <artifactId>blog_domain</artifactId> <version>${project.version}</version> </dependency> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.version}</version> </dependency> <!-- dbcp数据源 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>${dbcp.version}</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>${commons_pool_version}</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>
4、web层依赖配置
除了父级项目的基础依赖之外,web层仅仅只需要配置一下spring-web、spring-webmvc、jstl的依赖就可以了。
<?xml version="1.0"?><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>ron.blog</groupId> <artifactId>blog</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>blog_pc</artifactId> <packaging>war</packaging> <name>blog_pc Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- 添加对Service的依赖 --> <dependency> <groupId>ron.blog</groupId> <artifactId>blog_service</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- Spring 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- jstl依赖 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> </dependencies> <build> <finalName>blog_pc</finalName> </build></project>
到这里,基本上我们整合Mybatis所需要的依赖包基本已经配置完毕,那么接下来我们就开始配置我们的参数。
5、web上下文配置(spring-context)
上一篇文章中,我们在配置web.xml时有提到,web应用程序上下文的初始化参数,我们都配置在classpath下的以spring-context开头的xml文件中,所以我们在resources目录下,新建spring-context.xml文件,写入如下内容:
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd" default-autowire="byName" default-lazy-init="false"> <!-- 采用注释的方式配置bean --> <context:annotation-config /> <!-- 配置要扫描的包 --> <context:component-scan base-package="ron.blog" /> <!-- jdbc配置 --> <context:property-placeholder location="classpath:mybatis/jdbc.properties" /> <!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 --> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 导入Mybatis配置 --> <import resource="classpath:mybatis/spring-mybatis.xml" /></beans>
从配置的内容中我们就可以看到,我们将jdbc的链接参数放到了classpath下的mybatis目录下一个叫jdbc.properties问属性文件中,所以我们需要在对应的目录下面新建对应的文件。
同时我们将Spring Mybatis相关的如事务、切点、切面等相关的内容都独立配置到了一个叫做 spring-mybatis.xml的文件中,也需要在对应的目录下新建一个spring-mybatis.xml文件。
6、jdbc.properties的配置
在jdbc.properties文件中,我们主要配置数据库的驱动名称、数据库连接、用户名、密码即可,其他参数可视具体情况而定。
#(Dev)dataSource.driverClassName=com.mysql.cj.jdbc.DriverdataSource.url=jdbc:mysql://127.0.0.1:3306/ron_intelligence_system(数据库名字,可自行定义)?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=true&allowMultiQueries=true&serverTimezone=Asia/Hong_KongdataSource.username=root(数据库账户)dataSource.password=111111(数据库密码)dataSource.maxActive=20dataSource.initialSize=5dataSource.maxWait=60000dataSource.minIdle=10dataSource.timeBetweenEvictionRunsMillis=60000dataSource.minEvictableIdleTimeMillis=300000dataSource.validationQuery=SELECT 'x'dataSource.testWhileIdle=truedataSource.testOnBorrow=falsedataSource.testOnReturn=falsedataSource.maxOpenPreparedStatements=20dataSource.removeAbandoned=truedataSource.removeAbandonedTimeout=1800dataSource.logAbandoned=true
7、spring-mybatis.xml的配置
在该文件中呢,我们所配置的东西就是和我们的数据库连接、Mybatis的mapper和对应的dao、事务管理器、切面等内容。
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- 数据库基本信息配置 --> <property name="url" value="${dataSource.url}" /> <property name="username" value="${dataSource.username}" /> <property name="password" value="${dataSource.password}" /> <property name="driverClassName" value="${dataSource.driverClassName}" /> <!-- 最大并发连接数 --> <property name="maxActive" value="${dataSource.maxActive}" /> <!-- 初始化连接数量 --> <property name="initialSize" value="${dataSource.initialSize}" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="${dataSource.maxWait}" /> <!-- 最小空闲连接数 --> <property name="minIdle" value="${dataSource.minIdle}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${dataSource.timeBetweenEvictionRunsMillis}" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${dataSource.minEvictableIdleTimeMillis}" /> <property name="validationQuery" value="${dataSource.validationQuery}" /> <property name="testWhileIdle" value="${dataSource.testWhileIdle}" /> <property name="testOnBorrow" value="${dataSource.testOnBorrow}" /> <property name="testOnReturn" value="${dataSource.testOnReturn}" /> <!-- 缓存preparedStatement数量 --> <property name="maxOpenPreparedStatements" value="${dataSource.maxOpenPreparedStatements}" /> <!-- 打开removeAbandoned功能(对于建立时间超过removeAbandonedTimeout的连接强制关闭) --> <property name="removeAbandoned" value="${dataSource.removeAbandoned}" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="${dataSource.removeAbandonedTimeout}" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="${dataSource.logAbandoned}" /> </bean> <!-- mybatis的配置文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:ron/blog/blog_dao/mapper/*/*.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="ron.blog.blog_dao.dao"/> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="search*" propagation="SUPPORTS" read-only="true"/> <tx:method name="query*" propagation="SUPPORTS" read-only="true"/> <tx:method name="*" propagation="REQUIRED" /> <tx:method name="*" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txPointcut" expression="execution(* ron.blog.blog_service..*Service.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/> </aop:config> </beans>
到此为止,Spring和Mybatis的整合基本就完成了,根据我们所配置的内容,我们来写一个简单的例子测试一下。
8、建立数据库和测试数据表
我们先在MySQL新建一个数据库,按照我们的配置文件,我们命名为ron_intelligence_system,然后我们新建一张表,新建表的脚本为:
CREATE TABLE `blog_user_base` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '系统用户ID', `user_login_name` varchar(40) DEFAULT NULL COMMENT '用户登录名', `user_login_password` varchar(200) DEFAULT NULL COMMENT '用户登录密码', `user_realy_name` varchar(40) DEFAULT NULL COMMENT '用户真实姓名', `user_email` varchar(100) DEFAULT NULL COMMENT '用户邮箱', `user_phone` varchar(40) DEFAULT NULL COMMENT '用户手机', `user_position` varchar(100) DEFAULT NULL COMMENT '用户职位', `crt_time` datetime DEFAULT NULL COMMENT '创建用户时间', `crt_user_id` int(11) DEFAULT NULL COMMENT '创建者Id', `crt_user_name` varchar(40) DEFAULT NULL COMMENT '创建者姓名', `crt_ip` varchar(40) DEFAULT NULL COMMENT '创建ip', `last_mid_time` datetime DEFAULT NULL COMMENT '最后一次变更时间', `last_mid_user_id` int(11) DEFAULT NULL COMMENT '最后一次变更id', `last_mid_user_name` varchar(40) DEFAULT NULL COMMENT '最后一次变更姓名', `last_mid_ip` varchar(200) DEFAULT NULL COMMENT '最后一次变更ip', PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
新建好数据表之后,我们随便写入一条数据。
我们测试数据呢,user_login_name写入632815143@qq.com,user_login_password写入0794f55dcaada3f45c9436b7a11dfdaf2cf82176,user_email写入632815143@qq.com,我们测试时根据user_login_name和user_login_password来读取user_email。
9、新建实体和dao
在blog_domain模块中,新建user包,在包中新建类BlogUserBase,BlogUserBase属性包括id、userLoginName、userLoginPassword、userEmail。
在blog_dao模块中,在包ron.blog.blog_dao下新建包dao和包mapper,在dao包中新建一个user包,在包mapper中新建包user
然后在user包中新建接口BlogUserBaseDao,在接口之中写入一个login接口方法,代码如下:
BlogUserBase login(@Param("userLoginName")String userLoginName,@Param("userLoginPassword")String userLoginPassword);
在包mapper中新建包user,在user包中新建BlogUserBaseDao.xml,在该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="ron.blog.blog_dao.dao.user.BlogUserBaseDao"> <resultMap id="userBaseResultMap" type="ron.blog.blog_domain.user.BlogUserBase"> <id column="ID" property="id" /> <result column="user_login_name" property="userLoginName" /> <result column="user_login_password" property="userLoginPassword" /> <result column="user_email" property="userEmail" /> </resultMap> <sql id="Base_Column_List"> ID,user_login_name,user_login_password,user_email </sql> <select id="login" parameterType="map" resultMap="userBaseResultMap"> SELECT * FROM blog_user_base WHERE user_login_name=#{userLoginName} AND user_login_password=#{userLoginPassword} </select></mapper>
好了,到目前为止我们的dao层的代码基本就写完了。
10、编写服务模块代码
在dao模块中的代码写好之后,我们在blog_facade模块中新建一个包user,然后在包中新建一个接口UserBaseFacade
写入如下代码:
public interface UserBaseFacade { /** * @Comment 用户登录接口 * @Author Ron * @Date 2017年8月22日 下午2:55:22 * @return */ Resp login(BlogUserBase user);}
接下来我们在blog_service包中新建user包,在包中新建UserBaseService类。
该类实现接口UserBaseFacade,代码如下:
@Componentpublic class UserBaseService implements UserBaseFacade { @Autowired BlogUserBaseDao blogUserBaseDao; /** * @Comment 用户登录实现 * @Author Ron * @Date 2017年8月22日 下午2:55:37 * @return */ public Resp login(BlogUserBase user) { user = blogUserBaseDao.login(user.getUserLoginName(), user.getUserLoginPassword()); return new Resp(ResCode.SUCCESS,"Hello"+user.getUserEmail()); }}
以上我们就把dao、service都已经写完,那么接下来我们就写一个控制器,然后调用service的login方法,然后显示查询到的useremail到页面上。
11、测试结果
新建BlogController控制器,写入如下代码:
@Controller@RequestMapping("/blog")public class BlogController{ @Autowired UserBaseFacade userBaseService; /** * @Comment 博客列表 * @Author Ron * @Date 2017年8月22日 下午3:54:38 * @return */ @RequestMapping(value={"/list","/"}) public String blogList(HttpServletRequest request) { BlogUserBase user = new BlogUserBase(); user.setUserLoginName("632815143@qq.com"); user.setUserLoginPassword("0794f55dcaada3f45c9436b7a11dfdaf2cf82176"); Resp resp = userBaseService.login(user); request.setAttribute("resp", resp); return "blog/list"; }}
在WEB-INF/view/blog新建一个list.jsp文件,写入如下代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> ${resp.data}</body></html>
至此,我们所有的测试功能已经写完,运行blog_pc,在浏览器中输入 http://localhost:8080/blog_pc/,如果出现如下结果就证明我们的Spring和Mybatis的整合已经成功了。
整个项目源码:https://github.com/Ron-Zheng/blog-system
单独整合Mybatis的源码:http://download.csdn.net/download/zyhlwzy/9947175
- 2、Spring技术栈-整合Mybatis
- MyBatis-----2、MyBatis整合Spring
- springMVC+spring+MyBatis+websocket技术整合
- SSM整合(2): spring 与 mybatis 整合
- SSM整合(2): spring 与 mybatis 整合
- MyBatis 2章 MyBatis与Spring整合
- MyBatis 2章 MyBatis与Spring整合
- MyBatis 2章 MyBatis与Spring整合
- MyBatis 2章 MyBatis与Spring整合
- Mybatis -- Mybatis整合Spring
- 【Mybatis】Mybatis整合spring
- 【Spring+Mybatis】Spring整合Mybatis
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- 字典序排序算法解析
- PHP filter初学
- 【Android】推荐一些学安卓经常浏览的网站
- DIV居中
- Python 面向对象编程(一)
- 2、Spring技术栈-整合Mybatis
- awr报告比较全面的讲解
- solr服务器搭建与mysql数据导入
- SSM框架----使用Generator自动生成代码
- 用py2exe打包Python3.x应用
- 用两个栈实现队列
- 【JavaScript 基础】05 内置顶层函数
- Android逆向系列整理--发表在今日头条
- request.getParameter()与request.setAttribute()的区别