汽车后端框架搭建(中)

本文详细介绍了如何使用MyBatisCodeHelper插件自动生成代码,并结合分层设计实现用户信息系统的开发,包括实体类、Mapper接口、Service层、Controller层的编写,以及后端配置和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.自动生成

插件名:MybatisCodeHelperNew-2.7.8-191-193

①这次我们先在数据库中新建一张表

CREATE TABLE `sys_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `login_name` varchar(30) DEFAULT NULL COMMENT '登录名',
  `password` varchar(32) DEFAULT NULL COMMENT '登录密码',
  `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号码',
  `real_name` varchar(20) DEFAULT NULL COMMENT '真实名称',
  `sex` int(1) DEFAULT NULL COMMENT '性别 1男 2女',
  `address` varchar(100) DEFAULT NULL COMMENT '地址',
  `phone` varchar(255) DEFAULT NULL COMMENT '电话',
  `img` varchar(255) DEFAULT NULL COMMENT '用户头像',
  PRIMARY KEY (`id`),
  UNIQUE KEY `login_name` (`login_name`) COMMENT '登录名不能重复',
  UNIQUE KEY `id_card` (`id_card`) COMMENT '身份证号唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

②选择自动生成

在这里插入图片描述

SysUsers实体类

public class SysUsers {
    /**
    * 用户编号
    */
    private Integer id;

    /**
    * 登录名
    */
    private String loginName;

    /**
    * 登录密码
    */
    private String password;

    /**
    * 身份证号码
    */
    private String idCard;

    /**
    * 真实名称
    */
    private String realName;

    /**
    * 性别 1男 2女
    */
    private Integer sex;

    /**
    * 地址
    */
    private String address;

    /**
    * 电话
    */
    private String phone;

    /**
    * 用户头像
    */
    private String img;
}

SysUsersMapper接口

​ 因为在这里我们不需要自动生成的,所以我们删除后,将这个接口继承BaseMapper接口,而BaseMapper接口需要指定泛型,这里需要加入vo和form包,也就是说要分别定义两个类了,比如insert操作,以前的数据都是将前端传来的数据封装成user(pojo)对象,现在用form包下的对象去接收,于是我们的SysUsersForm去继承SysUsers,用于接收更新user表的数据的类.一样的,我们将查询的结果放到SysUsersVO中,用于接收查询的数据,我们的SysUsersVO去继承SysUsers.

Form 和 VO 是不同层的数据传输对象作用域应该只在所属规定范围内使用

package com.zw.sys.mapper;

import com.zw.common.base.mapper.BaseMapper;
import com.zw.sys.vo.SysUsersVO;
import com.zw.sys.form.SysUsersForm;

/**
 * 用户表操作捷库
 */
public interface SysUsersMapper extends BaseMapper<SysUsersForm, SysUsersVO> {
}

SysUsersForm类

package com.zw.sys.form;
/**
 * 比如insert操作,以前的数据都是将前端传来的数据封装成user对象,现在用form包下的对象去接收,
 * 于是我们的SysUsersForm去继承SysUsers,
 *
 */

import com.zw.sys.pojo.SysUsers;

/**
 * @ClassName:SysUsersForm
 * @Description: 用于接收更新user表的数据的类
 * @Author: KevinZeng
 * @Date 2020/1/8 下午 11:01
 */
public class SysUsersForm extends SysUsers {
}

SysUsersVO类

package com.zw.sys.vo;
/**
 * 一样的,我们将查询的结果放到SysUsersVO中
 */

import com.zw.sys.pojo.SysUsers;

/**
 * @ClassName:SysUsersVO
 * @Description: 用于接收查询的数据
 * @Author: KevinZeng
 * @Date 2020/1/8 下午 11:06
 */
public class SysUsersVO extends SysUsers {
}

SysUsersMapper.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">
<mapper namespace="com.zw.sys.mapper.SysUsersMapper">

  <resultMap id="BaseResultMap" type="com.zw.sys.vo.SysUsersVO">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="login_name" jdbcType="VARCHAR" property="loginName" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="id_card" jdbcType="VARCHAR" property="idCard" />
    <result column="real_name" jdbcType="VARCHAR" property="realName" />
    <result column="sex" jdbcType="INTEGER" property="sex" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="img" jdbcType="VARCHAR" property="img" />
  </resultMap>

  <sql id="Base_Column_List">
    id, login_name, `password`, id_card, real_name, sex, address, phone, img
  </sql>

  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.zw.sys.pojo.SysUsers" useGeneratedKeys="true">
    insert into sys_users (login_name, `password`, id_card,
    real_name, sex, address,
    phone, img)
    values (#{loginName}, #{password}, #{idCard},
    #{realName}, #{sex}, #{address},
    #{phone}, #{img})
  </insert>

  <delete id="delete" parameterType="java.lang.Integer">
    delete from sys_users
    where id = #{id}
  </delete>

  <update id="update" parameterType="com.zw.sys.form.SysUsersForm">
    update sys_users
    set login_name = #{loginName},
    `password` = #{password},
    id_card = #{idCard},
    real_name = #{realName},
    sex = #{sex},
    address = #{address},
    phone = #{phone},
    img = #{img}
    where id = #{id}
  </update>


  <select id="selectOne" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from sys_users
    where id = #{id}
  </select>

  <select id="selectList"  resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from sys_users
  </select>

</mapper>

2.编写service

package com.zw.sys.service;

import com.zw.common.base.service.IBaseService;
import com.zw.sys.form.SysUsersForm;

public interface ISysUsersService extends IBaseService<SysUsersForm>{

}
package com.zw.sys.service.impl;

import com.zw.common.base.mapper.BaseMapper;
import com.zw.common.base.service.impl.BaseServiceImpl;
import com.zw.sys.form.SysUsersForm;
import com.zw.sys.mapper.SysUsersMapper;
import com.zw.sys.service.ISysUsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @ClassName:SysUsersServiceImpl
 * @Description: TODO
 * @Author: KevinZeng
 * @Date 2020/1/8 下午 11:27
 */
@Service
public class SysUsersServiceImpl extends BaseServiceImpl<SysUsersForm> implements ISysUsersService {

    @Autowired
    private SysUsersMapper sysUsersMapper;

    /**
     * sysUsersMapper--->baseMapper
     * BaseServiceImpl<SysUsersForm>-->
     *     public BaseServiceImpl(BaseMapper baseMapper) {
     *         this.baseMapper = baseMapper;
     *     }
     * 1.将sysUsersMapper传到了service
     */

    /**
     * 通过构造方法传一个baseMapper进来
     * 即子类注入一个BaseMapper
     *
     * @param baseMapper 传入的baseMapper
     */
    public SysUsersServiceImpl(BaseMapper baseMapper) {
        super(baseMapper);
    }
}

3.编写controller

package com.zw.sys.controller;

import com.zw.common.Result;
import com.zw.sys.query.SysUsersQuery;
import com.zw.sys.service.ISysUsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @ClassName:SysUsersController
 * @Description: TODO
 * @Author: KevinZeng
 * @Date 2020/1/8 下午 11:40
 */
@Controller
@RequestMapping("sys/user")
public class SysUsersController {

    @Autowired
    private ISysUsersService sysUsersService;

    /**
     * 分页获取用户信息列表
     * @param query
     * @return
     */
    @RequestMapping(value = "list.do")
    @ResponseBody
    public Result queryPage(SysUsersQuery query){
        return sysUsersService.queryPage(query);
    }
}

这里我们查询参数并没有直接使用Query query,选择SysUsersQuery,因为不同的用户查询权限及参数不一样.我们将共同的参数封装到Query中,具体的子类可以进行扩展.

package com.zw.sys.query;

import com.zw.common.base.Query;

/**
 * @ClassName:SysUsersQuery
 * @Description: sys接收查询参数的类
 * @Author: KevinZeng
 * @Date 2020/1/8 下午 11:08
 */
public class SysUsersQuery extends Query {
}

4.编写后端配置文件

4.1数据库配置文件

#
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/car?useUnicode=true&characterEncoding=utf8&useSSL=true
jdbc.username=root
jdbc.password=root
#druid 内置监视器
jdbc.filters=stat,log4j,wall
# 最大连接数
jdbc.maxActive=20
# 最小连接数
jdbc.minIdle=1

4.2日志配置文件

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.3spring事务配置文件

<?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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--引入数据库配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--配置mapper映射文件-->
        <property name="mapperLocations">
            <array>
                <value>classpath*:mapper/sys/*.xml</value>
            </array>
        </property>
        <!--配置插件-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor"/>
            </array>
        </property>
        <!--配置别名-->
        <property name="typeAliasesPackage" value="com.zw.sys.vo"/>
    </bean>
    <!--配置mapper接口代理对象的生成-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--需要扫描的mapper接口的包-->
        <property name="basePackage" value="com.zw.sys.mapper,com.zw.bussi.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置声明式事务-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

4.4springmvc配置文件

<?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/mvc"
       xmlns:conetxt="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 https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--导入配置文件-->
    <import resource="spring-tx.xml"/>
    <!--配置包扫描-->
    <conetxt:component-scan base-package="com.zw"/>
    <!--配置springmvc映射器和适配器-->
    <context:annotation-driven/>
</beans>

5.项目配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置springmvc-->
    <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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--配置编码过滤器-->
    <filter>
        <filter-name>charsetFilter</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>charsetFilter</filter-name>
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>
</web-app>

6.测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值