springboot 学习笔记(四)
(四)springboot整合mybatis
1、以mysql为例,在pom文件中添加如下依赖,依次为mybatis、jdbc、db pool依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
2、在application.properties 文件中进行配置,springboot2.0会自动匹配jdbc连接,也可以通过spring.datasource.driver-class-name =com.mysql.jdbc.Driver 进行设置
#数据库url
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
#用户名、密码
spring.datasource.username =root
spring.datasource.password =root
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource),配置为阿里数据源
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#输出log到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3、设置好之后,我们在数据库中创建一个user表
CREATE TABLE `user` (
`id` int(15) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) DEFAULT NULL COMMENT '用户姓名',
`phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
`createTime` datetime DEFAULT NULL COMMENT '创建时间',
`age` int(4) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
4、写一个domain对象用于dao层操作user表
package com.zc.mybatis.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class User {
private int id;
private String name;
private String phone;
private int age;
//设置日期格式
@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8")
private Date createTime;
......省略get、set方法
5、创建接口类,用注解方式操作数据库
/**
*
*/
package com.zc.mybatis.mapper; import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import com.zc.mybatis.domain.User; public interface UserMapper { //添加用户
@Insert("INSERT INTO user(name,phone,createTime,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id") //主键自增,生成的值将注入对象中
void insertUser(User user) throws Exception;
//查询用户
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
//查询所有用户
List<User> getUsers();
//更新用户
@Update("UPDATE user SET name=#{name},phone=#{phone},createTime=#{createTime},age=#{age} WHERE id =#{id}")
void updateUser(User user);
//删除用户
@Delete("DELETE FROM user where id = #{id}")
void deleteUserById(int id);
}
6、创建对应的servce层,对应增删改查对应写出方法就可以了,我这里只写接口实现,其中需要注意的是,userMapper需要通过IOC注入进行使用
@Autowired
private UserMapper userMapper;
//增
@Override
public int add(User user) {
try {
userMapper.insertUser(user);
} catch (Exception e) {
e.printStackTrace();
}
int id = user.getId();
return id;
} //查询
@Override
public User getUserById(int id) { User user = userMapper.getUserById(id);
return user;
}
//查询所有
@Override
public List<User> getUsers() {
List<User> users = userMapper.getUsers();
return users;
} //删除
@Override
public void deleteUserById(Long id) {
userMapper.deleteUserById(id); }
//改
@Override
public void updateUser(User user) { userMapper.updateUser(user); }
7、写对应controller,然后返回json格式,就可以从页面查看了,通过localhost:8080/user/add新增数据到数据库,然后访问localhost:8080/user/getUsers
@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private UserService userService; @GetMapping("add")
public int add() {
User user = new User();
user.setAge(12);
user.setName("张三");
user.setPhone("888888888");
user.setCreateTime(new Date());
int id = userService.add(user);
return id;
} @GetMapping("getUserById")
public User getUser(int id) {
User user = userService.getUserById(id);
System.out.println(user.getCreateTime().toString());
return user;
} @GetMapping("getUsers")
public List<User> getUsers() {
List<User> users = userService.getUsers();
User user = null;
for (int i = 0; i < users.size(); i++) {
user = users.get(i);
System.out.println("用户id:" + user.getId() + "姓名" + user.getName());
}
return users; } @GetMapping("deleteUserById")
public void deleteUserById(Long id) {
User user = null; int userId = Integer.parseInt(id.toString()); user = userService.getUserById(userId); userService.deleteUserById(id);
System.out.println("删除用户的用户名为:" + user.getName()); }
@GetMapping("addAcount")
public void addAcount() {
int id = userService.addAcount(); } }
springboot 学习笔记(四)的更多相关文章
- SpringBoot学习笔记四之后台登录页面的实现
注:图片如果损坏,点击文章链接: https://www.toutiao.com/i6803542216150090252/ 继续之前完成的内容,首先创建一个常量类 常量类的内容 服务器端渲染 前后端 ...
- SpringBoot学习笔记(2):引入Spring Security
SpringBoot学习笔记(2):用Spring Security来保护你的应用 快速开始 本指南将引导您完成使用受Spring Security保护的资源创建简单Web应用程序的过程. 参考资料: ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- SpringBoot学习笔记
SpringBoot个人感觉比SpringMVC还要好用的一个框架,很多注解配置可以非常灵活的在代码中运用起来: springBoot学习笔记: .一.aop: 新建一个类HttpAspect,类上添 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Springboot学习笔记(六)-配置化注入
前言 前面写过一个Springboot学习笔记(一)-线程池的简化及使用,发现有个缺陷,打个比方,我这个线程池写在一个公用服务中,各项参数都定死了,现在有两个服务要调用它,一个服务的线程数通常很多,而 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
随机推荐
- SSDB VS redis
现在有不少团队开始使用了一个新型高效的 NoSQL数据库 - SSDB,如 京东.唱吧 …… SSDB 官网的定义 一个高性能的支持丰富数据结构的 NoSQL 数据库,用于替代 Redis 官网 ht ...
- centos7安装与配置ansible
此次测试总共有三台机,分别如下: ansible服务器:10.0.0.20 client01:10.0.0.21 client02:10.0.0.22 一.安装ansible 1. python版本需 ...
- Servlet编程实例 续3
----------------siwuxie095 Servlet 跳转之请求的转发 修改 LoginServlet.java: package com.siwuxie095.servlet; im ...
- 12、IGV-Integrative Genomics Viewer
1.IGV的网址:http://software.broadinstitute.org/software/igv/(java环境) 常见的几种输入格式bam/sam(比对文件) TDF(bam的精简 ...
- 《精通Spring4.X企业应用开发实战》读后感第六章(内部工作机制、BeanDefinition、InstantiationStrategy、BeanWrapper)
- Struts2学习第三课 访问Web资源
1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...
- Dapper 存储过程、事务等
接上一篇<Dapper 增删改查> 0.存储过程 create proc p_login ), ), ) output as begin if(exists(select * from U ...
- 前端编码规范 -- html篇
文档类型 推荐使用 HTML5 的文档类型申明: <!DOCTYPE html> (建议使用 text/html 格式的 HTML.避免使用 XHTML.XHTML 以及它的属性,比如 a ...
- cogs 2620. [HEOI2012]朋友圈
/*70分 被卡T*/ #include<iostream> #include<cstdio> #include<cstring> using namespace ...
- CF616D Longest k-Good Segment
题目描述 给定一个包含\(n\)个整数的序列\(a\),\(0\le a_i \le 10^6\),询问不重复数字个数\(\le k\)的最长区间的左右端点.如果有多解输出任意一组. 输入输出格式 输 ...