本文围绕Spring整合Mybatis,实现用户的登陆验证java
JDK 11 MySQL 8 Maven 3.6.3
<dependencies> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--包含 spring 核心包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!--c3p0--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!-- mybatis与spring整合的jar包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.3</version> </dependency> <!--日志--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!--aop--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!--jdk11以上版本javax.annotation.Resource不存在,须要手动引入后才能使用@Resource注解--> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.2</version> </dependency> <!--spring-jdbc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency> </dependencies> <build> <!--资源导入问题--> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
db.properties
注:MySQL 8 须要添加时区设置mysql
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false jdbc.username=root jdbc.password=125803
log4j.propertiesweb
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/test.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
t_user表结构
spring
<?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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--自动装配,扫描包的范围--> <context:component-scan base-package="com.wang"/> <!--加载properties配置文件--> <context:property-placeholder location="classpath:db.properties"/> <!--aop--> <aop:aspectj-autoproxy/> <!--配置c3p0数据源--> <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}"/> </bean> <!--配置事务管理器--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--设置事务加强--> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!--aop切面--> <aop:config> <aop:pointcut id="servicePointcut" expression="execution(* com.wang.service..*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/> </aop:config> <!--配置sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/wang/dao/*.xml"/> </bean> <!--配置扫描器--> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--扫描全部映射接口类--> <property name="basePackage" value="com.wang.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>
<?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> <!--log4j,驼峰命名转换--> <settings> <setting name="logImpl" value="LOG4J"/> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!--定义别名--> <typeAliases> <package name="com.wang.pojo"/> </typeAliases> </configuration>
(1).实体类(pojo)sql
import lombok.Data; @Data public class User { private int userId; private String userName; private String userPassword; }
(2).持久层(dao)express
import com.wang.pojo.User; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface UserMapper { @Select("select user_name as userName,user_password as userPassword from mybatis.t_user") List<User> getUserList(); }
(3).业务层(service)apache
import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class UserService { @Resource private UserMapper mapper; public List<User> getUserList(){ return mapper.getUserList(); } }
(4).控制层(controller)api
import javax.annotation.Resource; import java.util.List; @Controller public class UserController { @Resource private UserService service; public List<User> getUserList(){ return service.getUserList(); } }
(5).运行测试mybatis
public class Start { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserController userController = (UserController) context.getBean("userController"); List<User> userList = userController.getUserList(); for (User user : userList) { System.out.println(user); } } }
(6).测试结果:可以查询并输出,说明整合完成
mvc
功能说明:
查询用户使用用户名是否存在,密码是否正确
userMapper
import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @Repository public interface UserMapper { User queryUserByName(@Param("userName") String name); }
userMapper.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.wang.dao.UserMapper"> <sql id="query-user"> <if test="userName != null"> user_name = #{userName} </if> </sql> <select id="queryUserByName" resultType="user"> select * from mybatis.t_user <where> <include refid="query-user"></include> </where> </select> </mapper>
该实体类将最后的结果输出显示给用户
import lombok.Data; @Data public class ResultCode { private int code; private String msg; }
功能说明:
1.获取用户输入的用户名和密码
2.判断输入是否为空
3.判断输入用户名是否存在
3.若用户存在,判断密码是否正确
3.若用户存在,密码正确,登陆成功!
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class UserService { @Resource private UserMapper mapper; public ResultCode login(String name, String pwd){ ResultCode res = new ResultCode(); User user = mapper.queryUserByName(name); if (name == "" || pwd == ""){ res.setCode(500); res.setMsg("用户名或密码为空,请从新输入!"); return res; } if (user == null){ res.setCode(500); res.setMsg("用户不存在!"); return res; } if (!pwd.equals(user.getUserPassword())){ res.setCode(500); res.setMsg("密码错误!"); return res; } res.setCode(200); res.setMsg("登陆成功!"); return res; } }
功能介绍
调用业务层功能
import org.springframework.stereotype.Controller; import javax.annotation.Resource; @Controller public class UserController { @Resource private UserService service; public ResultCode login(String name, String pwd){ return service.login(name, pwd); } }
import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Start { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserController userController = (UserController) context.getBean("userController"); ResultCode res = userController.login("admin", "123456"); System.out.println(res); } }