一、准备工作:
jar包(jar包版本不做硬性要求):
javax.servlet-api-3.1.0.jar : 监听使用,非必须
junit-*.jar ,hamcrest-core-1.3.jar : 单元测试
mybatis-spring-1.3.0.jar: MyBatis-Spring适配包
mybatis-3.4.4.jar:mybatis ORM包
spring-jdbc-4.3.18.RELEASE.jar, spring-context-4.3.18.RELEASE.jar
mysql-connector-java-5.1.42.jar
二、工程细节
本次案例没有使用maven工程,工程结构如下:
定义 映射文件、映射接口、实体类:
package com.chaol.mapper;
import com.chaol.vo.LsjmUser;
/*
*映射接口
*/
public interface LsjmUserMapper {
public LsjmUser getUserByName();
}
package com.chaol.vo;
public class LsjmUser {
private String uname;
private String pwd;
private String phone;
private String address;
private String breed_type;
private String field_size;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBreed_type() {
return breed_type;
}
public void setBreed_type(String breed_type) {
this.breed_type = breed_type;
}
public String getField_size() {
return field_size;
}
public void setField_size(String field_size) {
this.field_size = field_size;
}
@Override
public String toString() {
return "LsjmUser [uname=" + uname + ", pwd=" + pwd + ", phone=" + phone + ", address=" + address
+ ", breed_type=" + breed_type + ", field_size=" + field_size + "]";
}
}
定义控制层(这里暂且叫做控制层):
package com.chaol.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.chaol.mapper.LsjmUserMapper;
import com.chaol.service.LsjmUserService;
import com.chaol.vo.LsjmUser;
@Service
public class LsjmUserServiceImpl implements LsjmUserService {
@Autowired
private LsjmUserMapper lsjmUserMapper;
@Override
public LsjmUser getUser() {
return lsjmUserMapper.getUserByName();
}
}
定义spring配置文件applicationContext.xml:
定义 junit 测试类:
package com.chaol.user;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.chaol.service.impl.LsjmUserServiceImpl;
public class TestUser {
private LsjmUserServiceImpl user = null;
@Before
public void getBefore(){
String xmlPath = "WebContent/WEB-INF/config/base/applicationContext.xml";
ApplicationContext ac = new FileSystemXmlApplicationContext(xmlPath);
user = ac.getBean(LsjmUserServiceImpl.class);
}
@Test
public void getUser(){
System.out.println(user.getUser());
}
}
junit 测试类运行结果(告警信息是我没有加载log4j,这里忽略):
搭建工程中遇到的问题:
运行测试类 报如下错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.chaol.dao.LsjmUserMapper.getAllUser
at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:225)
at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:48)
.
.
这样的工程结构写法肯定是没有错的,没有说一定要强制把哪些文件放在一起的说法 , 但是此时,spring配置文件中配置会话工厂的地方要加一行,指定mapperLocations的配置:
百度了一下:映射文件 和 映射接口 不仅要是 同一个包下,而且要同名, 同包同名的条件下,才可以省略mapperLocations的配置,此时spring自动扫描同名同包的*Mapper.xml 并装配到Mapper.class。
后面调整目录结构为,让映射文件和映射接口都在com.chaol.mapper包下,且保持名字一致,此时在会话工厂中就可以不用配置mapperLocation属性了: