開發環境 :
IDe :iDEA
JDK:1.8
使用的框架技術:Mybtais ,Spring,Spring MVC 數據源選用Dbcp
首先貼上我們的項目結構,很簡單的一個Demo層次分明
當我們使用IDea創建Spring MVC項目時Idea會自動為我們加入Web組件 我們可以看到我們的配置文件並沒有像myeclipse一樣在Src下 ,IDea默認給我們的配置文件放到了Web/web-inf文件夾下
上面這些JAr是我們自己導入的,讓我們來看一下
以下的Jar包為Idea自動為我們下載並且添加到項目中的,在這里不多做闡述
按照Mvc的流程來說項目對應實體結構如下
我們在entity包中創建我們與數據庫相連接,並且指定對應表內字段的一一對應。
數據庫字段如下
通常的執行流程為:Serviceimpl調用和對應Mapper 來實現對數據庫的增刪改查等一系列功能
這里演示了一個簡單的查詢全部,並且使用 El 和JStl將查詢的數據顯示到JSp頁面上,
Mapper
1 package com.mapper; 2 3 import com.entity.User; 4 import org.springframework.stereotype.Repository; 5 6 import java.util.List; 7 @Repository 8 public interface UserMapper {
與下面對應Mapper中的Id向對應 9 List<User> cxall(); 10 }
於是便引入今天的第一個配置,對對應Mapper的操作映射
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "http://mybatis.org/dtd/mybatis-3-mapper.dtd" "mybatis-3-mapper.dtd" >
引入對對應Mapper操作的命名空間,來告訴Mybatis 我們要對哪一個Mapper執行什么樣的操作 <mapper namespace="com.mapper.UserMapper">
簡單查詢,id對應Mapper中的查詢方法名, 返回結果集也是一個User類型的 <select id="cxall" resultType="User"> select * from smbms_user </select> </mapper>
Service:
1 package com.service; 2 3 import com.entity.User; 4 import org.springframework.stereotype.Repository; 5 6 import java.util.List; 7 8 public interface UserService { 9 List<User> cxall(); 10 }
以及Service的實現:
package com.serviceimpl; import com.entity.User; import com.mapper.UserMapper; import com.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl implements UserService {
使用自動注入將UserMapper注入到當前Service的實現中,調用其方法 @Autowired private UserMapper userMapper; @Override public List<User> cxall() { return userMapper.cxall(); } }
controller:
1 package com.web; 2 3 import com.alibaba.fastjson.JSON; 4 import com.entity.User; 5 import com.service.UserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.ResponseBody; 10 11 import java.util.List; 12 @RequestMapping("/user") 13 @Controller 14 public class UserController {
注入Service 調用其子類的實現15 @Autowired 16 private UserService userService; 17
結果返回頁面的Json格式亂碼的問題 18 @RequestMapping(value = "/cx.do",produces = {"text/javascript;charset=UTF-8"}) 19 @ResponseBody 20 public String cx(){ 21 List<User> cxall = userService.cxall(); 22 String JSon= JSON.toJSONString(cxall); 23 return JSon; 24 } 25 }
如上便是這個小Demo的經典三層實現,下面我們來說說為什么通過這么簡單的操作就可以達到我們所要的效果呢?
首先我們來看一下我們的Jdbc配置文件
jdbc.properties
1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.uri=jdbc:mysql://localhost\:3306/smbms?useUnicode\=true&characterEncoding\=utf8 3 jdbc.name=root 4 jdbc.pwd=1234
Log4J.properties
log4j.rootLogger=debug, stdout,logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=jbit.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n org.apache.jasper.servlet.TldScanner.level = FINE
重點在下面,我們看一下Idea自動在為我們配置了什么,我們想當這個項目啟動的時候,就自動為啟動我們SpringMvc的組件,那么我們這個Demo是一個Web工程,並不需要對應的Main方法之類,那我們究竟改怎么做呢?
我們來看一下Web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> 配置上下文參數,在項目啟動的時候自動加載Spring的配置文件 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> 同理,自動加載Mvc配置文件,加載位置是在Web/web-inf/文件夾下,通常我們在Myeclipse中的配置文件是在Src下 ,這里不要搞混淆 <context-param> <param-name>spring</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </context-param>
配置過濾器 <filter> <filter-name>filter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
配置了監聽器 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 配置了前端控制器 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> 對所有訪問為.do的訪問進行攔截處理 <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
Spring配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context.xsd">
加載類路徑下的Jdbc配置文件 9 <context:property-placeholder location="classpath:Jdbc.properties"></context:property-placeholder> 10
配置Dbcp數據源 11 <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> 12 <property name="driverClassName" value="${jdbc.driver}"></property> 13 <property name="url" value="${jdbc.uri}"></property> 14 <property name="username" value="${jdbc.name}"></property> 15 <property name="password" value="${jdbc.pwd}"></property> 16 </bean> 17 配置SqlsessionFactory用來創建Sqlsession 18 <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 19 <property name="dataSource" ref="dataSource"></property>
對該包下的實體類起別名 不需要用全類名的方法要標記 20 <property name="typeAliasesPackage" value="com.entity"></property>
掃描對應的Mapper.xml 需要引入的Mapper.Xml 21 <property name="mapperLocations"> 22 <list> 23 <value>classpath*:com/mapper/UserMapper.xml</value> 24 </list> 25 </property> 26 </bean> 27 配置Mapper掃描,對指定mAooer包下的的Mapper生成對應的實現,並且注入Spring容器 28 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 29 <property name="basePackage" value="com.mapper"></property> 30 </bean> 31 32 </beans>
mvc配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 7 <!--mvc自動配置--> 8 <mvc:annotation-driven/>
掃描對應文件夾下的所有類 開啟注解 9 <context:component-scan base-package="com"></context:component-scan> 10 <!-- 視圖解析器 --> 11 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 12 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 13 <property name="prefix" value="/"/> 14 <property name="suffix" value=".jsp"/> 15 </bean> 16 </beans>
上述有一點需要注意的是:在我們開啟Mvc配置的時候一定要導入Mvc的命名空間,
實例:
項目運行測試:
前台以Json格式返回。沒有進行多余的操作。若有問題敬請大佬指正,想要一起學習交流的歡迎加入Java交流群:682677231