前几天因为一同事让练习使用springcloud结合mybatis来写一个demo,于是慢慢的花了一天的时间一点点的整理下来,最后感觉达到自己预想的结果,不过感觉这方面还是需要多看书,多看资料总结。
我用的是ecplise+maven开发,
首先,创建一个父工程,在在创建三个子工程,其中common-api主要存放实体类,common-provider提供服务,common-consumer作为消费者。
工程目录:
common-provider
common-consumer
common-api
父工程的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.csq.study</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>common-api</module>
<module>common-consumer</module>
<module>common-provider</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.csq.study</groupId>
<artifactId>common-api</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>common</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encode>${project.build.sourceEncoding}</encode>
</configuration>
</plugin>
</plugins>
</build>
</project>
common-provider的pom.xml如下:
<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>com.csq.study</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>common-provider</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.csq.study</groupId>
<artifactId>common-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
common-consumer的pom.xml如下:
<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>com.csq.study</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>common-consumer</artifactId>
<dependencies>
<dependency>
<groupId>com.csq.study</groupId>
<artifactId>common-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
common-api中主要就放实体类:
package com.csq.study;
import java.io.Serializable;
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
int id;
String name;
int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
sql脚本:
DROP DATABASE IF EXISTS "user" ;
CREATE TABLE `user` (
`id` INT(11) DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`age` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', '张三', '22'), ('2', '李四', '23'),('3', '王五', '22'), ('4', '赵六', '23');
common-prodiver的controller代码:
package com.csq.study.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.csq.study.Result;
import com.csq.study.User;
import com.csq.study.service.UserService;
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public User findById(@PathVariable(value="id")int id) {
return userService.findById(id);
}
@RequestMapping(value="/user",method=RequestMethod.GET)
public List<User>findAll(User user) {
return userService.findAll(user);
}
@RequestMapping(value="/user",method=RequestMethod.POST)
public Boolean update(@RequestBody User user) {
return userService.update(user);
}
@RequestMapping(value="/user",method=RequestMethod.PUT)
public Boolean save(@RequestBody User user) {
return userService.save(user);
}
@RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public Boolean delete(@PathVariable(value="id")int id) {
return userService.delete(id);
}
}
service层:
package com.csq.study.service;
import java.util.List;
import com.csq.study.Result;
import com.csq.study.User;
public interface UserService {
public User findById(int id);
public List<User>findAll(User user);
public Boolean update(User user);
public Boolean save(User user);
public Boolean delete(int id);
}
serviceImpl:
package com.csq.study.serviceImpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.csq.study.Result;
import com.csq.study.User;
import com.csq.study.dao.UserDao;
import com.csq.study.service.UserService;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
public User findById(int id) {
// TODO Auto-generated method stub
return userDao.findById(id);
}
public List<User> findAll(User user) {
// TODO Auto-generated method stub
return userDao.findAll(user);
}
public Boolean update(User user) {
// TODO Auto-generated method stub
return userDao.update(user);
}
public Boolean save(User user) {
// TODO Auto-generated method stub
return userDao.save(user);
}
public Boolean delete(int id) {
// TODO Auto-generated method stub
return userDao.delete(id);
}
}
dao层:
package com.csq.study.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.csq.study.User;
@Mapper
public interface UserDao {
public User findById(int id);
public List<User>findAll(User user);
public Boolean update(User user);
public Boolean save(User user);
public Boolean delete(int id);
}
快速启动类:
package com.csq.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApplicationTest {
public static void main(String[] args) {
SpringApplication.run(ApplicationTest.class, args);
}
}
application文件:
server:
port: 8002
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml
type-aliases-package: com.csq.study
mapper-locations:
- classpath:mybatis/mapper/**/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/ssm_web?useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: root
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
mapper.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.csq.study.dao.UserDao">
<select id="findById" resultType="User" parameterType="int">
SELECT * FROM user
<where>
id = #{id}
</where>
</select>
<select id="findAll" resultType="User">
SELECT id,name,age FROM user ;
</select>
<update id="update" parameterType="User">
update user
<trim prefix="set" suffixOverrides=",">
<if test="name!=null">name=#{name},</if>
<if test="age!=null">age=#{age},</if>
</trim>
WHERE id=#{id}
</update>
<delete id="delete" parameterType="User">
delete from user where id=#{id};
</delete>
<insert id="save" parameterType="User">
INSERT INTO user(id,name,age)
VALUES (#{id},#{name},#{age}) ;
</insert>
</mapper>
mybatis.cfg.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>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
启动快速启动类,通过postman 访问url获取到json数据 :
1.查询所有
2.根据id查询:
3.更新数据:
查询数据库 发现更新成功
4.保存数据:
查询数据库发现保存成功
5.删除数据:
查询数据库 发现已经删除成功了
为止 ,搭建完成,
下一篇在介绍如何用消费者来消费
有不合理之处,还望提出,一定学习改正。谢谢。
当时搭建出现的错误,
出现的报错:1.Description:
Cannot determine embedded database driver class for database type NONE
Action:
If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active)
原因:配置文件不对,导致的加载不到数据源,解决办法查看配置文件路径
2.异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
原因:我们的启动类和controller必须保持包含关系。就像下面截图这样
希望我的错误,可以帮助大家少走点弯路,如果对你有帮助,记得给个暖暖的赞,贴代码也不容易
转载请注明出处: https://blog.csdn.net/FindHuni/article/details/83421478