在spring中集成mybatis的有多种,可以完全xml配置,也可以完全走注解。这里记录一个自认为比较简单的配置方法。
项目目录:
1、引用jar包的maven配置。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!--反射生成实体类-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
2、配置spring应用上下文。
在命名空间添加配置:
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring
在xsi:schemaLocation 增加配置:
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
配置如图:
2、配置扫描mybatis的映射mapper接口所在的包和sqlSessionFactory。
<!-- 定义mybaits -->
<!-- mybatis:scan 会自动扫描 com.altnum.mybatis.mapper包中所有接口当作mapper配置,之后自动引入mapper类-->
<mybatis:scan base-package="com.altnum.mybatis.mapper"/>
<!-- 配置sqlSessionFactory org.mybatis.spring.SqlSessionFactoryBean是用于整合spring的bean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"/>
dataSource 这里用的是数据库连接池。这里不给出配置了。
3、com.altnum.mybatis.domain.TestUser. 数据库表映射bean.
package com.altnum.mybatis.domain;
import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class TestUser implements Serializable
{
private Integer id; //id
private String name; //姓名
private String password; //密码
private String sex; //性别
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String toString() {
return ToStringBuilder.reflectionToString(this,ToStringStyle.DEFAULT_STYLE);
}
}
4、mybatis注解映射接口。
mybatis:scan 会自动扫描 com.altnum.mybatis.mapper包中所有接口当作mapper配置,之后自动引入mapper类。
package com.altnum.mybatis.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.altnum.mybatis.domain.TestUser;
public interface TestMapper
{
@Select("select user_id id,user_name name,user_password password,user_sex sex from thnb_user "
+ "where user_id = #{id}")
TestUser findUserWithId(@Param("id") int id);
}
5、测试调用。
在控制层直接注入引用mapper映射接口。
package com.altnum.controller;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.altnum.common.GetUTCTimeUtil;
import com.altnum.mybatis.domain.TestUser;
import com.altnum.server.TestServer;
@Controller
@RequestMapping(value = "/test")
public class TestController
{
@Resource TestServer testServerImpl;
//自动注入userMapper
@Autowired
private com.altnum.mybatis.mapper.TestMapper TestMapper;
private static final Logger logger = LogManager.getLogger(TestController.class);
@RequestMapping(value = "test",method=RequestMethod.POST)
@ResponseBody
public Object test(HttpServletRequest request, HttpServletResponse response,
@RequestBody(required = false) String json)
{
logger.info("test:" + json);
TestUser tu = TestMapper.findUserWithId(1);
logger.info("testMyabtis:" + tu.toString());
return tu.toString();
}
}