SSM整合以及使用MybatisPlus整合实例

1.基本概念
SSM整合以及使用MybatisPlus整合实例_第1张图片
Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

MyBatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2.整合思路

SSM整合以及使用MybatisPlus整合实例_第2张图片
①、表现层,也就是 Controller,由 SpringMVC 来控制,而SpringMVC 是Spring 的一个模块,故不需要整合。
②、业务层,也就是 service,通常由 Spring 来管理 service 接口,我们会使用 xml 配置的方式来将 service 接口配置到 spring 配置文件中。而且事务控制一般也是在 service 层进行配置。
③、持久层,也就是 dao 层,而且包括实体类,由 MyBatis 来管理,通过 spring 来管理 mapper 接口,使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
很明显,spring 在三大框架的整合中占据至关重要的地位,类似于一个大管家,将 MyBatis 和 SpringMVC 揉合在一起。
2.1准备测试数据
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
userId int(11) NOT NULL AUTO_INCREMENT,
userLoginName varchar(10) DEFAULT NULL,
userPwd varchar(10) DEFAULT NULL,
userName varchar(15) DEFAULT NULL,
state int(11) DEFAULT NULL COMMENT ‘state 1启用 0冻结’,
createTime date DEFAULT NULL,
delState int(11) DEFAULT NULL COMMENT ‘delState 删除状态1 删除 0未删除’,
PRIMARY KEY (userId)
) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8;


– Records of t_user


INSERT INTO t_user VALUES (‘1’, ‘luoxian’, ‘123456’, ‘杨晓林’, ‘1’, ‘2018-07-09’, ‘0’);
INSERT INTO t_user VALUES (‘2’, ‘aaaddd’, ‘123456’, ‘是是是’, ‘1’, ‘2018-07-14’, ‘0’);
INSERT INTO t_user VALUES (‘3’, ‘qazwsx’, ‘qazwsx’, ‘吕杰’, ‘0’, ‘2018-09-05’, ‘1’);
INSERT INTO t_user VALUES (‘4’, ‘luoxianxin’, ‘123456’, ‘吕杰’, ‘1’, ‘2018-09-06’, ‘1’);
INSERT INTO t_user VALUES (‘8’, ‘zhangsan’, ‘324234’, ‘张三’, ‘1’, ‘2018-09-04’, ‘1’);
INSERT INTO t_user VALUES (‘9’, ‘lisi’, ‘1234567’, ‘小张’, ‘0’, ‘2018-09-26’, ‘0’);

2.2导入依赖


	4.12
	4.3.8.RELEASE
	3.4.5
	1.3.0
	5.1.38
	1.6.4
	2.9.7
	0.9.5-pre10
	1.2
	3.1.0
	2.2.1
	3.3.2
	1.3.2



	
	
		junit
		junit
		${junit.version}
		test
	

	
	
		org.springframework
		spring-context
		${spring.version}
	
	
		org.springframework
		spring-beans
		${spring.version}
	
	
		org.springframework
		spring-webmvc
		${spring.version}
	
	
		org.springframework
		spring-jdbc
		${spring.version}
	
	
		org.springframework
		spring-aspects
		${spring.version}
	

	
	
		org.mybatis
		mybatis
		${mybatis.version}
	
	
		org.mybatis
		mybatis-spring
		${mybatis.spring.version}
	

	
	
		com.github.abel533
		mapper
		2.3.4
	

	
	
		mysql
		mysql-connector-java
		${mysql.version}
	

	
		org.slf4j
		slf4j-log4j12
		${slf4j.version}
	

	
	
		com.fasterxml.jackson.core
		jackson-databind
		${jackson.version}
	

	
	
		com.mchange
		c3p0
		${c3p0.version}
	

	
	
		jstl
		jstl
		${jstl.version}
	

	
		javax.servlet
		javax.servlet-api
		${servlet-api.version}
		provided
	

	
		javax.servlet.jsp
		javax.servlet.jsp-api
		${jsp-api.version}
		provided
	

	
	
		org.apache.commons
		commons-lang3
		${commons-lang3.version}
	
	
		org.apache.commons
		commons-io
		${commons-io.version}
	




	
		
			maven-war-plugin
			
				3.1
			
		
		
		
			org.apache.maven.plugins
			maven-compiler-plugin
			2.3.2
			
				1.7
				1.7
				UTF-8
			
		
	

2.3 新建db.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123

2.4 新建applicationContext.xml



	
	
	
	
		
			classpath:db.properties
		
	







	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	




	
	
	
	
	




	




	




3.5 新建日志文件log4j.properties

log4j.rootLogger=INFO,Console,File  
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
#文件大小到达指定尺寸的时候产生一个新的文件  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#指定输出目录  
log4j.appender.File.File = logs/ssm.log  
#定义文件最大大小  
log4j.appender.File.MaxFileSize = 10MB  
 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

3.6 新建实体类

public class User {
private int userId;
private String userLoginName;
private String userPwd;
private String userName;
private int state;
private String createTime;
private int delState;

public User(String userLoginName, String userPwd) {
	super();
	this.userLoginName = userLoginName;
	this.userPwd = userPwd;
}

public User(String userName, int state) {
	super();
	this.userName = userName;
	this.state = state;
}

public User(int userId, String userLoginName, String userPwd, String userName, int state, String createTime, int delState) {
	super();
	this.userId = userId;
	this.userLoginName = userLoginName;
	this.userPwd = userPwd;
	this.userName = userName;
	this.state = state;
	this.createTime = createTime;
	this.delState = delState;
}

public User() {
	super();
}

public int getUserId() {
	return userId;
}

public void setUserId(int userId) {
	this.userId = userId;
}

public String getUserLoginName() {
	return userLoginName;
}

public void setUserLoginName(String userLoginName) {
	this.userLoginName = userLoginName;
}

public String getUserPwd() {
	return userPwd;
}

public void setUserPwd(String userPwd) {
	this.userPwd = userPwd;
}

public String getUserName() {
	return userName;
}

public void setUserName(String userName) {
	this.userName = userName;
}

public int getState() {
	return state;
}

public void setState(int state) {
	this.state = state;
}

public String getCreateTime() {
	return createTime;
}

public void setCreateTime(String createTime) {
	this.createTime = createTime;
}

public int getDelState() {
	return delState;
}

public void setDelState(int delState) {
	this.delState = delState;
}

@Override
public String toString() {
	return "User [userId=" + userId + ", userLoginName=" + userLoginName + ", userPwd=" + userPwd + ", userName=" + userName + ", state=" + state + ", createTime=" + createTime + ", delState="
			+ delState + "]";
}

}

3.7 新建Mapper层

//1.查询所有的用户
public interface UserMapper {
public List findUsers();

//2.新增用户
public int addUser(User u);

}

3.8 新建Mapper.xml





	

	
		insert into t_user values
		(null,#{userLoginName},#{userPwd},#{userName},0,now(),0)
	


3.9 新建业务逻辑层
接口层

// 1.查询所有的用户
public interface UserService {
public List findUsers();

// 2.新增用户
public int addUser(User u);
}

接口层实现类

@Service
@Transactional
public class UserServiceImpl  implements UserService{

	@Autowired
	UserMapper userMapper;
	
	@Transactional(readOnly=true)
	@Override
	public List findUsers() {
		return userMapper.findUsers();
	}

	@Override
	public int addUser(User u) {
		return userMapper.addUser(u);
	}
}

3.10 新建控制层

@Controller
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	UserService userService;

	@RequestMapping("/list")
	public String list(Model model){
		List users = userService.findUsers();
		model.addAttribute("users", users);
		return "list";
	}
	
	@RequestMapping("/add")
	public String add(User u){
		int count = userService.addUser(u);
		if(count>0){
			return "forward:/user/list";
		}else{
			return "ridrect:/user/list";
		}
	}
}

@Controller
public class PageController {

	@RequestMapping("/page/{page}")
	public String zhuan(@PathVariable(value="page") String page){
		return page;
	}
}

3.11 SpringMvc配置文件




	
	

	
	
		
		
		
		
	


3.12 Springmvc的web.xml配置



	DispatcherServlet
	org.springframework.web.servlet.DispatcherServlet
		
		
			contextConfigLocation
			classpath:springmvc.xml
		
		1
	
	
		DispatcherServlet
		
		/
	

	
	
		characterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		characterEncodingFilter
		/*
	

3.13 Spring的web.xml配置


		contextConfigLocation
		classpath:applicationContext.xml


	

	org.springframework.web.context.ContextLoaderListener

3.14 页面视图

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>




用户列表



	

用户列表


编号 登录名 真实姓名 状态 创建时间 操作
${u.userId} ${u.userLoginName} ${u.userName} ${u.state} ${u.createTime} 更新 删除

新增用户
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here

用户新增


用户名:
密码:
真实姓名:

使用MybatisPlus

首先将Mybatis换为mybatisplus的包


			com.baomidou
			mybatis-plus
			2.3

需要修改applicationContext.xml




	
	
		
		
	
	
	
	
		
			
				classpath:db.properties
			
		

	
	
	
		
		
		
		
	
	
	
		
		
		
		
		
		
		
	
	
	
		
	
	
	
		
	
	
	

3.实体类需要加注解

@TableName()
@TableId(value="id",type=IdType.Auto)主键自增
@TableFiled(value="列明")

在MybatisPlus中使用插件Mybatis-config.xml




	
		
		//分页插件
	

Plus自动生成代码
首先需要加入maven依赖

 
        
        
            org.apache.velocity
            velocity-engine-core
            2.0
        

自动生成类

package com.lx.utils;

import javax.sql.DataSource;

import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test1 {

	@Autowired
	DataSource ds;

	@Test
	public void testGenerator() {
		// 1. 全局配置
		GlobalConfig config = new GlobalConfig();
		config.setActiveRecord(false) // 是否支持AR模式
				.setAuthor("lx") // 作者G:\demo1\src\main\java
				.setOutputDir("G:\\demo1\\src\\main\\java") // 生成路径
				.setFileOverride(true) // 文件覆盖
				.setIdType(IdType.AUTO) // 主键策略
				.setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I
				// IEmployeeService
				.setBaseResultMap(true).setBaseColumnList(true);

		// 2. 数据源配置
		DataSourceConfig dsConfig = new DataSourceConfig();
		dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
				.setDriverName("com.mysql.jdbc.Driver")
				.setUrl("jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=utf8").setUsername("root")
				.setPassword("root");

		// 3. 策略配置
		StrategyConfig stConfig = new StrategyConfig();
		stConfig.setCapitalMode(true) // 全局大写命名
				.setDbColumnUnderline(true) // 指定表名 字段名是否使用下划线
				.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
				.setTablePrefix("t_").setInclude("t_product"); // 生成的表

		// 4. 包名策略配置
		PackageConfig pkConfig = new PackageConfig();
		pkConfig.setParent("com.lx").setMapper("mapper").setService("service").setController("controller")
				.setEntity("bean").setXml("mapper");

		// 5. 整合配置
		AutoGenerator ag = new AutoGenerator();
		ag.setGlobalConfig(config).setDataSource(dsConfig).setStrategy(stConfig).setPackageInfo(pkConfig);
		// 6. 执行
		ag.execute();
	}

}

你可能感兴趣的:(SSM整合实例)