06_MyBatis,Spring,SpringMVC整合
来源:互联网 发布:java jdk版本查看 编辑:程序博客网 时间:2024/05/01 13:31
项目结构
Spring的配置:
beans.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<context:component-scanbase-package="com.rl"/>
<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property>
<propertyname="url"value="jdbc:mysql://localhost:3306/mybatis"></property>
<propertyname="username"value="root"></property>
<propertyname="password"value="123456"></property>
</bean>
<!--
使用spring来管理sqlSessionFactory
-->
<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<propertyname="configLocation"value="classpath:sqlMapConfig.xml"></property>
<propertyname="dataSource"ref="dataSource"></property>
</bean>
<beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"></property>
</bean>
<tx:adviceid="txAdvice"transaction-manager="txManager">
<tx:attributes>
<tx:methodname="save*"propagation="REQUIRED"/>
<tx:methodname="update*"propagation="REQUIRED"/>
<tx:methodname="delete*"propagation="REQUIRED"/>
<tx:methodname="select*"read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisoradvice-ref="txAdvice"pointcut="execution(* com.rl.service..*.*(..))"/>
</aop:config>
</beans>
springmvc.xml的配置内容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<context:component-scanbase-package="com.rl.controller"/>
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/jsp/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
</beans>
web.xml的配置内容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"version="2.5">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SpringCharacterEncodingFilter</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>SpringCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
5 log4j.properties
log4j.rootLogger=DEBUG,Console
#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=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
sqlMapConfig.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAliastype="com.rl.model.Person"alias="person"/>
</typeAliases>
<mappers>
<mapperresource="com/rl/mapper/PersonMapper.xml"/>
</mappers>
</configuration>
PersonMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:命名空间,用来唯一标识一个映射文件,命名规范就是当前的文件的包加上文件名
-->
<mappernamespace="com.rl.mapper.PersonMapper">
<resultMaptype="person"id="BaseResultMap">
<!--
column:库表的字段
property:库表所有映射的实体类中属性名
-->
<idcolumn="person_id"property="personId"/>
<resultcolumn="name"property="name"/>
<resultcolumn="gender"property="gender"/>
<resultcolumn="person_addr"property="personAddr"/>
<resultcolumn="birthday"property="birthday"/>
</resultMap>
<!--
公用的sql片段,也可以接收参数动态sql,所有的sql可以
-->
<sqlid="columns">
PERSON_ID, NAME, GENDER, PERSON_ADDR, BIRTHDAY
</sql>
<!--
根据id来查询一个Person的数据
sql语句接收参数的一个语法#{},如果接收的是一个{}中的内容任意select * from person_test t where t.ID = ?,使用预编译方式生成sql
id:sql语句的唯一的标识不能重复
parameterType:sql要接收的数据类型
resultType:sql所返回的数据类型
-->
<!--
实际项目中数据库的表的字段一般由多个单词来构成由下划线来分隔多个单词 person_addr
在java的model的实体类中的属性多个单词的命名规范是驼峰模式personAddr
-->
<!--
useCache:控制当前的这个sql是否使用二级缓存
-->
<selectid="selectPersonById"parameterType="int"resultMap="BaseResultMap"useCache="true">
select * from person t where t.person_id = #{id}
</select>
<!--库表变更 -->
<insertid="insert"parameterType="person">
<selectKeykeyProperty="personId"order="AFTER"resultType="int">
select LAST_INSERT_ID()
</selectKey>
insert into person (person_id, name, gender, person_addr, birthday)
values(#{personId}, #{name}, #{gender}, #{personAddr}, #{birthday})
</insert>
<!--
删除的sql不能使用别名
-->
<deleteid="delete"parameterType="int">
delete from person where person_id = #{personId}
</delete>
<!--动态sql -->
<!--
map.put("name", "安");
map.put("gender", "0");
map.put("personAddr", "东京")
map.put("birthday", new Date());
<where>会自动处理and,第一个and可以不写,其他的and必须要写
-->
<selectid="selectPersonByCondition"parameterType="map"resultMap="BaseResultMap">
select * from person t
<where>
<iftest="name != null">
t.name like '%${name}%'
</if>
<iftest="gender != null">
and t.gender = #{gender}
</if>
<iftest="personAddr != null">
and t.person_addr like '%${personAddr}%'
</if>
<iftest="birthday != null">
<![CDATA[
and t.birthday < #{birthday}
]]>
</if>
</where>
</select>
<!--
动态修改
<set>标签可以去掉最后一个逗号
flushCache:二级缓存的刷新的配置:默认是true:会刷新,如果false就不刷新缓存
-->
<updateid="dynamicUpdate"parameterType="person"flushCache="false">
update person t
<set>
<iftest="name != null">
t.name = #{name},
</if>
<iftest="gender != null">
t.gender = #{gender},
</if>
<iftest="personAddr != null">
t.person_addr = #{personAddr},
</if>
<iftest="birthday != null">
t.birthday = #{birthday}
</if>
</set>
where t.person_id = #{personId}
</update>
</mapper>
6 Person.java的内容如下:
package com.rl.model;
import java.io.Serializable;
import java.util.Date;
public class Person implements Serializable{
private static final long serialVersionUID = 7728191033619971201L;
private Integer personId;
private String name;
private String gender;
private String personAddr;
private Date birthday;
public Integer getPersonId() {
return personId;
}
public void setPersonId(Integer personId) {
this.personId = personId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPersonAddr() {
return personAddr;
}
public void setPersonAddr(String personAddr) {
this.personAddr = personAddr;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
7 PersonDao.java
package com.rl.dao;
import java.util.List;
import java.util.Map;
import com.rl.model.Person;
public interface PersonDao {
public void save(Person person);
public Person selectPersonById(Integer personId);
public void update(Person person);
public void delete(Integer personId);
public List<Person> selectPersonByCondition(Map<String, Object> map);
}
8 PersonDaoImpl.java的内容如下:
package com.rl.dao.impl;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import com.rl.dao.PersonDao;
import com.rl.model.Person;
@Repository
public class PersonDaoImpl extends SqlSessionDaoSupport implements PersonDao {
//命名空间
String ns = "com.rl.mapper.PersonMapper.";
@Override
public void save(Person person) {
this.getSqlSession().insert(ns+"insert", person);
}
@Override
public Person selectPersonById(Integer personId) {
return (Person) this.getSqlSession().selectOne(ns+"selectPersonById", personId);
}
@Override
public void update(Person person) {
this.getSqlSession().update(ns+"dynamicUpdate", person);
}
@Override
public void delete(Integer personId) {
this.getSqlSession().delete(ns+"delete", personId);
}
@SuppressWarnings("unchecked")
@Override
public List<Person> selectPersonByCondition(Map<String, Object> map) {
return this.getSqlSession().selectList(ns+"selectPersonByCondition", map);
}
}
9 PersonService.java
package com.rl.service;
import java.util.List;
import java.util.Map;
import com.rl.model.Person;
public interface PersonService {
public void save(Person person);
public Person selectPersonById(Integer personId);
public void update(Person person);
public void delete(Integer personId);
public List<Person> selectPersonByCondition(Map<String, Object> map);
}
10 PersonServiceImpl.java
package com.rl.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.rl.dao.PersonDao;
import com.rl.model.Person;
import com.rl.service.PersonService;
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonDao personDao;
@Override
public void save(Person person) {
personDao.save(person);
}
@Override
public Person selectPersonById(Integer personId) {
return personDao.selectPersonById(personId);
}
@Override
public void update(Person person) {
personDao.update(person);
}
@Override
public void delete(Integer personId) {
personDao.delete(personId);
}
@Override
public List<Person> selectPersonByCondition(Map<String, Object> map) {
return personDao.selectPersonByCondition(map);
}
}
11 PersonController.java的内容如下:
package com.rl.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import com.rl.model.Person;
import com.rl.service.PersonService;
@Controller
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
/**
* 跳转到添加页面
*/
@RequestMapping("/toSave.do")
public String toSave(){
return "add";
}
/**
* 添加Person
*/
@RequestMapping("/save.do")
public String save(Person person){
personService.save(person);
return "redirect:listPerson.do";
}
/**
* 查询Person
*/
@RequestMapping("/getPerson.do")
public String getPerson(Integer personId, Model model){
Person person = personService.selectPersonById(personId);
model.addAttribute("person", person);
return "update";
}
/**
* 修改Person
*/
@RequestMapping("/update.do")
public String update(Person person){
personService.update(person);
return "redirect:listPerson.do";
}
/**
* 删除
*/
@RequestMapping("/delete.do")
public String delete(Integer personId){
personService.delete(personId);
return "redirect:listPerson.do";
}
/**
* 动态条件组合查询
*/
@RequestMapping("/listPerson.do")
public String listPerson(String name, String gender,
String personAddr, Date birthday, Model model){
Map<String, Object> map = new HashMap<String,Object>();
if(name != null && "".equals(name.trim())){
name = null;
}
if(gender != null && "".equals(gender.trim())){
gender = null;
}
if(personAddr != null && "".equals(personAddr.trim())){
personAddr = null;
}
map.put("name", name);
map.put("gender", gender);
map.put("personAddr", personAddr);
map.put("birthday", birthday);
List<Person> pList = personService.selectPersonByCondition(map);
model.addAttribute("pList", pList);
model.addAttribute("name", name);
model.addAttribute("gender", gender);
model.addAttribute("personAddr", personAddr);
model.addAttribute("birthday", birthday);
return "list";
}
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
}
12 add.jsp
<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>My JSP 'list.jsp' starting page</title>
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<formaction="person/save.do"method="post">
<tablewidth="80%"align="center">
<tr>
<td><label>姓名:</label><inputtype="text"name="name"></td>
<td><label>性别:</label>
<selectname="gender">
<optionvalue="">请选择</option>
<optionvalue="0" >男</option>
<optionvalue="1" >女</option>
</select>
</td>
<td><label>地址:</label><inputtype="text"name="personAddr"></td>
<td><label>生日:</label><inputtype="text"name="birthday"></td>
<td><inputtype="submit"value="保存"></td>
</tr>
</table>
</form>
</body>
</html>
13 list.jsp
<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>My JSP 'list.jsp' starting page</title>
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<scripttype="text/javascript">
function delPerson(personId){
if(confirm("真删吗?")){
window.location.href="person/delete.do?personId="+personId;
}
}
</script>
</head>
<body>
<formaction="person/listPerson.do"method="post">
<tablewidth="80%"align="center">
<tr>
<td><label>姓名:</label><inputtype="text"name="name"value="${name }"></td>
<td><label>性别:</label>
<selectname="gender">
<optionvalue="">请选择</option>
<optionvalue="0"<c:if test="${gender == '0' }">selected</c:if>>男</option>
<optionvalue="1"<c:if test="${gender == '1' }">selected</c:if>>女</option>
</select>
</td>
<td><label>地址:</label><inputtype="text"name="personAddr"value="${personAddr }"></td>
<td><label>生日:</label><inputtype="text"name="birthday"value="<f:formatDatevalue="${birthday }"pattern="yyyy-MM-dd"/>"></td>
<td><inputtype="submit"value="查询"></td>
</tr>
</table>
</form>
<tablealign="center"width="80%">
<tr>
<td><ahref="person/toSave.do">添加</a></td>
</tr>
</table>
<tablewidth="80%"align="center"border="1">
<tr>
<th>姓名</th>
<th>性别</th>
<th>地址</th>
<th>生日</th>
<th>操作</th>
</tr>
<c:forEachitems="${pList }"var="person">
<tr>
<td>${person.name }</td>
<td>
<c:iftest="${person.gender == '0' }">男</c:if>
<c:iftest="${person.gender == '1' }">女</c:if>
</td>
<td>${person.personAddr }</td>
<td><f:formatDatevalue="${person.birthday }"pattern="yyyy-MM-dd"/></td>
<td><ahref="person/getPerson.do?personId=${person.personId }">修改</a>
<ahref="javascript:void(0)"onclick="delPerson(${person.personId})">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
14 update.jsp
<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>My JSP 'list.jsp' starting page</title>
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<formaction="person/update.do"method="post">
<inputtype="hidden"name="personId"value="${person.personId }">
<tablewidth="80%"align="center">
<tr>
<td><label>姓名:</label><inputtype="text"name="name"value="${person.name }"></td>
<td><label>性别:</label>
<selectname="gender">
<optionvalue="">请选择</option>
<optionvalue="0"<c:if test="${person.gender == '0' }">selected</c:if>>男</option>
<optionvalue="1"<c:if test="${person.gender == '1' }">selected</c:if>>女</option>
</select>
</td>
<td><label>地址:</label><inputtype="text"name="personAddr"value="${person.personAddr }"></td>
<td><label>生日:</label><inputtype="text"name="birthday"value="<f:formatDatevalue="${person.birthday }"pattern="yyyy-MM-dd"/>"></td>
<td><inputtype="submit"value="修改"></td>
</tr>
</table>
</form>
</body>
</html>
- 06_MyBatis,Spring,SpringMVC整合
- SpringMVC-整合Spring整合
- SpringMVC-15 Spring整合SpringMVC
- SpringMVC+Spring+Ibatis整合
- SpringMVC+Spring+Hibernate整合
- SpringMVC + Spring + SpringJDBC整合
- SpringMVC整合Spring、Hibernate
- SpringMVC + Spring + SpringJDBC整合
- SpringMVC + Spring + SpringJDBC整合
- SpringMVC + Spring + SpringJDBC整合
- Spring-SpringMVC-Hibernate整合
- Spring-SpringMVC-Mybatis整合
- springmvc+spring+mybatis整合
- SpringMVC+spring+maven整合
- springmvc+spring+mybatis整合
- Spring+SpringMVC+Mybatis整合
- springmvc+mybatis+spring整合
- springmvc+spring+mybatis 整合
- MyBatis直接执行SQL查询及批量插入数据
- 纪念自己编写的第一个java小游戏,飞翔小鸟
- 基于H.264的远程视频监控
- 这个字符串参数必须包含一个或多个数字,函数应该把这些 数字字符转换为整数并返回这个整数。如果字符串参数包含 了任何非数字字符,函数就返回零。
- 标准I/O库
- 06_MyBatis,Spring,SpringMVC整合
- 时间和日期例程
- UI进阶第七发:UITabBarController生命周期(使用storyoard搭建)
- UI进阶第七发:UITabBarController简单介绍
- java中相对路径,绝对路径问题总结(转)
- 你必须了解的第一个python程序
- 进程环境
- 黑马程序员-IOS-OC基础-面向对象语法三
- UI进阶第八发:Suege和Modal