框架篇:MyBatis+Spring+SpringMVC整合框架
前言:
准备工作:
1/安装并配置java运行环境
2/数据库的安装配置(Mysql)
3/安装并配置服务器(Tomcat)
4/Maven
5/ IntelliJIDEA的安装配置(本人使用的主要软件是IntelliJIDEA,没用eclipse什么的)
6/ 使用IntelliJIDEA创建一个web app项目。
导包
不同于以往的导包,由于我们创建的是maven的webapp项目,所以现在只需配置下pomxml这个配置文件,系统会自动到maven的中央仓库去下载相应的包.
本人的pom.xml配置文件如下
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 引入Servlet的依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <!--整合MyBatis--> <!--MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> <!--整合spring 同时也包含了springmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!--C3p0--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.10.RELEASE</version> </dependency> <!--spring和mybatis整合--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--jackson依赖--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.1</version> </dependency> </dependencies> <build> <finalName>SSM</finalName> <resources><!--加载java类中的xml配置文件--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>配置后运行下maven,就会自动向中央仓库下载相应的包啦!
MyBatis搭建
先看一下项目的结构流程:
我们先配置mybatis框架的配置:mybatis_config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ssm/entity/User.xml"/>
</mappers>
</configuration>
mybatis配置文件就配置好了,然后我们来建实体类
User
package com.ssm.entity; public class User { private int uid; private String uname; private String upass; public User() { } public User(String uname, String upass) { this.uname = uname; this.upass = upass; } public User(int uid, String uname, String upass) { this.uid = uid; this.uname = uname; this.upass = upass; } 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 String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } @Override public String toString() { return "User{" + "uid=" + uid + ", uname='" + uname + '\'' + ", upass='" + upass + '\'' + '}'; } }这时我们就需要写映射文件来对数据进行sql语句操作了,但是我们需要先把Dao的接口写了。
IUserDaos
package com.ssm.dao; import com.ssm.entity.User; import java.util.List; public interface IUserDaos { //查询单个 public User getUserById(int uid); //查询所有 public List<User> getAllUsers(); //添加 public boolean addUser(User user); //删除 public int deleteUser(int uid); //修改 public void updateUser(User user); }然后就是映射文件了:User.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.ssm.dao.IUserDaos"> <!--查询单个对象 id名要与Dao接口的方法名相同 parameterType为返回的参数类型,resultType为返回的结果类型--> <select id="getUserById" parameterType="int" resultType="com.ssm.entity.User"> select * from user where uid=#{uid}; </select> <!--查询集合--> <select id="getAllUsers" resultType="com.ssm.entity.User"> select * from user; </select> <!--添加数据--> <select id="addUser" parameterType="com.ssm.entity.User" resultType="com.ssm.entity.User"> insert into user(uname,upass) values(#{uname},#{upass}); </select> <!--删除数据--> <select id="deleteUser" parameterType="int"> delete from user where uid=#{uid}; </select> <!--修改数据--> <select id="updateUser" parameterType="com.ssm.entity.User" resultType="com.ssm.entity.User"> update user set uname=#{uname},upass=#{upass} where uid=#{uid}; </select> </mapper>ok,前提工作都弄好了,现在我们在man下面创建一个测试类test,把它标记为
然后我们写一个MyBatis的测试类,
package TestMyBatis; import com.ssm.dao.IUserDaos; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; public class MybTest { @Test public void tests() throws Exception{ //测试mybatis SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml")); SqlSession sqlSession=sqlSessionFactory.openSession(); IUserDaos iUserDaos=sqlSession.getMapper(IUserDaos.class); iUserDaos.deleteUser(3); System.out.println(iUserDaos.getAllUsers().size()); sqlSession.commit(); sqlSession.close(); } }如果能够执行命令的话,说明MyBatis框架已经搭建成功了!
MyBatis+Spring搭建:
需要用到c3p0,所以我们先建一个db.properties文件,配置如下
#连接名
uname=root
#密码
upass=123
#路径
url=jdbc:mysql://localhost:3306/test
#连接驱动
driver_Class=com.mysql.jdbc.Driver
#初始化大小
initPoolSize = 3
#池子最大值
maxPoolSize = 20
接下来我们就建一个spring的xml配置文件,applicationContext.xml(其实和ssh中的一样,不过其中的事物配置我们可以不需要配置了,其它的配置文件也不需要了,只需要这一个配置文件就可以了,是不是觉得少了很多代码呢?),之前的mybatis-config.xml配置文件中连接mysql的代码就可以不需要了,映射文件也不需要了。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--加载db.properties-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${uname}"></property>
<property name="password" value="${upass}"></property>
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver_Class}"></property>
<property name="initialPoolSize" value="${initPoolSize}"></property>
<property name="maxPoolSize" value="${maxPoolSize}"></property>
</bean>
<!--配置sqlsessionfacory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--映射数据源-->
<property name="dataSource" ref="dataSource"></property>
<!--加载mybatis文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!--加载映射文件-->
<property name="mapperLocations" value="classpath:com/ssm/entity/*.xml"></property>
</bean>
<!--配置dao的接口 直接配置整个dao包,就只需要配置一次就好了,不过之后再调用时别名要是类的小写名-->
<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.dao"></property>
</bean>
<!--配置Dao,personDao 详细配置到包下面的类名-->
<!--<bean id="iUserDaos" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>-->
<!--<property name="mapperInterface" value="com.ssm.dao.IUserDaos"></property>-->
<!--</bean>-->
</beans>
ok,配置文件工作已经做好了,下面我们来对它进行测试,在测试文件下中创建一个spring的测试类:
package TestMyBatis;
import com.ssm.dao.IUserDaos;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void testspring(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDaos iUserDaos= (IUserDaos) applicationContext.getBean("iUserDaos");
System.out.println(iUserDaos.getAllUsers().size());
}
}
如果出现了数据呐那就说明mybatis+spring的结合是没有问题的哦!
最后:MyBatis+Spring+SpringMVC搭建
要先在java下面创建一个controller类
然后在创建Springmvc的配置文件(直接创建file,头部自己写):springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置扫描器-->
<context:component-scan base-package="com.ssm.controller"></context:component-scan>
<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--配置注解解析器 别忘记了,有可能在转jackson时会报406的错误 得不到值-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
接下来我们该配置web.xml了:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list> //修改最开始的响应界面
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
然后我们在controller包建类,实现springmvc的业务方法
package com.ssm.controller;
import com.ssm.dao.IUserDaos;
import com.ssm.entity.User;
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.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.PrintWriter;
import java.util.List;
@Controller
public class UserController {
@Autowired
private IUserDaos iUserDaos;
@RequestMapping("delete")
public void delete(HttpServletResponse response,int uid) throws Exception{
PrintWriter out=response.getWriter();
int n=iUserDaos.deleteUser(uid);
System.out.println(iUserDaos.getAllUsers().size());
out.write("1");
out.close();
}
@ResponseBody //加上会自动转jackson格式
@RequestMapping("getAll")
public List<User> getAll() throws Exception{
List<User> list=iUserDaos.getAllUsers();
System.out.println("进入:");
//request.getSession().setAttribute("list",list);
//System.out.println("session:"+request.getSession().getAttribute("list"));
return list;
// "redirect:/user.jsp";
}
}
好了!现在最后一步了,在页面中把值绑定出来
先在webapp下面建一个jsp页面:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/1/14
Time: 0:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户管理</title>
<script src="jquery/jquery.min.js"></script>
</head>
<body>
<div class="table-responsive">
<table class="table" >
<thead>
<tr>
<th data-field="state" data-checkbox="true" ></th>
<th>用户编号</th>
<th>用户名</th>
<th>密码</th>
<th>操作</th>
</tr>
</thead>
<tbody id="body">
</tbody>
</table>
</div>
<script type="text/javascript">
//加载数据
$(function(){
getAll();
});
//绑定数据
function getAll(){
$.ajax({
type:"post",
url:"/getAll.action",
dataType:"json", //请求的返回类型
success:function (data) {
//var result=eval(data.rows);
var tr="";
for(var i=0;i<data.length;i++){
tr+= "<tr>"
+"<td><input class='checkboxes' type=\"checkbox\" name=\"checkbox\" value="+data[i].uid+"></td>"
+"<td>" + data[i].uid+ "</td>"
+"<td>" + data[i].uname + "</td>"
+"<td>" + data[i].upass + "</td>"
+"<td οnclick='deletets(this,"+data[i].uid+")'> <button type='button' class='btn btn-xs btn-link'>删除</button></td>"
+ "</tr>";
}
$('#body').html(tr);
}
})
}
</script>
</body>
</html>
得到结果如下则说明全部的整合就完成了,继续写你自己的操作吧!