因為工作上用到spring + strtus2 + mybatis ,所以開始學習下這個框架。
這里用到的是MySQL數據庫
首先從web.xml 開始
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
這里引用了struts 和spring的配置文件
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="myPackage" extends="struts-default" > <action name="login" class="com.test.action.LoginAction"> <result name="success">/success.jsp</result> <result name="error">/errer.jsp</result> </action> </package> </struts>
applicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!--配置數據源屬性文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>/WEB-INF/configs/sqlServer.properties</value> </property> </bean> <!--配置數據源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>${jdbc.driver}</value> </property> <property name="url"> <value>${jdbc.url}</value> </property> <property name="username"> <value>${jdbc.user}</value> </property> <property name="password"> <value>${jdbc.pwd}</value> </property> </bean> <!-- 配置sessoin工廠 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis.xml" /> <!-- <mappers> <mapper resource="com/test/sqlMapper/loginMapper.xml"/> </mappers> 這里動態的加載 xml文件,就不用手動在 :mybatis.xml 里面寫了這里加載的時候是作為session工廠一起進行加載--> <property name="mapperLocations" value="classpath:com/test/sqlMapper/*Mapper.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <bean id="loginDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- 用上面直接指定接口位置--> <property name="mapperInterface" value="com.test.dao.ILoginDao"/> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <!-- <bean id="loginAction" class="com.test.action.LoginAction"> <property name="loginDao" ref="loginDao"></property> </bean> --> </beans>
sql的配置文件
WEB-INF/configs/sqlServer.properties
jdbc.url=jdbc:mysql://localhost:3306/login jdbc.driver=com.mysql.jdbc.Driver jdbc.user=root jdbc.pwd=1234
mybatis.xml
<?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="userinfo" type="com.test.entity.UserInfo"/> </typeAliases> <!-- <mappers> <mapper resource="com/test/sqlMapper/loginMapper.xml"/> </mappers> --> </configuration>
mybatis.xml 包含的文件
Ssm\src\com\test\sqlMapper\UserInfoMapper.xml
使用接口com.test.dao.ILoginDao來管理 Dao里面的方法
<?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可以理解是調用sql方法的一個執行類 --> <mapper namespace="com.test.dao.ILoginDao"> <!-- 這里是完成映射。type里面是映射的實體 column里面是這個實體里面和property表字段想對應的屬性 --> <resultMap type="com.test.entity.UserInfo" id="userMap"> <id property="id" column="id" jdbcType="DECIMAL"/> <result property="username" column="username" jdbcType="VARCHAR" /> <result property="password" column="password" jdbcType="VARCHAR" /> </resultMap> <select id="getUser" parameterType="String" resultMap="userMap"> select * from userinfo where username=#{userName} </select> <select id="getUserName" parameterType="int" resultMap="userMap"> select * from userinfo where id=#{id} </select> </mapper>
mybatis映射文件對應的實體類(類和數據庫名一致最好)
package com.test.entity; public class UserInfo { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
通過配置到bean里面的接口去實現sql方法。
因為spring 里面的bean就是給類的進行實例化的。然后通過id進行調用。
mybatis就是通過id進行調用所屬的sql的。
那就直接通過spring去實例化一個類(因為不用寫類的具體實現,所以就用接口就行),然后去管理mybatis里面的得到id的方法。
Ssm\src\com\test\dao\ILoginDao.java
package com.test.dao; import java.util.List; public interface ILoginDao { public List getUser(String userName); public List getUserName(int userID); }
最后是一個action的內容
Ssm\src\com\test\action\LoginAction.java
package com.test.action; import java.util.List; import com.test.dao.ILoginDao; public class LoginAction { private ILoginDao loginDao; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public ILoginDao getLoginDao() { return loginDao; } public void setLoginDao(ILoginDao loginDao) { this.loginDao = loginDao; } public String execute(){ String userName = getUsername(); String password = getPassword(); System.out.println("userName:"+userName+"\n"+"password:"+password); List list = loginDao.getUser(userName); List list2 = loginDao.getUserName(1); if(list.size()>0){ return "success"; }else{ return "error"; } } }
訪問路徑:http://localhost:8080/Ssm/login.jsp