SpringBoot入门系列(三)——集成Mybatis

本章节是SpringBoot非常重要的部分,我会用一个比较简单的实例来说明springboot是如何集成mybatis的。废话少说,开撸!

一、
pom.xml中添加坐标:无论如何,Mybatis也不可能完全集成在web启动器里面,数据库驱动也不可能直接加进去,毕竟是不同的公司做的。此处使用的数据库连接池是阿里的druid,版本为1.0.9

<!-- mybatis启动器坐标 -->
<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.1.1</version>
</dependency>
<!-- mysql的数据库驱动 -->
<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 数据库连接池 -->
<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.0.9</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

二、配置文件
无论SpringBoot有多智能,它都不可能知道你数据库的密码(否则就是黑客了啊亲!),所以,我们还是要手动配置一下数据库的密码,以及数据库驱动,配置文件如下:

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.mayunbaba.pojo

三、代码部分
1、设计数据库
为了避免中文乱码什么的,统一使用utf8字符集

create table users(
    id int(10) not null primary key auto_increment,
     name varchar(10) not null,
    age int(5) not null
     )engine innodb charset utf8;

2、创建对应的实体类
由于只是个简单项目,没有引入jpa和数据校验,就是个简单的bean,主键为id,改成Integer也行

import org.springframework.stereotype.Component;
@Component
public class Users {
        private int id;
        private String name;
        private int age;
        public int getId() {
                return id;
        }
        public void setId(int id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public Users(int id, String name, int age) {
                super();
                this.id = id;
                this.name = name;
                this.age = age;
        }
        public Users() {
                super();
                // TODO Auto-generated constructor stub
        }   
}

3、编写mapper
这里偷了个懒,实在不想弄jpa,就直接注解写了sql,反正本例够用了

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.mayunbaba.pojo.Users;

@Mapper
public interface UsersMapper {
	@Insert("insert users value(#{id},#{name},#{age})")
	void insertUser(Users user);
}

4、编写业务层接口
没啥好说的,接口而已


import com.mayunbaba.pojo.Users;

public interface UsersService {
	void addUsers(Users users);
}

5、编写业务层实现
这里要注意,涉及到增/删/改操作,一定要加@Tansactional注解,表示将方法托管于spring事务管理,一旦操作失败,数据库自动回滚

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mayunbaba.mapper.UsersMapper;
import com.mayunbaba.pojo.Users;

@Service
//@Transactional表示该类下所有方法都受事务控制
@Transactional
public class UsersServiceImpl implements UsersService{
	@Autowired
	private UsersMapper usersMapper;
	
	@Override
	public void addUsers(Users users) {
		usersMapper.insertUser(users);
	}

}

6、编写Controller/servlet
不多介绍,和MVC差别不大

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.mayunbaba.pojo.Users;
import com.mayunbaba.service.UsersService;

@Controller
public class UsersController {
	
	@Autowired
	private UsersService usersService;
	
	@RequestMapping("/input")
	public String jump() {
		return "index";
	}
	
	@RequestMapping("/addUsers")
	public String getUsers(int id,String name,int age) {
		Users user=new Users(id, name, age);
		usersService.addUsers(user);
		return "config";
	}
}

7、前端设计
也谈不上设计,就是俩只有业务逻辑的页面······
a.index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/addUsers" method="Post">
		<table border="1px">
			<tr>
				<th>id</th>
				<th>name</th>
				<th>age</th>
			</tr>
			<tr>
				<td>用户id</td>
				<td><input type="text" name="id"/></td>
			</tr>
			<tr>
				<td>用户name</td>
				<td><input type="text" name="name"/></td>
			</tr>
			<tr>
				<td>用户age</td>
				<td><input type="text" name="age"/></td>
			</tr>
			<tr>
				<button type="submit" value="确认"></button>
			</tr>
		</table>

	</form>
</body>
</html>
				

b.config.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>操作结果</title>
</head>
<body>
	操作成功!
</body>
</html>

8、细节把控:
a.避免中文乱码:

  • 统一使用utf8
  • 保证数据库(不仅仅是这一张表)也是utf8
  • 如果依旧乱码,相信这篇文章可以帮助你:一位大佬总结的乱码解决方案
    b.对于一些强迫症而言,删除某条记录后主键不连续非常难受,这里提供解决方案:
SET @i=0;
UPDATE `users` SET `id`=(@i:=@i+1);
ALTER TABLE `users` AUTO_INCREMENT=0

本期教学到此结束,希望可以帮助到刚入门的各位!
下一期将开始讲述单元测试、数据校验、JPA等内容,欢迎观看~

欢迎联系工作QQ账号:3352336739

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值