jdk1.8
idea 2017.2.6
springboot 2.x
项目搭建省略,直接上代码:
项目结构:
application.properties配置
server.port=8086
#加载Mybatis配置文件
#注意:一定要对应mapper映射xml文件的所在路径
mybatis.mapper-locations = classpath:mapper/*Mapper.xml
mybatis.type-aliases-package= com.java.mbt.mapper
#数据源必填项
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = mysql
#选填
# Number of ms to wait before throwing an exception if no connection is available.
spring.datasource.tomcat.max-wait=10000
# Maximum number of active connections that can be allocated from this pool at the same time.
spring.datasource.tomcat.max-active=50
# Validate the connection before borrowing it from the pool.
spring.datasource.tomcat.test-on-borrow=true
pojo类
package com.java.mbt.modle;
import java.io.Serializable;
/**
* @authorseerhuitao 实体类用户描述
* @create2019/5/9
*/
public class User implements Serializable {
private Integer userId;
private String userName;
private String userAge;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userAge='" + userAge + '\'' +
'}';
}
}
UserMapper接口:
package com.java.mbt.mapper;
import com.java.mbt.modle.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
int addUser(User user);
int deleteUser(User user);
int updateUser(User user);
User getUserById(User user);
List<User> selectAllUser();
}
UserService接口:
package com.java.mbt.service;
import com.java.mbt.modle.User;
import java.util.List;
public interface UserService {
int addUser(User user);
int deleteUser(User user);
int updateUser(User user);
User getUserById(User user);
List<User> findAllUser();
}
UserServiceImpl类:
package com.java.mbt.service.impl;
import com.java.mbt.mapper.UserMapper;
import com.java.mbt.modle.User;
import com.java.mbt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpI implements UserService{
//@Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。
//@Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
@Autowired(required = false)
//这里不写(required = false)底下的userMapper会报错
private UserMapper userMapper;
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public int deleteUser(User user){
return userMapper.deleteUser(user);
}
@Override
public int updateUser(User user){
return userMapper.updateUser(user);
}
@Override
public User getUserById(User user){
return userMapper.getUserById(user);
}
@Override
public List<User> findAllUser() {
return userMapper.selectAllUser();
}
}
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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.java.mbt.mapper.UserMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!--user是表名称,u_name是数据库里面的表名称,uName是实体类里面的成员变量-->
<insert id="addUser" parameterType ="com.java.mbt.modle.User">
insert into tb_user(user_name,user_age)
values (#{userName},#{userAge})
</insert>
<delete id="deleteUser" parameterType ="com.java.mbt.modle.User">
delete from tb_user where user_id = #{userId}
</delete>
<update id="updateUser" parameterType ="com.java.mbt.modle.User">
update tb_user set user_name =#{userName},user_age = #{userAge} where user_id= #{userId}
</update>
<select id="getUserById" parameterType ="com.java.mbt.modle.User" resultType="com.java.mbt.modle.User">
select user_id userId,user_name userName,user_age userAge
from tb_user where user_id= #{userId}
</select>
<select id="selectAllUser" resultType="com.java.mbt.modle.User">
select user_id userId,user_name userName,user_age userAge
from tb_user
</select>
</mapper>
UUCotroller类:
package com.java.mbt.cotroller;
import com.java.mbt.modle.User;
import com.java.mbt.service.UserService;
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 org.springframework.web.bind.annotation.RestController;
//注意这里要是使用了RestCotroller,就不需要@ResponseBody,看起来还是RestCotroller比较方便
@RestController
//@ResponseBody
public class UUCotroller {
@Autowired(required = false)
private UserService userService;
//测试
@RequestMapping(value="/ff")
public String getTest(){
return "我是谁";
}
/*增加用户*/
// http://localhost:8080/user/addUser/?userName=Alex&userAge=20
@RequestMapping(value = "/addUser", produces = {"application/json;charset=UTF-8"})
// @ResponseBody
public int addUser(User user){
User u=new User();
u.setUserAge("14");
u.setUserName("恵涛");
// return userService.addUser(user);
return userService.addUser(u);
}
/*删除用户*/
// http://localhost:8086/user/deleteUser/?userId=2
@RequestMapping(value = "/deleteUser",produces = {"application/json;charset=UTF-8"})
// @ResponseBody
public int deleteUser(User user)
{
return userService.deleteUser(user);
}
/*修改用户*/
// http://localhost:8086/user/updateUser/?userId=3&userName=刘牧师&userAge=50
@RequestMapping(value = "/updateUser",produces = {"application/json;charset=UTF-8"})
// @ResponseBody
public int updateUser(User user){
return userService.updateUser(user);
}
/*根据UserId查找用户*/
// http://localhost:8086/user/getUserById/?userId=3
@RequestMapping(value = "/getUserById", produces = {"application/json;charset=UTF-8"})
// @ResponseBody
public User getUserById(User user){
return userService.getUserById(user);
}
/*查询所有用户*/
// http://localhost:8086/user/getAllUsers
@RequestMapping(value = "/getAllUsers", produces = {"application/json;charset=UTF-8"})
// @ResponseBody
public Object findAllUser(){
return userService.findAllUser();
}
}
application类:
package com.java.mbt;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.java.mbt.mapper")
public class MbtApplication {
public static void main(String[] args) {
SpringApplication.run(MbtApplication.class, args);
}
}
pow.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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.java</groupId>
<artifactId>mbt</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mbt</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
数据库:
接口演示:
注意一般会犯的错误是:namespace的命名一般是mapper的包名+对应Mapper.XML的名字,去掉xml。