利用SSM框架实现简单的增删改查功能

利用SSM框架实现简单的增删改查功能

一、需要的依赖

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--1.mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <!--逆向生成带分页的插件-->
        <dependency>
            <groupId>com.itfsw</groupId>
            <artifactId>mybatis-generator-plugin</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!--2.spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!--springMvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!--pojo转换成 json -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--jstl和tablib-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

    </dependencies>

<!--Tomcat-->
 <plugin>
                   <groupId>org.apache.tomcat.maven</groupId>
                   <artifactId>tomcat7-maven-plugin</artifactId>
                   <version>2.2</version>
                   <configuration>
                       <path>/</path>
                       <port>8080</port>
                       <uriEncoding>UTF-8</uriEncoding>
                   </configuration>
               </plugin>

二、逆向生成

逆向生成配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 生成配置文件 -->
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--分页插件-->
        <plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/>

        <commentGenerator>
            <!-- 是否去除注释,true表示是,false否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 1.连接数据库信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/k9503?characterEncoding=UTF-8"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 2.pojo类的生成配置  targetPackage表示目标文件夹
		targetProject表示当前目标文件夹所放置的目标地址
	 -->
        <javaModelGenerator targetPackage="com.pojo" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 3.sql映射文件生成配置 -->
        <sqlMapGenerator targetPackage="mybatis/mapper" targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 4.mapper接口配置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 5.数据库表和实体类映射 -->
        <table tableName="emp" domainObjectName="Emp">
        </table>
        <table tableName="dept" domainObjectName="Dept">
        </table>
    </context>
</generatorConfiguration>

逆向生成代码:

 @Test
    public void create() throws Exception {
    
    
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }

核心配置文件;

springMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.controller"></context:component-scan>
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"></constructor-arg>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <mvc:default-servlet-handler/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

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>
    <!--引入外部文件的标签  -->
    <properties resource="properties/db.properties"></properties>

    <settings>
        <!--    可以在控制台输出日志信息:sql语句和参数 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!-- 表示类型别名   库-->
    <typeAliases>
        <!-- 每一个类型的别名  type属性表示别名对应的类型地址 alias表示起的别名-->
        <typeAlias type="java.util.List" alias="list"/>
        <!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 -->
        <package name="com.pojo"/>
    </typeAliases>

    <!-- 分页插件 -->
    <!-- <plugins>            
         <plugin interceptor="com.github.pagehelper.PageInterceptor">                           	3.3.0版本可用 - 分页参数合理化,默认false禁用         
           pageNum表示当前页  pages表示尾页         
          true启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页                     false禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据            
         <property name="reasonable"   value="true"/>    
       </plugin>        
     </plugins>
     -->


    <!-- 环境配置  作为连接数据库的环境 -->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- mappers表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->
    <!--核心配置文件 关联 映射文件  -->
    <!-- <mappers>
        <mapper resource="mapper/Mapper.xml"/>
    </mappers>-->

</configuration> 

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/k9503?zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456

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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--1、开启service层的注解-->
    <context:component-scan base-package="com.service"/>
    <!--2、加载db.properties-->
    <context:property-placeholder location="classpath:properties/db.properties"/>
    <!--3、数据源-->
    <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--4、事务管理-->
    <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="ds"></property>
    </bean>
    <!--5、开启事务的注解@Transactional-->
    <tx:annotation-driven transaction-manager="tx"/>
    <!--6、spring管理MyBatis-->
    <bean id="fb" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="ds"/>
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
        <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
    </bean>
    <!--7、让mapper接口和mapper.xml关联,即使不在同一个文件夹下,依然可以使用包扫描的形式,加载所有的映射文件-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.mapper"/><!--指定mapper接口的路径-->
        <property name="sqlSessionFactoryBeanName" value="fb"/>
    </bean>
</beans>

controller层

package com.controller;

import com.pojo.Dept;
import com.pojo.Emp;
import com.pojo.PageBean;
import com.service.IEmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/emp")
public class EmpController {
    
    
    @Autowired
    private IEmpService service;
    @RequestMapping("/show")
    public ModelAndView show(PageBean page, ModelAndView mav){
    
    
        //取
        //模糊分页条件查询所有员工
        List<Emp> list=service.selectLikePage(page);
        //查询下拉框中的所有部门
        List<Dept> depts=service.selectDepts();
        //存进request域中
        mav.addObject("list",list);
        mav.addObject("depts",depts);
        mav.addObject("page",page);
//转
        mav.setViewName("show");
        return mav;
    }
    //新增页面跳转
    @RequestMapping("/add1")
    public String add1(Model m){
    
    
        //查询所有的部门--中下拉框展示所有的部门
        List<Dept> depts=service.selectDepts();
        m.addAttribute("depts",depts);
        return "add";
    }
    //实现新增
    @RequestMapping("/add2")
    public String add2(Emp emp){
    
    
        int i=service.addEmp(emp);
        return "redirect:/emp/show";//去show方法 重查
    }

    //1.查询单条 2.页面跳转
    @RequestMapping("/update1/{id}")
    public String update1(@PathVariable  String id, Model m){
    
    
        Emp e=service.selectById(Integer.parseInt(id));
        m.addAttribute("emp",e);

        //查询所有的部门--中下拉框展示所有的部门
        List<Dept> depts=service.selectDepts();
        m.addAttribute("depts",depts);

        return "update";//转发到update.jsp
    }
    //执行修改
    @RequestMapping("/update2")
    public String update2(Emp emp){
    
    
        int i=service.updateEmp(emp);
        return "redirect:/emp/show";//去show方法 重查
    }

    @RequestMapping("/deleteById/{id}")
    public String deleteById(@PathVariable String id){
    
    
        int i=service.deleteById(Integer.parseInt(id));
        //删除后重查数据库
        return "redirect:/emp/show";//去show方法 重查
    }
}

pageBean

package com.pojo;

import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

public class PageBean {
    
    
    private int currPage = 1;
    private int totalPage;
    private int size = 4;
    private int count;


    private String name;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private Date startBirth;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private Date endBirth;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private Integer deptId;

    public Integer getDeptId() {
    
    
        return deptId;
    }

    public void setDeptId(Integer deptId) {
    
    
        this.deptId = deptId;
    }

    public int getCurrPage() {
    
    
        return currPage;
    }

    public void setCurrPage(int currPage) {
    
    
        this.currPage = currPage;
    }

    public int getTotalPage() {
    
    
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
    
    
        this.totalPage = totalPage;
    }

    public int getSize() {
    
    
        return size;
    }

    public void setSize(int size) {
    
    
        this.size = size;
    }

    public int getCount() {
    
    
        return count;
    }

    public void setCount(int count) {
    
    
        this.count = count;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name==null?null:name.trim();
    }

    public Date getStartBirth() {
    
    
        return startBirth;
    }

    public void setStartBirth(Date startBirth) {
    
    
        this.startBirth = startBirth;
    }

    public Date getEndBirth() {
    
    
        return endBirth;
    }

    public void setEndBirth(Date endBirth) {
    
    
        this.endBirth = endBirth;
    }
}

关联逻辑外键

//在Emp中关联逻辑外键:
private Dept dept;

Service接口:

package com.service;

import com.pojo.Dept;
import com.pojo.Emp;
import com.pojo.PageBean;

import java.util.List;

public interface IEmpService {
    
    
    List<Emp> selectLikePage(PageBean page);

    List<Dept> selectDepts();

    int addEmp(Emp emp);

    Emp selectById(int parseInt);

    int updateEmp(Emp emp);

    int deleteById(int parseInt);
}

Servicce实现类:

package com.service.impl;

import com.mapper.DeptMapper;
import com.mapper.EmpMapper;
import com.pojo.*;
import com.service.IEmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class EmpServiceImpl implements IEmpService {
    
    
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private DeptMapper deptMapper;
    @Override
    public List<Emp> selectLikePage(PageBean page) {
    
    
        EmpExample e = new EmpExample();
        EmpExample.Criteria c = e.createCriteria();
        if(page.getName()!=null){
    
    
            c.andNameLike("%"+page.getName()+"%");
        }
        if(page.getStartBirth()!=null){
    
    
            c.andBirthGreaterThanOrEqualTo(page.getStartBirth());
        }
        if(page.getEndBirth()!=null){
    
    
            c.andBirthLessThanOrEqualTo(page.getEndBirth());
        }
        if(page.getDeptId()!=null&&page.getDeptId()!=0){
    
    
            c.andDeptidEqualTo(page.getDeptId());
        }
        int count = (int) empMapper.countByExample(e);
        int size = page.getSize();
        int totalPage=(count%size==0)?(count/size):(count/size+1);
        page.setCount(count);
        page.setTotalPage(totalPage);
       int startRow=(page.getCurrPage()-1)*size;
       e.limit(startRow,size);
        List<Emp> emps = empMapper.selectByExample(e);
        for(Emp emp:emps){
    
    
           Dept dept=deptMapper.selectByPrimaryKey(emp.getDeptid());
           emp.setDept(dept);

        }
        return emps;
    }

    @Override
    public List<Dept> selectDepts() {
    
    
        return deptMapper.selectByExample(null);
    }

    @Override
    public int addEmp(Emp emp) {
    
    
        return empMapper.insertSelective(emp);
    }

    @Override
    public Emp selectById(int id) {
    
    
        return empMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateEmp(Emp emp) {
    
    
        return empMapper.updateByPrimaryKeySelective(emp);
    }

    @Override
    public int deleteById(int id) {
    
    
        return empMapper.deleteByPrimaryKey(id);
    }
}

猜你喜欢

转载自blog.csdn.net/fzt12138/article/details/93597324