SpringBoot 使用Mybatis入门
来源:互联网 发布:自学云计算 编辑:程序博客网 时间:2024/05/17 06:29
在SpringBoot中访问数据库有多种方式,一般我们可以使用jdbctemplate、Mybatis、JPA。本文总结使用Mybatis的方式
准备工作
建立数据库
建立表users
CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(45) NOT NULL DEFAULT '', `password` varchar(45) NOT NULL DEFAULT '', `role` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;
建立Package
我们建立一个mybatis包用于存放和mybatis相关的内容
下面再建立两个包,一个是entity存放实体类,另一个是mapper,存放操作的接口
建立实体类
在entity下建立UserEntity实体类
import java.io.Serializable;public class UserEntity implements Serializable { private static final long serialVersionUID = -1L; private int userid; private String userName; private String password; private int role; public void setUserid(int userid) { this.userid = userid; } public void setUserName(String userName) { this.userName = userName; } public void setPassword(String password) { this.password = password; } public void setRole(int role) { this.role = role; } public int getUserid() { return userid; } public String getUserName() { return userName; } public String getPassword() { return password; } public int getRole() { return role; }}
建立测试接口
同其它测试一样,我们为Mybatis的测试建立一个测试接口MybatisController
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/mybatis")public class MybatisController { @Autowired private UserService userService; @GetMapping("") public String index() { return ""; }}
目前接口内处理函数是空的,随着下面的实验,逐渐会填写实验代码
建立其它类
还需要建立Service类和Service的接口类
public interface UserService {}
@Servicepublic class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper;}
加入依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency>
写配置
在application.properties中添加如下配置
#数据库相关配置spring.datasource.url=jdbc:mysql://localhost:3306/world?autoReconnect=true&failOverReadOnly=false&useSSL=falsespring.datasource.username=rootspring.datasource.password=Pass@word1spring.datasource.driver-class-name=com.mysql.jdbc.Driver
加入扫描
Mybatis的操作是依靠写在mapper包中的各个mapper实现的,我们需要要springboot加载这些mapper,加载这些mapper有两种方式
1、在每个mapper类上面加上注解@Mapper
2、在启动类上加上注解@MapperScan(“com.gl.springbootapi.mybatis.mapper”)
我们这里采用第二种方式
实现操作
在mapper包下建立User的接口UserMapper
public interface UserMapper {}
Insert
实现一个操作需要修改四个文件分别添加的内容如下
1、UserMapper接口添加的内容
@Insert("INSERT INTO users(user_name,password,role) VALUES(#{userName}, #{password}, #{role})") int insert(UserEntity userEntity);
2、UserService接口添加的内容
int insert(UserEntity userEntity);
3、UserServiceImpl类添加的内容
@Override public int insert(UserEntity userEntity) { return userMapper.insert(userEntity); }
4、MybatisController类添加的内容
@GetMapping("/insert") public String insert() { UserEntity userEntity = new UserEntity(); userEntity.setPassword("password"); userEntity.setRole(1); userEntity.setUserName("name"); int result= userService.insert(userEntity); return String.valueOf(result); }
5、结果
通过测试可以看出返回了1,这个是影响的行数,另外到数据库中也可以看出来新插入了一条数据
每个操作都需要修改这几个文件,但是核心修改内容在UserMapper中,为了简单起见下面的内容只贴出UserMapper的实现
Delete
@Delete("DELETE FROM users WHERE user_id =#{userid}") int delete(int userid);
Update
@Update("UPDATE users SET user_name=#{userName},password=#{password},role=#{role} WHERE user_id =#{userid}") int update(UserEntity userEntity);
Select One
@Select("SELECT * FROM users WHERE user_id = #{userid}") @Results({ @Result(property = "userid", column = "user_id"), @Result(property = "userName", column = "user_name"), }) UserEntity getOne(int userid);
@Result指定实体类字段与数据库字段不一致的映射,如果一致则不用写
Select List
@Select("SELECT * FROM users") @Results({ @Result(property = "userid", column = "user_id"), @Result(property = "userName", column = "user_name"), }) List<UserEntity> getAll();
Insert获取自增ID
@Insert("INSERT INTO users(user_name,password,role) VALUES(#{userName}, #{password}, #{role})") @Options(useGeneratedKeys = true, keyProperty = "userid", keyColumn = "user_id") int insertAuto(UserEntity userEntity);
标记了@Options后,自增的user_id会被赋值到userid字段,执行完成之后可以在属性中取出来,返回值仍然是影响的行数
事务
1、将UserMapper接口添加注解@Transactional
@Transactionalpublic interface UserMapper {......}
2、在UserService层中调用UserMapper方法,然后触发回滚,在数据库中检查数据是否回滚
@Transactional(rollbackFor = {IllegalArgumentException.class}) @Override public void testTransactional() { UserEntity userEntity = new UserEntity(); userEntity.setPassword("password"); userEntity.setRole(1); userEntity.setUserName("name"); int result= userMapper.insert(userEntity); throw new IllegalArgumentException("数据将回滚"); }
PageHelper分页插件
//TODO
- SpringBoot 使用Mybatis入门
- springboot+mybatis入门
- springboot+mybatis整合(入门)
- springboot入门之mybatis
- springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用
- SpringBoot-使用Mybatis
- SpringBoot入门之整合mybatis
- dubbo+springboot+mybatis入门案例
- SpringBoot入门-快速整合Mybatis
- springboot笔记(2)springboot-Mybatis使用
- SpringBoot 使用jackjson入门
- springboot 使用mybatis (xml Mapper)
- SpringBoot入门系列:第六篇 mybatis
- SpringBoot入门系列:第六篇 mybatis
- springboot入门(二)初步集成mybatis
- SpringBoot入门系列: mybatis(六)
- springboot+mybatis的简单的入门例子
- SpringBoot入门系列:第六篇 mybatis
- VS2013配置64位ZBar、OpenCV
- 1005. 继续(3n+1)猜想 (25)--PAT乙级
- 限定符const
- 线程--同步与死锁
- nodejs顶层路由设计
- SpringBoot 使用Mybatis入门
- 关于Gensim的初次见面 和 Doc2vec 的模型训练
- $ionicActionSheet安卓样式问题
- LightOJ-1013-Love Calculator [LCS][DP]
- viewpager+fragmentadapter实现微信界面
- 最常用的15大Eclipse开发快捷键技巧-常用Eclipse插件在线安装地址
- Socket编程
- 微信浏览器实现自动下载功能
- 利用 Linux crontab 定时执行 PHP