玩转Spring Boot框架教程08之整合MyBatis注解方式
五、SpringBoot数据访问
SpringBoot整合MyBatis注解方式
1、环境搭建:
MySQL驱动jar包
MyBatis相关jar包
Druid连接池jar包
修改pom文件
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
创建数据库及表
Sql语句
CREATE DATABASE springboot01;
USE springboot01
CREATE TABLE`user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(11) DEFAULT NULL,
`sex` INT(11) DEFAULT NULL,
`address` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO USER(NAME,age,sex,address)VALUES('张三',18,0,'北京');
INSERT INTO USER(NAME,age,sex,address)VALUES('李四',28,1,'上海');
目录结构:
2、代码编写
加入druid连接池配置
spring:
#配置连接池druid
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url:jdbc:mysql://127.0.0.1:3306/springboot01?useUnicode=true&characterEncoding=utf8
username: root
password: 1234
initialSize: 1
minIdle: 3
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
编写控制器、业务逻辑层、数据持久层代码
dao:
@Mapper
publicinterface UserDao {
@Insert("insert into user(name, age, sex, address)values(#{user.name},#{user.age},#{user.sex},#{user.address})")
int add(@Param(value="user") User user);
@Update("update user set name = #{user.name}, address =#{user.address} where id = #{user.id}")
int update(@Param(value="user") User user);
@Delete("delete from user where id = #{id}")
int delete(intid);
@Select("select id,name,age,sex,address from user where id =#{id}")
UserfindUser(@Param("id") intid);
@Select("select id,name,age,sex,address from user")
List<User>findUserList();
}
Service:
@Service
publicclass UserServiceImpl implementsUserService{
@Autowired
private UserDao userDao;
@Override
public List<User> findUserList() {
returnuserDao.findUserList();
}
@Override
public User findUser(intid) {
returnuserDao.findUser(id);
}
@Override
publicint update(User user) {
returnuserDao.update(user);
}
@Override
publicint delete(intid) {
returnuserDao.delete(id);
}
@Override
publicint add(User u) {
returnuserDao.add(u);
}
}
Controller:
@RestController
@RequestMapping("/user")
publicclass UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public List<User> getUsers() {
returnuserService.findUserList();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getUserById(@PathVariable("id") intid) {
returnuserService.findUser(id);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String updateUser(@PathVariable("id") Integer id,
@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "sex", required = true) Integer sex,
@RequestParam(value = "age", required = true) Integer age,
@RequestParam(value = "address", required = true) String address
) {
User user = new User();
user.setId(id);
user.setName(name);
user.setSex(sex);
user.setAddress(address);
intflag = userService.update(user);
if(flag == 1) {
return"success";
}else {
return"fail";
}
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable(value = "id")intid) {
intflag = userService.delete(id);
if(flag == 1) {
return"success";
}else {
return"fail";
}
}
@RequestMapping(value = "", method = RequestMethod.POST)
public String postUser(User user) {
System.out.println("user的值:"+user);
intflag = userService.add(user);
if(flag ==1) {
return"success";
}else {
return"fail";
}
}
}
SpringMvc注解:
@RestController:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用;
@PathVariable:
@RequestMapping(value ="/{id}"中的{id}是个占位符,访问路径localhost:8080/user/110
想要获取110这个通过@PathVariable(value = "id")int id)即可;
@RequestParam:
@RequestParam是从request里面拿取值,@RequestParam(value ="name", required = true) String name;
支持下面四种参数
defaultValue如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
name 绑定本次参数的名称,要跟URL上面的一样
required 这个参数是不是必须的
value 跟name一样的作用,是name属性的一个别名
MyBatis注解:
@Mapper
1、添加了@Mapper注解之后这个接口在编译时会生成相应的实现类,需要注意的是这个接口中不可以定义同名的方法,因为会生成相同的id,也就是说这个接口是不支持重载的;
2、也是为了纳入Spring容器管理
@Insert
插入语句
@Update
更新语句
@Delete
删除语句
@Select
查询语句
@Param
接收参数绑定
@MapperScan注解:
@MapperScan(com.itcodeschool.dao)表示将扫描dao包下的所有类,可以替代每一个类上编写@Mapper注解。
3、运行测试:
测试工具Postman
增加:
查询:
查询所有:
修改: