【学习笔记】SSM整合篇(二)

简介: 【学习笔记】SSM整合篇(二)

实体类的创建:


例如我项目其中的一个:

image.png



接口的编写和测试

Dao层的Mapper接口

我们就拿上图的 UserMapper 作为一个例子。


UserMapper 接口:


public interface UserMapper {
    /**
     * 注册用户
     * @param name 用户名
     * @param passWord 密码
     * @return 返回是否注册成功,若为1即为成功
     */
    int register(@Param("name")String name,@Param("passWord")String passWord);
    /**
     * 根据用户名和密码来获取User
     * @param name 用户名
     * @param passWord 密码
     * @return 用户名
     */
    String getUserByNameAndPaw(@Param("name")String name,@Param("passWord")String passWord);
    /**
     * 根据用户的用户名来获取用户
     * @param name 用户名
     * @return 用户名
     */
    String getUserByName(String name);
    /**
     * 根据用户名修改密码
     * @param name 用户名
     * @param passWord 密码
     * @return 返回是否修改数据库的行数
     */
    int updatePassWord(@Param("name")String name,@Param("passWord")String passWord);
    /**
     * 保存头像地址到数据库
     */
    int saveUserImg(@Param("user_name")String name , @Param("userImg")String userImg);
}



编写对应的xml文件:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaobao.dao.UserMapper">
    <insert id="register" parameterType="String">
        insert into notes.user (user_name,user_password)
                    values (#{name},#{passWord});
    </insert>
    <select id="getUserByNameAndPaw" parameterType="String" resultType="String">
        select user_name from notes.user where user_name = #{name} and user_password = #{passWord}
    </select>
    <select id="getUserByName" parameterType="String" resultType="String">
        select user_name from notes.user where user_name = #{name}
    </select>
    <update id="updatePassWord" parameterType="String">
        update notes.user
        set user_password =#{passWord}
        where user_name =#{name};
    </update>
    <update id="saveUserImg" parameterType="String">
        UPDATE notes.user
        SET userImg = #{userImg}
        WHERE user_name = #{user_name}
    </update>
</mapper>



Service层的接口

上述中我们编写完毕 Dao 的 Mapper 接口,而 Mapper 层接口就是为了服务 Service 的业务需求。按照我们上述的例子我们可以来看 Service 层的需求编写。


接口:


public interface UserService {
    /**
     * 前端传输后端注册信息,返回前端result
     * @param userName 用户名
     * @param passWord 用户密码
     * @return 则return Result.error(2,"用户名已存在",null);
     * 注册成功则return Result.success(null);不需要回传数据。
     */
    public Result<User> register(String userName,String passWord);
    /**
     * 验证登入信息
     * @param userName 用户名
     * @param passWord 用户密码
     * @return 一共返回三个结果
     * Result.error(2,"用户名不存在",null);
     * Result.error(2,"密码错误",null);
     * Result.success(user.getUsername());
     */
    public Result<User> login(String userName,String passWord);
    /**
     * 更新用户密码
     * @param userName 用户名
     * @param passWord 用户密码
     * @return Result.success(null)
     */
    public Result<User> updatePassWord(String userName,String passWord);
    public Result<User> saveUserImg(String userImg, String name);
}




接口的实现类:


@Autowired
    private UserMapper userMapper;
    @Override
    public Result<User> register(String userName, String passWord) {
        try {
            String name = userMapper.getUserByName(userName);
            if (name == null) {//用户名不存在
                userMapper.register(userName, passWord);//注册信息
                return Result.success(null);
            } else {//用户名存在4
                return Result.error(2, "用户名已存在", null);
            }
        }catch (Exception e){
            e.printStackTrace();
            return Result.error(2, "出错了请稍后再试!", null);
        }
    }
    @Override
    public Result<User> login(String userName, String passWord) {
        try {
            String nameByName = userMapper.getUserByName(userName);
            String nameByNameAndPwd = userMapper.getUserByNameAndPaw(userName, passWord);
            if (nameByName == null) {
                return Result.error(2, "用户名不存在", null);
            } else if (nameByNameAndPwd == null) {
                return Result.error(2, "密码错误", null);
            } else {
                return Result.success(nameByName);
            }
        }
        catch (Exception e){
            e.printStackTrace();
            return Result.error(2, "出错了请稍后再试!", null);
        }
    }
    @Override
    public Result<User> updatePassWord(String userName, String passWord) {
        try{
        userMapper.updatePassWord(userName,passWord);
        return Result.success(null);
    }catch (Exception e){
            e.printStackTrace();
            return Result.error(2, "出错了请稍后再试!", null);
        }
    }
    @Override
    public Result<User> saveUserImg(String userImg, String name) {
        try {
            userMapper.saveUserImg(name ,userImg);
            return Result.success(userImg);
        }
        catch (Exception e){
            e.printStackTrace();
            return Result.error(2, "出错了请稍后再试!", null);
        }
    }
    public void setUserMapper(UserMapper userMapper) {
        try{
        this.userMapper = userMapper;
    }catch (Exception e){
            e.printStackTrace();
        }
    }




Spring层的配置文件

Mybatis

整合 Mybatis 则是使用 Spring-dao.xml 来进行一个配置。


扫描数据库的配置文件:


   <!--1.关系数据库配置文件   通过Spring配置-->

<!--1.关系数据库配置文件   通过Spring配置-->
    <context:property-placeholder location="classpath:database.properties"/>

导入数据源:


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <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>


绑定Mybatis的配置文件:


SqlSessionFactory需要注入数据源跟mybatis路径,这样mybatis-config.xml配置的内容才能生效


 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--绑定Mybatis的配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>


扫描映射器:


配置 dao 接口扫描包,动态的实现了dao接口可以注入到Spring容器中


 

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactoryBeanName-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--要扫描的dao包-->
        <property name="basePackage" value="com.xiaobao.dao"/>
    </bean>


功能和mybatis-config中 mappers 是一样的。都是扫描Mapper,用来配置需要加载的 sql 映射配置文件路径的。


 

<mappers>
        <package name="com.xiaobao.dao"/>
    </mappers>
>


文件上传配置:


 

<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding" value="utf-8"/>
        <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
        <property name="maxUploadSize" value="10485760"/>
        <property name="maxInMemorySize" value="40960"/>
    </bean>


使用c3p0连接池的完整版:


 

<context:property-placeholder location="classpath:database.properties"/>
    <bean id="dataSource" 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}"/>
        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>
    <!--3.sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--绑定Mybatis的配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
    <!--4.配置dao接口扫描包,动态的实现了dao接口可以注入到Spring容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactoryBeanName-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--要扫描的dao包-->
        <property name="basePackage" value="com.xiaobao.dao"/>
    </bean>
    <!--文件上传配置-->
    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding" value="utf-8"/>
        <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
        <property name="maxUploadSize" value="10485760"/>
        <property name="maxInMemorySize" value="40960"/>
    </bean>
</beans>




相关文章
java202304java学习笔记第六十五天-ssm-声明式控制-事务参数的配置1
java202304java学习笔记第六十五天-ssm-声明式控制-事务参数的配置1
30 0
|
4月前
|
前端开发 Java 数据库连接
【1024程序员节】RestFul,mvc拦截器,SSM基本整合-学习笔记
【1024程序员节】RestFul,mvc拦截器,SSM基本整合-学习笔记
65 1
java202304java学习笔记第六十六天-ssm-mybatis的dao层实现1
java202304java学习笔记第六十六天-ssm-mybatis的dao层实现1
32 0
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-foreach之2
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-foreach之2
47 0
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-if之1
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-if之1
33 0
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
52 0
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门2
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门2
38 0
java202304java学习笔记第六十七天-ssm-动态sql-知识小结
java202304java学习笔记第六十七天-ssm-动态sql-知识小结
52 0
java202304java学习笔记第六十七天-ssm-动态sql-一对多配置2
java202304java学习笔记第六十七天-ssm-动态sql-一对多配置2
52 0
java202304java学习笔记第六十七天-ssm-动态sql-一对多配置
java202304java学习笔记第六十七天-ssm-动态sql-一对多配置
57 0