06

    xiaoxiao2023-08-02  146

    

    项目结构

    Spring的配置:

    beans.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"

        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-scan base-package="com.rl"/>

          

           <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

               <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

               <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>

               <property name="username" value="root"></property>

               <property name="password" value="123456"></property>

           </bean>

          

           <!--

               使用spring来管理sqlSessionFactory

            -->

           <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

               <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>

               <property name="dataSource" ref="dataSource"></property>

           </bean>

          

           <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

               <property name="dataSource" ref="dataSource"></property>

           </bean>

          

           <tx:advice id="txAdvice" transaction-manager="txManager">

               <tx:attributes>

                  <tx:method name="save*" propagation="REQUIRED"/>

                  <tx:method name="update*" propagation="REQUIRED"/>

                  <tx:method name="delete*" propagation="REQUIRED"/>

                  <tx:method name="select*" read-only="true"/>

               </tx:attributes>

           </tx:advice>

          

           <aop:config>

               <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.rl.service..*.*(..))"/>

           </aop:config>

    </beans>

    springmvc.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"

        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-scan base-package="com.rl.controller"/>

           <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

               <property name="prefix" value="/WEB-INF/jsp/"></property>

               <property name="suffix" value=".jsp"></property>

           </bean>

    </beans>

    web.xml的配置内容如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns: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

    <?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 type="com.rl.model.Person" alias="person"/>

       </typeAliases>

       <mappers>

          <mapper resource="com/rl/mapper/PersonMapper.xml" />

       </mappers>

    </configuration>

    PersonMapper.xml

    <?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:命名空间,用来唯一标识一个映射文件,命名规范就是当前的文件的包加上文件名

     -->

    <mapper namespace="com.rl.mapper.PersonMapper">

     

       <resultMap type="person" id="BaseResultMap">

          <!--

             column:库表的字段

             property:库表所有映射的实体类中属性名

           -->

          <id column="person_id" property="personId"/>

          <result column="name" property="name"/>

          <result column="gender" property="gender"/>

          <result column="person_addr" property="personAddr"/>

          <result column="birthday" property="birthday"/>

       </resultMap>

      

       <!--

          公用的sql片段,也可以接收参数动态sql,所有的sql可以

        -->

       <sql id="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要接收的数据类型

          resultTypesql所返回的数据类型

        -->

        

        <!--

          实际项目中数据库的表的字段一般由多个单词来构成 由下划线来分隔多个单词 person_addr

          javamodel的实体类中的属性多个单词的命名规范是驼峰模式personAddr

         -->

         <!--

           useCache:控制当前的这个sql是否使用二级缓存

          -->

        <select id="selectPersonById" parameterType="int" resultMap="BaseResultMap" useCache="true">

          select * from person t where t.person_id = #{id}

        </select>

        

       <!-- 库表变更 -->

       <insert id="insert" parameterType="person">

         

          <selectKey keyProperty="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不能使用别名

        -->

       <delete id="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必须要写

        -->

       <select id="selectPersonByCondition" parameterType="map" resultMap="BaseResultMap">

          select * from person t

          <where>

             <if test="name != null">

                 t.name like '%${name}%'

             </if>

             <if test="gender != null">

                and t.gender = #{gender}

             </if>

             <if test="personAddr != null">

                and t.person_addr like '%${personAddr}%'

             </if>

             <if test="birthday != null">

                <![CDATA[

                    and t.birthday < #{birthday}

                ]]>

             </if>

          </where>

       </select>

      

      

       <!--

          动态修改

          <set>标签可以去掉最后一个逗号

         

          flushCache:二级缓存的刷新的配置:默认是true:会刷新,如果false就不刷新缓存

        -->

       <update id="dynamicUpdate" parameterType="person" flushCache="false">

          update person t

          <set>

             <if test="name != null">

                t.name = #{name},

             </if>

             <if test="gender != null">

                t.gender = #{gender},

             </if>

             <if test="personAddr != null">

                t.person_addr = #{personAddr},

             </if>

             <if test="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+"/";

    %>

    <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="f"%>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head>

        <base href="<%=basePath%>">

       

        <title>My JSP 'list.jsp' starting page</title>

       

       <meta http-equiv="pragma" content="no-cache">

       <meta http-equiv="cache-control" content="no-cache">

       <meta http-equiv="expires" content="0">   

       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

       <meta http-equiv="description" content="This is my page">

       <!--

       <link rel="stylesheet" type="text/css" href="styles.css">

       -->

     

      </head>

     

      <body>

        <form action="person/save.do" method="post">

            <table width="80%" align="center">

              <tr>

                 <td><label>姓名:</label><input type="text" name="name" ></td>

                 <td><label>性别:</label>

                    <select name="gender" >

                       <option value="">请选择</option>

                       <option value="0"  ></option>

                       <option value="1"  ></option>

                    </select>

                 </td>

                 <td><label>地址:</label><input type="text" name="personAddr" ></td>

                 <td><label>生日:</label><input type="text" name="birthday"></td>

                 <td><input type="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+"/";

    %>

    <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="f"%>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head>

        <base href="<%=basePath%>">

       

        <title>My JSP 'list.jsp' starting page</title>

       

       <meta http-equiv="pragma" content="no-cache">

       <meta http-equiv="cache-control" content="no-cache">

       <meta http-equiv="expires" content="0">   

       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

       <meta http-equiv="description" content="This is my page">

       <!--

       <link rel="stylesheet" type="text/css" href="styles.css">

       -->

       <script type="text/javascript">

          function delPerson(personId){

             if(confirm("真删吗?")){

                window.location.href="person/delete.do?personId="+personId;

             }

          }

       </script>

      </head>

     

      <body>

        <form action="person/listPerson.do" method="post">

            <table width="80%" align="center">

              <tr>

                 <td><label>姓名:</label><input type="text" name="name" value="${name }"></td>

                 <td><label>性别:</label>

                    <select name="gender" >

                       <option value="">请选择</option>

                       <option value="0" <c:if test="${gender == '0' }">selected</c:if> ></option>

                       <option value="1" <c:if test="${gender == '1' }">selected</c:if> ></option>

                    </select>

                 </td>

                 <td><label>地址:</label><input type="text" name="personAddr" value="${personAddr }"></td>

                 <td><label>生日:</label><input type="text" name="birthday" value="<f:formatDate value="${birthday }" pattern="yyyy-MM-dd"/>"></td>

                 <td><input type="submit" value="查询"></td>

              </tr>

           </table>

        </form>

        <table align="center" width="80%">

           <tr>

              <td><a href="person/toSave.do">添加</a></td>

           </tr>

        </table>

       

       <table width="80%" align="center" border="1">

           <tr>

              <th>姓名</th>

              <th>性别</th>

              <th>地址</th>

              <th>生日</th>

              <th>操作</th>

           </tr>

           <c:forEach items="${pList }" var="person">

              <tr>

                 <td>${person.name }</td>

                 <td>

                    <c:if test="${person.gender == '0' }"></c:if>

                    <c:if test="${person.gender == '1' }"></c:if>

                </td>

                 <td>${person.personAddr }</td>

                 <td><f:formatDate value="${person.birthday }" pattern="yyyy-MM-dd"/> </td>

                 <td><a href="person/getPerson.do?personId=${person.personId }">修改</a>

                

                 <a href="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+"/";

    %>

    <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="f"%>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head>

        <base href="<%=basePath%>">

       

        <title>My JSP 'list.jsp' starting page</title>

       

       <meta http-equiv="pragma" content="no-cache">

       <meta http-equiv="cache-control" content="no-cache">

       <meta http-equiv="expires" content="0">   

       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

       <meta http-equiv="description" content="This is my page">

       <!--

       <link rel="stylesheet" type="text/css" href="styles.css">

       -->

     

      </head>

     

      <body>

        <form action="person/update.do" method="post">

        <input type="hidden" name="personId" value="${person.personId }">

            <table width="80%" align="center">

             

              <tr>

                 <td><label>姓名:</label><input type="text" name="name" value="${person.name }"></td>

                 <td><label>性别:</label>

                    <select name="gender" >

                       <option value="">请选择</option>

                       <option value="0" <c:if test="${person.gender == '0' }">selected</c:if> ></option>

                       <option value="1" <c:if test="${person.gender == '1' }">selected</c:if> ></option>

                    </select>

                 </td>

                 <td><label>地址:</label><input type="text" name="personAddr" value="${person.personAddr }"></td>

                 <td><label>生日:</label><input type="text" name="birthday" value="<f:formatDate value="${person.birthday }" pattern="yyyy-MM-dd"/>"></td>

                 <td><input type="submit" value="修改"></td>

              </tr>

           </table>

        </form>

     

          

      </body>

    </html>

     

     

     

     

     

     

    相关资源:mybatis springmvc spring整合jar包
    最新回复(0)