将spring和mybatis框架整合到一起
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- c3p0连接池 -->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="password" value="${passWord}"/>
<property name="jdbcUrl" value="${url}"/>
</bean>
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<list>
<value>classpath:com/mr/mapper/*-Mapper.xml</value>
</list>
</property>
<property name="typeAliasesPackage" value="com.mr.entity"/>
</bean>
<!-- 自动配置dao层(dao层的Mapper可以直接通过spirng注入) -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mr.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!-- 自动扫描bean ,把做了注解的类转为bean(使用这句话就可以用spring注解) -->
<context:component-scan base-package="com.mr"/>
<context:annotation-config />
<!-- 事务配置 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
创建数据表
创建实体类,使用注解模式
package com.mr.entity;
import org.apache.ibatis.type.Alias;
import org.springframework.stereotype.Component;
@Alias("usersBean")
@Component
public class UsersBean {
private int uId;
private String uName;
private int uAge;
private String uAddress;
private String uTel;
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public int getuAge() {
return uAge;
}
public void setuAge(int uAge) {
this.uAge = uAge;
}
public String getuAddress() {
return uAddress;
}
public void setuAddress(String uAddress) {
this.uAddress = uAddress;
}
public String getuTel() {
return uTel;
}
public void setuTel(String uTel) {
this.uTel = uTel;
}
}
编写持久层
SqlSessionFactory由SqlSessionFactoryBuilder获得,从SqlSessionFactory可获得SqlSession的实例。SqlSession包含了面向对象sql命令所需的所有方法,可通过SqlSession实例直接执行已经映射的sql语句。映射的实例需要具体到哪个mapper文件中执行sql代码。
封装以上三个对象:
package com.mr.entity;
import org.apache.ibatis.type.Alias;
import org.springframework.stereotype.Component;
@Alias("usersBean")
@Component
public class UsersBean {
private int uId;
private String uName;
private int uAge;
private String uAddress;
private String uTel;
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public int getuAge() {
return uAge;
}
public void setuAge(int uAge) {
this.uAge = uAge;
}
public String getuAddress() {
return uAddress;
}
public void setuAddress(String uAddress) {
this.uAddress = uAddress;
}
public String getuTel() {
return uTel;
}
public void setuTel(String uTel) {
this.uTel = uTel;
}
}
创建UserDao接口以及UserDaoImpl实现类,UserDaoImpl中要写具体的CRUD方法,该方法要用到SqlSessionFactory、SqlSession、mapper这三个对象,这三个对象都以封装,故UserDaoImpl既要实现UserDao接口还要继承BaseDaoImpl类,并重写构造方法,调用父类的构造方法,这样程序就可以获得mapper对象:
package com.mr.dao.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.mr.dao.UserDao;
import com.mr.entity.UsersBean;
@Repository
public class UserDaoImpl extends BaseDaoImpl<UserDao> implements UserDao {
//构造函数调用父类的构造方法
public UserDaoImpl() {
super();
this.setMapper(UserDao.class);
}
//查询所有用户
@Override
public List<UsersBean> getAllUser() {
// TODO Auto-generated method stub
return this.getMapper().getAllUser();
}
//根据用户ID查询用户信息
public List<UsersBean> getUserById(int id){
return this.getMapper().getUserById(id);
}
//修改用户信息
public void updUser(UsersBean usersBean) {
this.getMapper().updUser(usersBean);
}
//删除用户
@Override
public void delUser(int uId) {
// TODO Auto-generated method stub
}
}
编写业务层
id名称与查询方法getmapper().后的接口名称一致。resultType是查询结果返回类型,因为我们在方法中设定的返回值为users类型的list,故把所有返回值设定成实体类类型。
<?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.mr.dao.UserDao">
<select id="getAllUser" resultType="usersBean">
select * from users
</select>
<select id="getUserById" resultType="usersBean" parameterType="int">
select * from users where uId = #{id}
</select>
<update id="update" parameterType="usersBean">
update Users set uName=#{uName},uAge=#{uAge} where uId=#{uId}
</update>
<delete id="delete" parameterType="int">
delete from Users where uId=#{id}
</delete>
</mapper>
实现业务层
创建业务接口service,下面controller类中创建service对象根据这个名字匹配
package com.mr.service;
import java.util.List;
import com.mr.entity.UsersBean;
public interface UserService {
List<UsersBean> list();
}
通过spring注解方式把dao层类注入
package com.mr.service.impl;
import java.util.List;
import org.springframework.beans.factory .annotation.Autowired;import org.springframework.stereotype.Service;
import com.mr.dao.UserDao;
import com.mr .entity.UsersBean;
@Service(" userService")
public class UserServicelmpl {
@Autowired
UserDao userDao;
public List<UsersBean> getAllUser(){return userDao.getAllUser();
}
}
创建控制层,controller代替servlet
package com.mr.controller;
import java.lang.ProcessBuilder.Redirect;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.mr.dao.UserDao;
import com.mr.entity.UsersBean;
@Controller()
@RequestMapping("userController")
public class UserController {
@Autowired
UserDao userDao;
@RequestMapping("/getAllUser")
public ModelAndView getAllUser() {
//创建一个List集合用于接收Service层方法的返回值
List<UsersBean> listUser = userDao.getAllUser();
//创建一个ModelAndView对象 括号里面的参数是指定要跳转到哪个jsp页面
ModelAndView mav = new ModelAndView("getAll");
//通过addObject()方法 我们把要存的值存了进去。
mav.addObject("listUser", listUser);
//最后把ModelAndView对象返回出去
return mav;
}
@RequestMapping("/getUserById")
public ModelAndView getUserById(@Param("uId")Integer uId) {
ModelAndView mav = new ModelAndView("toUpd");
List<UsersBean> list = userDao.getUserById(uId);
mav.addObject("list", list);
return mav;
}
@RequestMapping("/update")
public String toUpd(UsersBean usersBean){
userDao.updUser(usersBean);
return "forward:getAllUser";
}
public String delete(@Param("uId")Integer uId) {
userDao.delUser(uId);
return "forward:getAllUser";
}
}
配置springmvc
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置静态资源加载 -->
<mvc:resources location="/WEB-INF/jsp" mapping="/jsp/**"/>
<mvc:resources location="/WEB-INF/js" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/css" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/img" mapping="/img/**"/>
<!-- 扫描控制器 -->
<context:component-scan base-package="com.mr.controller"/>
<!-- 配置指定的控制器-->
<bean id="userController" class="com.mr.controller.UserController"/>
<!-- 自动扫描组件 -->
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
</beans>
jsp页面展示
index页面:做跳转用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" value="查询所有" onclick="toGetAll()"/>
</body>
<script type="text/javascript">
function toGetAll(){
location.href="userController/getAllUser";
}
</script>
</html>
getall页面:显示查询结果
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>
序号
</td>
<td>
姓名
</td>
<td>
年龄
</td>
<td>
操作
</td>
</tr>
<c:forEach items="${listUser}" var ="list">
<tr>
<td>
${list.uId }
</td>
<td>
${list.uName }
</td>
<td>
${list.uAge }
</td>
<td>
<input type="button" value="修改" onclick="toUpd(${list.uId})"/>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<script>
function toUpd(id){
location.href="getUserById?uId="+id;
}
</script>
查询结果