因为工作上用到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

源码:http://pan.baidu.com/s/1i43PH3Z

java ssm框架入门(一)面向接口编程的更多相关文章

  1. java ssm框架入门(三)正式项目的web.xml配置

    一个正规的上线的web.xml的配置. <?xml version="1.0" encoding="UTF-8"?> <web-app id= ...

  2. java ssm框架入门(二)添加语言滤器

    使用过滤器是在web.xml中使用filter,以下是码过滤器,过滤所有资源的使用 web.xml <filter> <filter-name>setCharactor< ...

  3. Java中的面向接口编程

    面向接口编程是很多软件架构设计理论都倡导的编程方式,学习Java自然少不了这一部分,下面是我在学习过程中整理出来的关于如何在Java中实现面向接口编程的知识.分享出来,有不对之处还请大家指正. 接口体 ...

  4. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  5. java面向接口编程

    在oop中有一种设计原则是面向接口编程,面向接口编程有非常多优点,详细百度一大片.我来谈一下详细的使用中的一些不成熟的见解.! 首先面向接口编程能够消除类之间的依赖关系,使得业务仅仅依赖接口. 这样有 ...

  6. java接口,接口的特性,接口实现多态,面向接口编程

    package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式 * 形式:public interface 接口名称{} * 接口不能拥有构造方法 ...

  7. go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?

    到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 Go 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. ...

  8. javascript设计模式学习之十七——程序设计原则与面向接口编程

    一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...

  9. Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

随机推荐

  1. geoserver 安装 sql server 插件

    Did you download and install the sql server plugin as well?   http://downloads.sourceforge.net/proje ...

  2. Codeforces 302D

    思路:最短路,map[i][j] = d*(|x[i]-x[j]| + |y[i]-y[j]|) - add[i] #include<iostream> #include<cstdi ...

  3. chm 字体修改

    今天打开从网络下载的“[MSDN]Csharp编程指南+参考手册.chm”文件,以为看看里面所提供的一些知识点,但是发现文件显示的字体觉得有点别扭,以为能够像网页那样ctrl键+鼠标滚轮就能进行字体的 ...

  4. HW4.39

    public class Solution { public static void main(String[] args) { double sum; double baseSalary = 500 ...

  5. POJ3349: Snowflake Snow Snowflakes(hash 表)

    考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...

  6. CF402E Strictly Positive Matrix 传递闭包用强连通分量判断

    题目链接:http://codeforces.com/problemset/problem/402/E /**算法分析: 这道题考察了图论基本知识,就是传递闭包,可以构图用强联通分量来判断 */ #i ...

  7. XI.spring的点点滴滴--IObjectFactoryPostProcessor(工厂后处理器)

    承接上文 IObjectFactoryPostProcessor(工厂后处理器)) 前提是实现接口的对象注册给当前容器 直接继承的对象调用这个postProcessBeanFactory方法,参数为工 ...

  8. 模拟等待事件row lock waits

    是索引块分裂引起的锁等待,往往与enq: TX - index contention 伴随产生,enq:TX - index contention的解释. Waits for TX in mode 4 ...

  9. 用gooreplacer来加速你的浏览器

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用gooreplacer来加速你的浏览器.

  10. xcode6 自定义UITabbarController

    -(void)initTabBarView{ if (tabBarController && [kAPPDELEGATE.navigationController.viewContro ...