网上说的namespace 和接口名相同我都看了没什么问题
接口
import com.sztaiji.entity.User;
public interface UserDAO {
public User findByUsername(String username);
public void save(User user);
}
实现类
import javax.annotation.Resource;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;
import com.sztaiji.entity.User;
@Repository("userDAO")
public class UserDAOImpl implements UserDAO {
@Resource(name="sst")
private SqlSessionTemplate sst;
public User findByUsername(String username) {
return sst.selectOne("com.sztaiji.dao.findByUsername", username);
}
public void save(User user) {
sst.insert("com.sztaiji.dao.save", user);
}
}
映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.sztaiji.dao.UserDAO">
<insert id="save" parameterType="com.sztaiji.entity.User">
insert into tb_user(username,pwd,name) values(#{username},#{pwd},#{name})
</insert>
<select id=" findByUsername" parameterType="String" resultType="com.sztaiji.entity.User">
select * from tb_user where username=#{username}
</select>
</mapper>
不是不用写dao的实现类啊, 直接写一个dao的接口就行了,然后直接去对应xml的id了么
1、mapper.xml中没有加入namespace
2、mapper.xml中的方法和接口mapper的方法不对应
3、mapper.xml没有加入到mybatis-config.xml中(即总的配置文件),例外:配置了mapper文件的包路径的除外
4、mapper.xml文件名和所写的mapper名称不相同。
你看看
你的映射文件中,findByUsername前面多了一个空格
select * from tb_user where username=#{username}
第一种是改成这样
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 加载mybatis.cfg.xml文件 -->
<property name="configLocation" value="classpath:mybatis.cfg.xml"></property>
<!-- 自动扫描需要定义类别名的包,将包内的JAVA类的类名作为类别名 -->
<property name="typeAliasesPackage" value="com.demo.beans"></property>
<property name="mapperLocations">
<list>
<value>classpath:mybatis/*/*Mapper.xml</value>
</list>
</property>
</bean>
这个配了吗?
classpath:mybatis/*/*Mapper.xml还有你的路径命名
参数类型要么写全java.lang.String,要么写string小写试试