按照上次的博客:
基于SpringMVC+Spring+Hibernate+Maven+Bootstrap的简单Demo
这次把Hibernate转换成Mybatis 3.4.1 基本变化在于数据操作层。
下面贴出代码变动的地方(没有贴出的跟上面一条博客相同,项目运行效果也是一致的),以及此次学习Mybatis用的参考文档.有关Ioc可以参考Spring Ioc详细配置与使用,有关AOP可以参考SpringAOP详细配置与使用,有关Mybatis可以参考Mybatis的工作流程及其原理与解析
目录结构图 :
bean.xml :
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" 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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 打开Spring的Annotation支持 -->
<context:annotation-config />
<!-- 设定Spring 去哪些包中找Annotation -->
<context:component-scan base-package="com.ctc" />
<!-- 导入Src目录下的jdbc.properties文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="DataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean>
<!-- 查找类路径下的映射器并自动将它们创建成 MapperFactoryBean.
MapperFactoryBean 创建的代理类实现了 UserMapper 接口,并且注入到应用程序中.
basePackage 属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号 作为分隔符设置多于一个的包路径.
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ctc.Mapper" />
</bean>
<!-- 开启Spring的事务处理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="DataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!-- 创建Spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:bean.xml</param-value>
</context-param>
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- SpringMVC中使用request -->
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- 分页框架pager-taglib -->
<filter>
<filter-name>PageFilter</filter-name>
<filter-class>com.ctc.Common.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PageFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
sqlMapConfig.xml :
<?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>
<typeAliases>
<typeAlias type="com.ctc.Model.User" alias="User" />
</typeAliases>
</configuration>
User.java :
package com.ctc.Model;
/**
*
* @author Tency
*
* Date 2016/11
*/
public class User {
private int id;
private String userName;
private String passWord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((passWord == null) ? 0 : passWord.hashCode());
result = prime * result + ((userName == null) ? 0 : userName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id != other.id)
return false;
if (passWord == null) {
if (other.passWord != null)
return false;
} else if (!passWord.equals(other.passWord))
return false;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;
}
}
UserMapper.java :
package com.ctc.Mapper;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.annotation.MapperScan;
import com.ctc.Model.User;
/**
*
* @author Tency
*
* Date 2016/12
*/
@MapperScan
public interface UserMapper {
List<User> retrieve(String userName,String passWord);
void add(User user);
List<User> retrieveAll(Map<String,Object> map);
int retrieveCount();
User load(int id);
void update(User user);
void delete(int id);
}
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.ctc.Mapper.UserMapper">
<select id="retrieve" parameterType="map" resultType="User">
select * from User where userName=#{0} and passWord=#{1}
</select>
<select id="retrieveAll" parameterType="int" resultType="User">
select * from User limit #{offset},#{size}
</select>
<select id="retrieveCount" resultType="int">
select count(*) from User
</select>
<select id="load" parameterType="int" resultType="User">
select * from
User where id=#{id}
</select>
<insert id="add" parameterType="User">
insert into User (userName,passWord) values (#{userName},#{passWord})
</insert>
<update id="update" parameterType="User">
update User set userName=#{userName} , passWord=#{passWord} where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from User where id=#{id}
</delete>
</mapper>
UserServiceImpl.java :
package com.ctc.ServiceImpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.ctc.Mapper.UserMapper;
import com.ctc.Model.PageConstants;
import com.ctc.Model.Pager;
import com.ctc.Model.User;
import com.ctc.Service.UserService;
/**
*
* @author Tency
*
* Date 2016/11
*/
@Service("userServiceImpl")
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
HttpSession session;
HttpServletRequest request;
@Override
public List<User> checkLogin(@Param("userName")String userName, @Param("passWord")String passWord) {
// TODO Auto-generated method stub
List<User> list= userMapper.retrieve(userName, passWord);
request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
session=request.getSession();
if(!list.isEmpty())
{
session.setAttribute("userName", list.get(0).getUserName());
}
return list;
}
@Override
public void addUser(User user) {
// TODO Auto-generated method stub
this.userMapper.add(user);
}
@Override
public User showUser(int id) {
// TODO Auto-generated method stub
return userMapper.load(id);
}
@Override
public void updateUser(User user) {
// TODO Auto-generated method stub
this.userMapper.update(user);
request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
session=request.getSession();
session.setAttribute("userName", user.getUserName());
}
@Override
public void deleteUser(int id) {
// TODO Auto-generated method stub
this.userMapper.delete(id);
}
@Override
public Pager<User> userList() {
// TODO Auto-generated method stub
Map<String,Object> map = new HashMap<String,Object>();
Pager<User> pager = new Pager<User>();
int size = PageConstants.getSize();
int offset = PageConstants.getOffset();
map.put("size", size);
map.put("offset", offset);
pager.setDatas(userMapper.retrieveAll(map));
pager.setTotal(userMapper.retrieveCount());
return pager;
}
}