从零构建springboot项目三:集成mybatis

1、创建表

CREATE TABLE `t_mem_member` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `login_name` varchar(64) NOT NULL COMMENT '登录账号',
  `login_pwd` varchar(64) NOT NULL DEFAULT '' COMMENT '登录密码',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

2、添加jar依赖 pom.xml

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<scope>provided</scope>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>

【题外话】

lombok

官网 https://www.projectlombok.org/

注解说明 https://projectlombok.org/features/all

3、添加数据库配置

示例中使用的是mysql数据库

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/laonongmin?useSSL=false&useUnicode=true&characterEncoding=utf-8
    username: xxxx
    password: xxxx
    
mybatis:
  type-aliases-package: com.johnny.*.model

4、添加实体类

package com.johnny.laonongmin.model.account;

import java.util.Date;
import com.johnny.laonongmin.model.BaseModel;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Member extends BaseModel {

	private static final long serialVersionUID = -3791892312743992410L;

	private Long id;
	/**登录账号*/
	private String loginName;
	/**登录密码*/
	private String loginPwd;
	/**创建时间*/
	private Date createTime;

}

5、添加mapper包扫描

在启动类中添加对mapper包扫描@MapperScan。

package com.johnny.laonongmin;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.johnny")
@MapperScan("com.johnny.laonongmin.mapper")
public class LaonongminWebApplication {
	public static void main(String[] args) {
		SpringApplication.run(LaonongminWebApplication.class, args);
	}
}

【题外话】

关于@MapperScan
http://www.mybatis.org/spring/apidocs/reference/org/mybatis/spring/annotation/MapperScan.html

6、编写mapper接口【注解的形式】

package com.johnny.laonongmin.mapper.account;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.mapping.StatementType;

import com.johnny.laonongmin.model.account.Member;

public interface MemberMapper {

	@Select("SELECT * FROM t_mem_member")
	@Results({ @Result(property = "id", column = "id"), 
			@Result(property = "loginName", column = "login_name"),
			@Result(property = "loginPwd", column = "login_pwd"),
			@Result(property = "createTime", column = "create_time") })
	List<Member> getAll();

	@Select("SELECT * FROM t_mem_member where login_name=#{loginName} and login_pwd=#{loginPwd}")
	@Results({ @Result(property = "id", column = "id"), 
			@Result(property = "loginName", column = "login_name"),
			@Result(property = "loginPwd", column = "login_pwd"),
			@Result(property = "createTime", column = "create_time") })
	Member getMember(String loginName,String loginPwd);
	
	@Insert("INSERT INTO t_mem_member(login_name,login_pwd) VALUES(#{loginName}, #{loginPwd})")
	@SelectKey(statement="SELECT @@IDENTITY", keyProperty="id", before=false, resultType=Long.class,statementType=StatementType.STATEMENT)
    int insert(Member member);

}

【题外话】

mybatis 注解说明 http://www.mybatis.org/mybatis-3/zh/java-api.html

8、manager

package com.johnny.laonongmin.manager.account.impl;

import java.util.List;

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

import com.johnny.laonongmin.manager.account.MemberManager;
import com.johnny.laonongmin.mapper.account.MemberMapper;
import com.johnny.laonongmin.model.account.Member;

@Service
@Transactional
public class MemberManagerImpl implements MemberManager {

	@Autowired
	private MemberMapper memberMapper;

	@Override
	@Transactional(readOnly = true)
	public Member getMember(String loginName, String loginPwd) {
		return memberMapper.getMember(loginName, loginPwd);
	}

	@Override
	@Transactional(readOnly = true)
	public List<Member> getAllMember() {
		return memberMapper.getAll();
	}

	@Override
	public int saveMember(Member member) {
		return memberMapper.insert(member);
	}

}

9、编写controller

@Autowired
private MemberManager memberManager;

@RequestMapping("member/list")
public String memberList(Model model) {
	List<Member> members = memberManager.getAllMember();
	if (LOGGER.isDebugEnabled()) {
		LOGGER.debug("members size:{}", members == null ? 0 : members.size());
	}
	model.addAttribute("memberList", members);
	return "account/member_list";
}

10、页面展现

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<title>member list</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<h1>memberList</h1>
	<hr />
	<table>
		<tr>
			<th>ID</th>
			<th>账号</th>
			<th>密码</th>
		</tr>
		<tr  th:each="mem,iterStat : ${memberList}">
			<td th:attr="mid=${mem.id}" th:text="${mem.id}"></td>
		 	<td th:text="${mem.loginName}" ></td>
		 	<td th:text="${mem.loginName}"></td>
		</tr>
	</table>
</body>
</html>

 11、执行结果

从零构建springboot项目三:集成mybatis