说明:上篇文章搭建框架是基于注解开发的,很多公司为便于维护一般不采用这种方式,一般采用mapper.xml文件配置,这样可以更好的维护代码。接口我们搭建的框架都是基于mapper.xml文件配置的,首先我们搭建一下框架。
正题:只需要3步就完成框架搭建
首先说明一下工程目录结构:
1.配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MySpringBoot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version>
<mysql-connector.version>5.1.39</mysql-connector.version>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--mybatis依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!--mysql数据库依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!--lombok自动生成实体类中的getset方法-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.properties文件配置
server.port=9090 #视图层控制 用mvc方式访问templates下的HTML #访问后缀 spring.mvc.view.suffix=.html类似Springmvc中的视图文件夹 spring.mvc.view.prefix=classpath:/templates/ #访问后缀 spring.mvc.view.suffix=.html类似Springmvc中的.jsp spring.mvc.view.suffix=.html spring.mvc.static-path-pattern=/static/** #开发时关闭缓存,不然没法看到实时页面 spring.thymeleaf.cache=false #thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一) spring.thymeleaf.prefix = classpath:/static/ spring.thymeleaf.suffix = .html spring.datasource.url=jdbc:mysql://192.168.1.9:3306/test_demo_lqw?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=zp123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mybatis.typeAliasesPackage=com.example.demo.model mybatis.mapperLocations=classpath:mapper/*Mapper.xml #写法不同,不过结果一样 #mybatis.type-aliases-package=com.test.dailyreport.bean #mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml #验证连接的有效性 spring.datasource.primary.test-while-idle=true #获取连接时候验证,会影响性能 spring.datasource.primary.test-on-borrow=false #在连接归还到连接池时是否测试该连接 spring.datasource.primary.test-on-return=false spring.datasource.primary.validation-query=SELECT 1 FROM DUAL #空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟 spring.datasource.primary.time-between-eviction-runs-millis=300000 #连接池空闲连接的有效时间 ,设置30分钟 spring.datasource.primary.min-evictable-idle-time-millis=1800000 spring.datasource.primary.initial-size=5 #指定连接池中最大的活跃连接数. spring.datasource.primary.max-active=50 #指定连接池等待连接返回的最大等待时间,毫秒单位. spring.datasource.primary.max-wait=60000 #指定必须保持连接的最小值 spring.datasource.primary.min-idle=5 #开启驼峰命名转换 mybatis.configuration.map-underscore-to-camel-case=true #sql打印控制台 logging.level.com.example.demo.mapper=debug
3.入口MySpringBootApplication.java文件
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@MapperScan("com.example.demo.mapper") 在数据层配置@Mapper一个功能
@SpringBootApplication//(exclude = {DataSourceAutoConfiguration.class})
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
到此我们的SpringBoot+Mybatis整合已经搭建完成。
接下来是Demo 演示了
控制层 TestController
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* Created by 李庆伟 on 2018/7/24.
*/
@RestController
public class TestController {
@Autowired
private UserService userService;
@RequestMapping("/hello")
public String hello (){
return "this is HelloWord";
}
/**
* 根据id获取user对象
* @return
*/
@RequestMapping("/getUserById")
public User getUserById(){
String id = "0";
return userService.getUserById(id);
}
/**
* 根据id获取Map对象
* @return
*/
@RequestMapping("/getUserMap")
public Map<String,Object> getUserMap(){
String id = "0";
return userService.getUserMap(id);
}
/**
* 添加方法
* @param
* @return String
*/
@RequestMapping("/save")
public String save (){
User user = new User();
user.setId("111");
user.setUserName("XXXX");
int num = userService.save(user);
if(num == 1){
return "save sucess";
}else {
return "save error";
}
}
/**
* 修改方法
* @param
* @return String
*/
@RequestMapping("/update")
public String update (){
User user = new User();
user.setId("111");
user.setUserName("1111111");
int num = userService.update(user);
if(num == 1){
return "update sucess";
}else {
return "update error";
}
}
/**
* 删除
* @param
* @return String
*/
@RequestMapping("/delete")
public String delete (){
User user = new User();
user.setId("111");
int num = userService.delete(user);
if(num == 1){
return "delete sucess";
}else {
return "delete error";
}
}
}
业务层接口UserService
package com.example.demo.service;
import com.example.demo.model.User;
import java.util.List;
import java.util.Map;
/**
* Created by 李庆伟 on 2018/7/24.
*/
public interface UserService {
/**
* 通过id获取用户
* @return
*/
public User getUserById(String id);
/**
* 根据id获取Map对象
* @return
*/
public Map<String,Object> getUserMap(String id);
/**
* 添加方法
* @param user
* @return
*/
public int save(User user);
/**
* 修改方法
* @param user
* @return
*/
public int update(User user);
/**
* 删除
* @param user
* @return
*/
public int delete(User user);
}
业务层接口实现类UserServiceImpl
package com.example.demo.service.impl;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
* Created by 李庆伟 on 2018/7/24.
*/
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
/**
* 通过id获取用户
* @return
*/
@Override
public User getUserById(String id) {
return userMapper.getUserById(id);
}
/**
* 根据id获取Map对象
* @return
*/
public Map<String,Object> getUserMap(String id){
return userMapper.getUserMap(id);
}
/**
* 添加方法
* @param user
* @return
*/
public int save(User user){
return userMapper.save(user);
}
/**
* 修改方法
* @param user
* @return
*/
public int update(User user){
return userMapper.update(user);
}
/**
* 删除
* @param user
* @return
*/
@Transactional
public int delete(User user){
/*
User addUser = new User();
addUser.setId("3333");
addUser.setUserName("3333");
userMapper.save(addUser);
int a = 1/0;
*/
return userMapper.delete(user);
}
}
数据层UserMapper
package com.example.demo.mapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.Map;
/**
* Created by 李庆伟 on 2018/7/24.
*/
@Repository
@Mapper
public interface UserMapper {
/**
* 通过查询能够直接映射到实体类中的属性是因为 配置了驼峰模式
*
* @param id
* @return
*/
public User getUserById(String id);
/**
* 不配置驼峰模式
* @param
* @return
*/
/**
* 返回map
*
* @param id
* @return
*/
public Map<String, Object> getUserMap(String id);
/**
* 添加方法
*
* @param user
* @return
*/
int save(User user);
/**
* 修改方法
*
* @param user
* @return
*/
int update(User user);
/**
* 删除
*
* @param user
* @return
*/
int delete(User user);
}
数据层UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.2//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<!-- 增加 -->
<insert id="save">
INSERT INTO user_t(
id,
user_name
) VALUES (
#{id},
#{userName}
)
</insert>
<!-- 删除 -->
<delete id="delete">
delete from user_t WHERE id =#{id}
</delete>
<!--修改-->
<update id="update">
update user_t SET user_name=#{userName} WHERE id=#{id}
</update>
<!-- 查询 -->
<select id="getUserById" resultType="com.example.demo.model.User">
select id,user_name from user_t where id = #{id}
</select>
<!-- map封装 -->
<resultMap id="UserResultMap" type="map">
<id property="id" column="id" />
<result property="userName" column="user_name" />
</resultMap>
<select id="getUserMap" resultMap="UserResultMap">
select id,user_name from user_t where id = #{id}
</select>
</mapper>
实体类User
package com.example.demo.model;
import lombok.Data;
/**
* Created by 李庆伟 on 2018/7/24.
*/
@Data
public class User {
private String id;
private String userName;
}
数据库表user_t
到此Demo也完成了
每天进步一点点。。。。。