1、已经整合好mybatis
2、相关配置都已经配置
3、debug运行项目,service层中实现对象出现dao
spring.xml
<context:component-scan base-package="com.qianzhihe.mm"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<import resource="classpath:spring-tx.xml"></import>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5242880"></property>
</bean>
spring-mybatis.xml
<context:property-placeholder location="classpath:db.properties">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
</bean>
<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="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qianzhihe.mm.dao"></property>
</bean>
spring-tx.xml
<import resource="classpath:spring-mybatis.xml"></import>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven></tx:annotation-driven>
SqlMapConfig.XML
<typeAliases>
<!-- 扫描包的形式创建别名,别名就是类名,不区分大小写,扫描后可以在映射配置文件中直接使用pojo、entity中的类,不需要再写全限定名 -->
<package name="com.qianzhihe.mm.pojo"/>
<package name="com.qianzhihe.mm.entity"/>
</typeAliases>
UserController
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/login")
public Result login(@RequestBody User parameterUser, HttpSession session) throws IOException {
userService = new UserServiceImpl();
try {
User loginUser = userService.findUser(parameterUser);
System.out.println(loginUser);
session.setAttribute(Constants.USER_SESSION_KET,loginUser);
return new Result(true,"登录成功",loginUser);
} catch (Exception e) {
e.printStackTrace();
return new Result(false,e.getMessage());
}
}
}
UserService接口
public interface UserService {
User findUser(User parameterUser) throws IOException;
}
UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User findUser(User parameterUser) throws IOException {
//**首先判断用户名是否正确,调用Dao层的方法,根据用户名查找用户
User loginuser = userDao.findUserByUsername(parameterUser.getUsername());
if (loginuser!=null) {
if (parameterUser.getPassword().equals(loginuser.getPassword())) {
return loginuser;
}else {
throw new RuntimeException("密码错误");
}
}else{
throw new RuntimeException("用户名错误");
}
}
}
UserDao接口
public interface UserDao {
User findUserByUsername(String username);
}
java.lang.NullPointerException
at com.qianzhihe.mm.service.impl.UserServiceImpl.findUser(UserServiceImpl.java:27)
at com.qianzhihe.mm.controller.UserController.login(UserController.java:38)
通过Debug发现Service层中的 userDao值为null
解决该问题
看看mapper。xml或者sql的返回是否有问题
把这部分配置加到你的spring.xml中
<!-- 扫描 MyBatis 的xxx.mappe.xmlr路径 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations">
<list>
<!--把这个路径改成你的路径,通配符方式。注意:要编写正确,如果不会写通配符,多复制几个value一个个写-->
<value>classpath:com/x/*/mapper/*Mapper.xml</value>
</list>
</property>
</bean>
<!-- 扫描dao -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" autowire="byName">
<!--value为dao所在的所在的路径,用配配符配置-->
<property name="basePackage" value="com.x.*.dao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
未配置mybatis的映射文件