Spring介紹: spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。然而, Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java 應用都可以從 Spring 中受益。 簡單來說, Spring 是一個輕量級的控制反轉(IoC ...
Spring介紹:
spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。然而, Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java 應用都可以從 Spring 中受益。 簡單來說, Spring 是一個輕量級的控制反轉(IoC )和麵向切麵( AOP )的容器框架。
SpringMVC介紹
Spring MVC 屬於 SpringFrameWork 的後續產品,已經融合在Spring Web Flow 裡面。 Spring MVC 分離了 控制器 、模型 對象 、分派器以及處理程式對象的角色,這種分離讓它們更容易進行定製。MyBatis介紹
MyBatis 本是 apache 的一個開源項目 iBatis , 2010 年這個項目由apache software foundation 遷移到了 google code ,並且改名為 MyBatis 。MyBatis 是一個基於 Java 的 持久層 框架。 iBATIS 提供的 持久層 框架包括SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及結果集的檢索。 MyBatis 使用簡單的 XML 或註解用於配置和原始映射,將介面和 Java 的 POJOs ( Plain Old Java Objects ,普通的 Java 對象)映射成資料庫中的記錄。 首先不是maven架構整合的 SSM 框架
創建資料庫、表db_zsl t_user user_t【最下麵有sql語句】
1.項目整體結構
2.添加相關jar 包
3.項目整體結構出來了
4.創建model【User】
[java] view plain copy
- package com.lyt.model;
- /**
- * 用戶
- * @author
- *
- */
- public class User {
- private int id;
- private String userName;
- private String age;
- @Override
- public String toString() {
- return "User [id=" + id + ", age=" + age + ", userName=" + userName
- + "]";
- }
- public User(){
- super();
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public User(int id, String age, String userName) {
- super();
- this.id = id;
- this.age = age;
- this.userName = userName;
- }
- }
5.創建DAO介面【在mybatis中 mapper就相當於dao】
[java] view plain copy
- package com.lyt.mapper;
- import java.util.List;
- import com.lyt.model.User;
- /**
- * 做為 DAO的介面
- * @author
- */
- public interface UserMapper {
- void save(User user);
- boolean update(User user);
- boolean delete(int id);
- User findById(int id);
- List<User> findAll();
- }
- 5.創建DAO介面【在mybatis中 mapper就相當於dao】
- package com.lyt.mapper;
- import java.util.List;
- import com.lyt.model.User;
- /**
- * 做為 DAO的介面
- * @author */
- public interface UserMapper {
- void save(User user);
- boolean update(User user);
- boolean delete(int id);
- User findById(int id);
- List<User> findAll();
- }
6.實現dao介面【mybatis中就是UserMapper.xml文件】
[python] view plain copy- <?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">
- <!--
- namespace:必須與對應的介面全類名一致 UserMapper.java
- id :必須與對應介面的某個對應的方法名一致即必須要和UserMapper.java介面中的方法同名。
- -->
- <mapper namespace="com.lyt.mapper.UserMapper">
- <insert id="save" parameterType="User">
- insert into t_user(user_name,user_age) values(#{userName},#{age})
- </insert>
- <update id="update" parameterType="User">
- update t_user set user_name=#{userName},user_age=#{age} where user_id=#{id}
- </update>
- <delete id="delete" parameterType="int">
- delete from t_user where user_id=#{id}
- </delete>
- <!-- mybsits_config中配置的alias類別名,也可直接配置resultType為類路徑 -->
- <select id="findById" parameterType="int" resultType="User">
- select user_id id,user_name userName,user_age age from t_user where user_id=#{id}
- </select>
- <select id="findAll" resultType="User">
- select user_id id,user_name userName,user_age age from t_user
- </select>
- </mapper>
這裡對這個xml文件作幾點說明:
1、namespace必須與對應的介面全類名一致。
2、id必須與對應介面的某個對應的方法名一致即必須要和UserMapper.java介面中的方法同名。
7.mybatis與Spring整合【spring-common.xml】放在src的根目錄下
對於Mybatis和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:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context" 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/context
- http://www.springframework.org/schema/context/spring-context-4.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
- <!-- Mybatis和Spring的整合 -->
- <!-- 1. 數據源 : DriverManagerDataSource -->
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost:3306/db_zsl" />
- <property name="username" value="root" />
- <property name="password" value="root" />
- </bean>
- <!--
- 2. mybatis的SqlSession的工廠: SqlSessionFactoryBean dataSource:引用數據源
- MyBatis定義數據源,同意載入配置
- -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"></property>
- <property name="configLocation" value="classpath:mybatis-config.xml" />
- </bean>
- <!--
- 3. mybatis自動掃描載入Sql映射文件/介面 : MapperScannerConfigurer sqlSessionFactory
- basePackage:指定sql映射文件/介面所在的包(自動掃描)
- -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.lyt.mapper"></property>
- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
- </bean>
- <!--
- 4. 事務管理 : DataSourceTransactionManager dataSource:引用上面定義的數據源
- -->
- <bean id="txManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 5. 使用聲明式事務
- transaction-manager:引用上面定義的事務管理器
- -->
- <tx:annotation-driven transaction-manager="txManager" />
- </beans>
- 8.mybatis配置文件【mybatis-config.xml】放在src目錄下
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <!-- 實體類,簡稱 -設置別名 -->
- <typeAliases>
- <typeAlias alias="User" type="com.lyt.model.User" />
- </typeAliases>
- <!-- 實體介面映射資源 -->
- <!--
- 說明:如果xxMapper.xml配置文件放在和xxMapper.java統一目錄下,mappers也可以省略,因為org.mybatis.spring.mapper.MapperFactoryBean預設會去查找與xxMapper.java相同目錄和名稱的xxMapper.xml
- -->
- <mappers>
- <mapper resource="com/lyt/mapper/userMapper.xml" />
- </mappers>
- </configuration>
-
配置log4j.properties
- ### set log levels ###
- log4j.rootLogger = info , Console , D
- #Console
- log4j.appender.Console=org.apache.log4j.ConsoleAppender
- log4j.appender.Console.layout=org.apache.log4j.PatternLayout
- log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
- log4j.logger.java.sql.ResultSet=INFO
- log4j.logger.org.apache=INFO
- log4j.logger.java.sql.Connection=INFO
- log4j.logger.java.sql.Statement=INFO
- log4j.logger.java.sql.PreparedStatement=INFO
- #output2file
- log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
- log4j.appender.D.File = D\:/logs/log.log
- log4j.appender.D.Append = true
- log4j.appender.D.Threshold = INFO \#\# \u00E8\u00BE\u0093\u00E5\u0087\u00BAinfo\u00E7\u00BA\u00A7\u00E5\u0088\u00AB\u00E4\u00BB\u00A5\u00E4\u00B8\u008A\u00E7\u009A\u0084\u00E6\u0097\u00A5\u00E5\u00BF\u0097
- log4j.appender.D.layout = org.apache.log4j.PatternLayout
- log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
10.整合Springmvc
配置【spring-mvc.xml】放在src根目錄下
- <?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"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-4.0.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
- <!-- 註解掃描包 -->
- <context:component-scan base-package="com.lyt.controller" />
- <context:component-scan base-package="com.lyt.service" />
- <!-- 開啟註解 -->
- <mvc:annotation-driven />
- <!--
- 配置靜態資源,直接映射到對應的文件夾,不被DispatcherServlet處理,3.04新增功能,需要重新設置spring-mvc-3.0.xsd
- -->
- <mvc:resources mapping="/img/**" location="/img/" />
- <mvc:resources mapping="/js/**" location="/js/" />
- <mvc:resources mapping="/css/**" location="/css/" />
- <mvc:resources mapping="/html/**" location="/html/" />
- <!-- 定義跳轉的文件的前尾碼 ,視圖模式配置-->
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <!-- 這裡的配置我的理解是自動給後面action的方法return的字元串加上首碼和尾碼,變成一個 可用的url地址 -->
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- </beans>
- 11.配置web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <!-- 載入Spring容器配置 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 設置Spring容器載入所有的配置文件的路徑 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <!-- <param-value>classpath:config/spring-*.xml</param-value> -->
- <param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>
- </context-param>
- <!-- 配置SpringMVC核心控制器 -->
- <servlet>
- <servlet-name>springMVC</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <!-- 配置初始配置化文件,前面contextConfigLocation看情況二選一 -->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>
- </init-param>
- <!-- 啟動載入一次 -->
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!--為DispatcherServlet建立映射 -->
- <servlet-mapping>
- <servlet-name>springMVC</servlet-name>
- <!-- 此處可以可以配置成*.do,對應struts的尾碼習慣 -->
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <!-- 防止Spring記憶體溢出監聽器 -->
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
- <!-- 解決工程編碼過濾器 -->
- <filter>
- <filter-name>encodingFilter</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>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- 12.建立service以及service實現【UserService.java】
- package com.lyt.service;
- import java.util.List;
- import com.lyt.model.User;
- public interface UserService {
- void save(User user);
- boolean update(User user);
- boolean delete(int id);
- User findById(int id);
- List<User> findAll();
- }
【UserServiceImpl.java】
- package com.lyt.service.impl;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.lyt.mapper.UserMapper;
- import com.lyt.model.User;
- import com.lyt.service.UserService;
- @Service
- @Transactional
- // 此處不再進行創建SqlSession和提交事務,都已交由spring去管理了。
- public class UserServiceImpl implements UserService {
- @Resource
- private UserMapper mapper;
- /**
- * 根據 id 刪除 數據
- */
- public boolean delete(int id) {
- return mapper.delete(id);
- }
- /**
- * 查詢User的全部數據
- */
- public List<User> findAll() {
- List<User> findAllList = mapper.findAll();
- return findAllList;
- }
- /**
- * 根據 id 查詢 對應數據
- */
- public User findById(int id) {
- User user = mapper.findById(id);
- return user;
- }
- /**
- * 新增數據
- */
- public void save(User user) {
- mapper.save(user);
- }
- /**
- * 根據 id 修改對應數據
- */
- public boolean update(User user) {
- return mapper.update(user);
- }
- }
13.建立Controller【UserController.java】
- <span style="font-size:14px;">package com.lyt.controller;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import com.lyt.model.User;
- import com.lyt.service.UserService;
- @Controller
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private UserService userService;
- /**
- * 獲取所有用戶列表
- * @param request
- * @return
- */
- @RequestMapping("/getAllUser")
- public String getAllUser(HttpServletRequest request,Model model){
- List<User> user = userService.findAll();
- model.addAttribute("userList", user);
- request.setAttribute("userList", user);
- return "/allUser";
- }
- /**
- * 跳轉到添加用戶界面
- * @param request
- * @return
- */
- @RequestMapping("/toAddUser")
- public String toAddUser(){
- return "/addUser";
- }
- /**
- * 添加用戶並重定向
- * @param user
- * @param request
- * @return
- */
- @RequestMapping("/addUser")
- public String addUser(User user,Model model){
- userService.save(user);
- return "redirect:/user/getAllUser";
- }
- /**
- *編輯用戶
- * @param user
- * @param request
- * @return
- */
- @RequestMapping("/updateUser")
- pu