Springboot-Mybatis-注解方式+xml方式
1 pom.xml要点
以下代码为注解方式的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>springboot</groupId>
<artifactId>springboot-mybatis-annotation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-mybatis-annotation</name>
<description>Springboot-mybatis</description>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
</properties>
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
xml形式的不同代码部分如下:
<groupId>springboot</groupId>
<artifactId>springboot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis</name>
2 application.properties
## 数据源配置
# 下面这句话格式很重要,serverTimezone一定要有,如果使用com.mysql.cj.jdbc.Driver的话
# 还要加上useSSL=true保证安全
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3 实体Entity
以城市类为例,里面包括
- id
- 省份proviceId
- 城市名称cityName
- 描述destription
4个属性,可以使用右键[generator]自动生成set、get、toString()方法
代码如下,【set、get、toString()方法】没有添加进来
/**
* 城市编号
*/
private Long id;
/**
* 省份编号
*/
private Long provinceId;
/**
* 城市名称
*/
private String cityName;
/**
* 描述
*/
private String description;
4 DAO/Mapper层
该层主要实现数据库接口函数,目前仅以select为例,功能是通过cityName实现城市信息的查找显示
4.1 注解方式(annotation)
该方式不需要xml文件,直接在java代码中进行操作,不复杂的操作下使用方便
@Mapper // 标志为 Mybatis 的 Mapper
public interface CityDao {
/**
* 根据城市名称,查询城市信息
*
* @param cityName 城市名
*/
@Select("SELECT * FROM city")
// 返回 Map 结果集
@Results({
@Result(property = "id", column = "id"),
@Result(property = "provinceId", column = "province_id"),
@Result(property = "cityName", column = "city_name"),
@Result(property = "description", column = "description"),
})
City findByName(@Param("cityName") String cityName);
}
4.2 xml方式
- 建立DAO层接口类
代码如下:
**
* 这里不加@Mapper的话,Application那里一定要加@MapperScan("org.spring.springboot.dao")
*/
public interface CityDao {
/**
* 1-增
*/
/**
* 根据城市名称,查询城市信息
*
* @param cityName 城市名
*/
City findByName(@Param("cityName") String cityName);
}
- resources文件夹下建立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="org.spring.springboot.dao.CityDao">
<resultMap id="BaseResultMap" type="org.spring.springboot.domain.City">
<result column="id" property="id" />
<result column="province_id" property="provinceId" />
<result column="city_name" property="cityName" />
<result column="description" property="description" />
</resultMap>
<sql id="Base_Column_List">
id, province_id, city_name, description
</sql>
<select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">
select
<include refid="Base_Column_List" />
from city
where city_name = #{cityName}
</select>
</mapper>
5 service层
5.1 建立service接口
代码如下:
/**
* 城市业务逻辑接口类
*/
public interface CityService {
/**
* 根据城市名称,查询城市信息
* @param cityName
*/
City findCityByName(String cityName);
}
5.2 建立impl文件夹,里面放具体实现类Impl
代码如下:
@Service
public class CityServiceImpl implements CityService {
@Autowired
private CityDao cityDao;
public City findCityByName(String cityName) {
return cityDao.findByName(cityName);
}
}
6 Controller层
代码如下:
@RestController
public class CityRestController {
@Autowired
private CityService cityService;
//http://localhost:8080/api/city?cityName=封灵岛
@RequestMapping(value = "/api/city", method = RequestMethod.GET)
public City findOneCity(@RequestParam(value = "cityName", required = true) String cityName) {
return cityService.findCityByName(cityName);
}
}
7 测试
7.1 cmd打开数据库
代码如下:
net stop mysql
mysql -u root -p
//接下来会让你输入密码,输入后显示Welcome to the MySQL monitor即可成功
7.2 打开Navicat软件
- 新建连接
- 设置端口号跟properties对应,localhost:3306
- 在下面新建数据库,名称为city,跟程序DAO层的sql语句对应,也可以直接导入.sql文件,本次导入代码如下
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号',
`province_id` int(10) unsigned NOT NULL COMMENT '省份编号',
`city_name` varchar(25) DEFAULT NULL COMMENT '城市名称',
`description` varchar(25) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
- 在数据库中添加数据,可以采用导入sql语句的形式,也可以手动添加,本次的数据如下:
INSERT INTO `city` VALUES (1, 1, '封灵岛', '大雪原');
7.3 运行java程序
7.4 打开网页
//http://localhost:8080/api/city?cityName=封灵岛