mybatis已经是一个很流行的框架了,这里就不在详细介绍什么是mybatis了,本文主要介绍基于xml方式和注解方式实现基本业务。
快速上手
项目结构:
- pom.xml 添加
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<!-- mysql数据库连接依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- application.yml的配置
#配置开发环境
spring:
profiles:
active: dev
- application-dev.yml集成mybatis配置
#日志级别设置
logging:
level:
ROOT: INFO
com.app.repository.*: debug # 打印SQL
#配置mybatis
mybatis:
type-aliases-package: com.devin.domain #别名
mapper-locations: classpath:mapper/*.xml #mapper映射文件
configuration.map-underscore-to-camel-case: true #该配置就是将带有下划线的表字段映射为驼峰格式的实体类属性
#数据库连接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
#如果是最新版本的mysql,需要指定时区
url: jdbc:mysql://192.168.0.223:3306/warehouse?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
username: root
password: Mytest
application.yml 解 释
通过spring.profiles.active: 可以配置多套开发环境。
因为现在一个项目有好多环境,开发环境,测试环境,准生产环境,生产环境,每个环境的参数不同,所以我们就可以把每个环境的参数配置到yml文件中,这样在想用哪个环境的时候只需要在主配置文件中将用的配置文件写上就行如application.yml
在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:
application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境
至于哪个具体的配置文件会被加载,需要在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
- 表结构:
CREATE TABLE `coin_user` (
`id` int(11) NOT NULL,
`login_name` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`password` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`email` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`mobile` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- 启动类中添加@MapperScan注解扫描该包下的所有mapper接口,当然也可以在每个mapper类上面加@Mapper注解,但这样子比较繁琐。
@SpringBootApplication
@MapperScan("com.devin.repository")
public class WarehouseApplication {
public static void main(String[] args) {
SpringApplication.run(WarehouseApplication.class, args);
}
}
或者:
在config包下添加一个MyBatisConfig配置类
/**
* MyBatis配置类
* @ClassName MyBatisConfig
* @Author 药岩
* @Date 2020/1/29
* Version 1.0
*/
@Configuration
//开启事物
@EnableTransactionManagement
@MapperScan(value = "com.devin.repository")
public class MyBatisConfig {
}
- 创建实体类CoinUser
public class CoinUser {
private Long id;
private String loginName;
private String password;
private String email;
private String mobile;
get、set方法...
}
- controller 控制层创建UserController
/**
* @ClassName UserController
* @Author 药岩
* @Date 2020/1/29
* Version 1.0
*/
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 根据id查询用户信息(xml版)
* @author 药岩
* @date 2020/1/29
* @param * @param id
* @return com.devin.domain.CoinUser
*/
@RequestMapping(value = "/findById/{id}")
public CoinUser getUser(@PathVariable("id") int id){
return userService.getUser(id);
}
/**
* 查询使用用户的信息(注解版)
* @author 药岩
* @date 2020/1/29
* @param * @param
* @return java.util.List<com.devin.domain.CoinUser>
*/
@RequestMapping(value = "/getAll")
public List<CoinUser> getAll(){
return userService.getAll();
}
}
- service 业务层创建UserService
注意:此处没有编写service接口,实际项目开发中不可这样子写。
/**
* @ClassName UserService
* @Author 药岩
* @Date 2020/1/29
* Version 1.0
*/
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public CoinUser getUser(int id){
return userRepository.getUser(id);
}
public List<CoinUser> getAll(){
return userRepository.getAll();
}
}
- repository 持久层创建UserRepository
/**
*
* @author 药岩
* @date 2020/1/29
* @param * @param null
* @return
*/
public interface UserRepository {
CoinUser getUser(int id);
}
注意:这里是基于xml版本
10. 在resources包下创建mapper包,再创建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="com.devin.repository.UserRepository">
<select id="getUser" resultType="coinUser">
select * from coin_user
</select>
</mapper>
访问 http://localhost:8080/user/findById/1
效果图:
这里返回的JSON以树形进行展示是因为我这边安装了谷歌插件JSON-handle
注意:这里是注解版
11. 在UserRepository 中添加getAll()方法
/**
*
* @author 药岩
* @date 2020/1/29
* @param * @param null
* @return
*/
public interface UserRepository {
CoinUser getUser(int id);
@Select("select * from coin_user")
List<CoinUser> getAll();
@Insert("insert into coin_user(id, login_name, password, email, mobile) values(#{id}, #{loginName}, #{password}, #{email}, #{mobile})")
void insertUser(CoinUser coinUser);
@Delete("delete from coin_user where id = #{id}")
void deleteUser(int id);
@Update("update coin_user set email = #{email}, mobile = #{mobile} where id = #{id}")
void updateUser(CoinUser coinUser);
}
浏览器访问:http://localhost:8080/user/getAll
效果图: