您的位置:首页 > 数据库

(原创)ssm sql 例子(freemarker+jsp)

2016-12-06 20:22 309 查看
ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html

接下讲解一个插入语句的流程和顺带讲解freemarker+jsp视图的整合

初次接触,如果有错误请评论指出,谢谢

表单界面:add.jsp

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitlehere</title>
</head>
<!--springmvc跟struts一样,只要name一样就会自动填充成javabean-->
<formaction="/maven-hello-exam/addTest/add">
<inputtype="text"name="id">
<inputtype="text"name="name">
<inputtype="text"name="age">
<inputtype="submit">
</form>
<body>

</body>
</html>


spring-mvc.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">

<!--启用springmvc注解-->
<context:annotation-config/>

<!--设置使用注解的类所在的jar包-->
<context:component-scanbase-package="com.huawei.controller"/>

<!--完成请求和注解POJO的映射-->
<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<!--对转向页面的路径解析。prefix:前缀,suffix:后缀,jsp部分-->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/"p:suffix=".jsp"/>
<!--freemarker-->
<!--freemarker-->
<beanid="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath"value="/WEB-INF/views/"/>
</bean>
<beanid="viewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<propertyname="cache"value="true"/>
<propertyname="prefix"value=""/>
<propertyname="suffix"value=".ftl"/>
</bean>
</beans>


业务类的配置,启动注解和设置注解所在的包,这样在启动时就会去读取所在的路径。

下半部分的配置是关于freemarker和jsp的整合

freemarker,第一部分是启动freemarker和存放的路径,第二是解析

springmvc会根据返回的设置的优先级,根据返回的字符串和配置合成对应的视图名,然后去匹配对应的视图,在对应的文件夹下去匹配

可以设置jsp还是freemarker还是其他的视图类型的匹配的优先级

整合freemarker需要在pom.xml添加着2个jar包

<!--freemarker-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.25-incubating</version>
</dependency>


实体

packagebean;

/**
*person实体
*@authorAdministrator
*
*/
publicclassPerson{

privateintid;
privateStringname;
privateintage;

publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}

@Override
publicStringtoString(){
return"Person[id="+id+",name="+name+"]";
}
}


根据springmvc的注解配置会来到对应的业务类

packagecom.huawei.controller;

importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.beans.factory.annotation.Qualifier;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.servlet.ModelAndView;

importcom.huawei.service.impl.addTestService;

importbean.Person;

/**
*插入一条数据
*业务层
*@authorAdministrator
*
*/
@Controller
@RequestMapping("/addTest")
publicclassaddTest{
@Autowired
@Qualifier("testService")
privateaddTestServicetestService;

//@Autowired自动依赖注入,项目启动便会自动执行,所以就会自动实例化addTestService
/*@Autowired
publicvoidsetTestService(addTestServicetestService){
this.testService=testService;
}

publicaddTestServicegetTestService(){
returntestService;
}*/
/**
*
*@parampersonspringmvc根据name自动填充成实体
*@return
*/
@RequestMapping(value="/add")
publicStringadd(Personperson){
System.out.println("进来"+person.getAge());
//sql的处理
booleanb=testService.add(person);
System.out.println("add:"+b);
if(b)
return"chenggon";
else
return"shibai";
}
}


@Controller这个注解标注了这个类是springmvc的处理类,相当于struts的action

@RequestMapping请求映射的路径
springmvc跟struts一样,会根据名字进行映射填充成实体进来,不需要任何的配置

testService.add(person);做了一个sql的请求,接下来详细的讲解这部分
这个类的上半部分还用了2个注解:

@Autowired这个是自动依赖注入,他的作用相当于写了一个set方法。在服务器启动时边会由容器自动执行,实例化这个字段

@Qualifier("testService")这个注解的作用是网上说的我晕乎乎的,他大概的作用是说明他要实例化那个bean,跟@Service对应的,会把标注了@Service这个注解的名字的类实例化给这个字段
大概就是这样子,都是通过ioc容器进行一个依赖注入实例化这个字段
所以在请求进入这个处理类时,该字段就已经被实例化好了

接着通过调用该类的方法来到该类的数据访问层


packagecom.huawei.service.impl;

importjava.util.HashMap;
importjava.util.Map;

importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;

importcom.huawei.dao.PersonMapper;

importbean.Person;

/**
*数据库处理层
*@authorAdministrator
*
*/

@Service("testService")
publicclassaddTestService{
/**PersonMapper接口和PersonMapper.xml相互映射的,分别对应sql语句*/
@Autowired
privatePersonMapperpersonMapper;

/**
*执行sql
*添加一条数据
*@paramperson业务传递进来的javabean
*@return
*/
publicbooleanadd(Personperson){
System.out.println("personservice进来了"+person.getAge());
//执行接口中的方法
returnpersonMapper.addTest(person);
}

}


@Service("testService")这个和上面那个是对应的

PersonMapper这是和mybatis的映射配置文件对对应的,他只是一个接口,具体的实现用框架去做,只需要配置对应的xml和sql语句,还有在接口中提供对应的方法进行调用就好
PersonMapper


packagecom.huawei.dao;

importjava.util.List;

importbean.Person;

publicinterfacePersonMapper{

/**
*查询所有
*@return
*/
List<Person>queryAll();
/**
*添加测试
*@paramperson
*/
booleanaddTest(Personperson);
}


PersonMapper.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.huawei.dao.PersonMapper">
<!--查询所有person-->
<selectid="queryAll"resultType="Person">
select*fromperson
</select>
<insertid="addTest"parameterType="Person"flushCache="true">
INSERTINTO`person`(`id`,`name`,`age`)VALUES(#{id},#{name},#{age});
</insert>
</mapper>


到这里就大概这样。注意几个注解的作用

至于@Service("testService")这个注解的详细作用我也不是很清除,还没做一个更深入的了解,但是在spring.xml的配置文件中

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">
<!--自动注入-->
<context:component-scanbase-package="com.huawei.service.impl"/>
<!--加载properties文件-->
<!--<beanid="configProperties"class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<propertyname="locations">
<list>
<value>classpath:mysqldb.properties</value>
</list>
</property>
</bean>-->
</beans>


配置了该注解所在的包,通过配置文件去读取该路径下的类进行一个自动的注入,所以在业务类中才能进行一个实例化,在测试的时候我由于少了这几个依赖注入所以

一直会包一个空指针的错误

还有关于personMapper的类和xml的映射关系,其实在配置文件中就可以发现

mybatis-spring.xml中有这一段

<!--Mybatis文件-->
<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<propertyname="configLocation"value="classpath:mybatis-config.xml"/>
<propertyname="dataSource"ref="dataSource"/>
<!--映射文件路径-->
<!--<propertyname="mapperLocations"value="com/huawei/mapping/*.xml"/>-->
</bean>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<propertyname="basePackage"value="com.huawei.dao"/>
<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/>
</bean>


配置了sql语句的配置文件和接口类所在的包,详细的映射在personMapper.xml中

<mappernamespace="com.huawei.dao.PersonMapper">


描述了该语句的接口在哪里。

一个ssm的简单的插入语句的例子大概就这么多,如果出错请勿喷我,本人也是刚学






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: