一、准备工作
1、添加依赖
在pom.xml文件中,添加mybatis-spring-boot-starter依赖和mySql连接的依赖
<!--MySQL数据库驱动,无需参与编译-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
<scope>runtime</scope>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
2、在数据库中添加如下表
# Dump of table role
# ------------------------------------------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `role` WRITE;
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
INSERT INTO `role` (`id`, `name`)
VALUES
(1,'超级管理员'),
(2,'一般用户');
/*!40000 ALTER TABLE `role` ENABLE KEYS */;
UNLOCK TABLES;
3、配置数据库的用户名密码信息
在resources的application.yml文件中添加如下节点
spring:
datasource:
username: root
password:
url: jdbc:mysql://localhost:3306/student_manage?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
二、建立相关类
1、添加实体类
新建一个domain的包,然后在此包中新增一个Role的类
public class Role {
/**
* 主健ID (无默认值)
*/
private Integer id;
/**
* 角色名称(必填项) (默认值为: )
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2、添加dao层
新建一个dao的包,然后在此包下新建一个RoleMapper的类
/**
* @Mapper 如果没有在SpringbootLearingApplication添加@MapperScan 注解的话,这里都需要一个这样的注解
*/
public interface RoleMapper {
/**
* 查询所有的角色
*
* @return
*/
List<Role> queryAll();
/**
* 查询单个
*
* @param id
* @return
*/
Role selectOne(Integer id);
/**
* 新增
*
* @param role
* @return
*/
int add(Role role);
/**
* 修改
*
* @param role
* @return
*/
int update(Role role);
/**
* 删除
*
* @param id
* @return
*/
int delete(Integer id);
}
3、添加service层
新建一个service的包,然后在此包下新建一个RoleService的类,其中的@SuppressWarnings(“SpringJavaAutowireingInspection”) 注解是为了不让IDEA标红,可有可无
@Service
public class RoleService {
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
private RoleMapper roleMapper;
/**
* 查询所有的角色
*
* @return
*/
public List<Role> queryAll() {
return this.roleMapper.queryAll();
}
/**
* 查询单个
*
* @param id
* @return
*/
public Role selectOne(Integer id) {
return this.roleMapper.selectOne(id);
}
/**
* 新增
*
* @param role
* @return
*/
public int add(Role role) {
return this.roleMapper.add(role);
}
/**
* 修改
*
* @param role
* @return
*/
public int update(Role role) {
return this.roleMapper.update(role);
}
/**
* 删除
*
* @param id
* @return
*/
public int delete(Integer id) {
return this.roleMapper.delete(id);
}
}
4、添加控制器
在controller包下新建一个RoleController的类,其他代码省略
@RestController
@RequestMapping("/api/role")
public class RoleController {
@Autowired
private RoleService roleService;
@RequestMapping("/list")
public List<Role> queryAll() {
return this.roleService.queryAll();
}
}
5、配置全局Mapper包扫描
在SpringbootLearningApplication文件的头部添加如下注解:
/**
* 这个注解是给指定包下的类自动添加@Mapper,省的com.xiaozhao.dao下的每个mapper类都得添加一个@Mapper注解了
*
* @author xiaozhao
*/
@SpringBootApplication
@MapperScan("com.xiaozhao.dao")
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
三、配置MyBaits
1.使用xml
1.1 在resources文件夹下新建一个mybatis文件,然后新建一个核心配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer"/>
<typeAlias alias="Long" type="java.lang.Long"/>
<typeAlias alias="HashMap" type="java.util.HashMap"/>
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/>
<typeAlias alias="ArrayList" type="java.util.ArrayList"/>
<typeAlias alias="LinkedList" type="java.util.LinkedList"/>
</typeAliases>
</configuration>
1.2然后在resources>mybatis 下再次新建一个mapper文件夹, 在这个mapper文件夹下新建一个RoleMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xiaozhao.dao.RoleMapper">
<resultMap id="BaseResultMap" type="com.xiaozhao.domain.Role">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id, name
</sql>
<!--查询全部-->
<select id="queryAll" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM role
</select>
<!--查询单个-->
<select id="selectOne" parameterType="Integer" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM role
WHERE id=#{id}
</select>
<!--增加-->
<insert id="add" parameterType="com.xiaozhao.domain.Role">
INSERT INTO role(name) VALUES (#{name})
</insert>
<!--修改-->
<update id="update" parameterType="com.xiaozhao.domain.Role">
UPDATE role set name=#{name} WHERE id=#{id}
</update>
<!--删除-->
<delete id="delete" parameterType="Integer">
DELETE FROM role WHERE id=#{id}
</delete>
</mapper>
1.3 把配置信息告诉spring
在application.yml文件中添加入下节点
# 配置mybatis
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
type-aliases-package: com.xiaozhao.domain
把最后测试运行,在浏览器中输入:http://localhost:8080/api/role/list ,得到如下结果:
image.png2、使用注解的形式
使用注解跟xml的区别主要体现在dao层,就是把sql语句以注解的形式写到代码中。然后修改下application.yml文件中的mybatis配置即可。
2.1修改后的RoleMapper.java
package com.xiaozhao.dao;
import com.xiaozhao.domain.Role;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import java.util.List;
/**
* @author xiaozhao
* @date 2018/9/29上午10:40
* <p>
* 使用注解的形式
*/
/**
* @Mapper 如果没有在SpringbootLearingApplication添加@MapperScan 注解的话,这里都需要一个这样的注解
*/
public interface RoleMapper {
/**
* 查询所有的角色
*
* @return
*/
@Select("SELECT id, name FROM role")
@Results({
@Result(property = "id", column = "id", jdbcType = JdbcType.INTEGER),
@Result(property = "name", column = "name", jdbcType = JdbcType.VARCHAR)
})
List<Role> queryAll();
/**
* 查询单个
*
* @param id
* @return
*/
@Select("SELECT id, name FROM role WHERE id=#{id}")
@Results({
@Result(property = "id", column = "id", jdbcType = JdbcType.INTEGER),
@Result(property = "name", column = "name", jdbcType = JdbcType.VARCHAR)
})
Role selectOne(Integer id);
/**
* 新增
*
* @param role
* @return
*/
@Insert(" INSERT INTO role(name) VALUES (#{name})")
int add(Role role);
/**
* 修改
*
* @param role
* @return
*/
@Update(" UPDATE role set name=#{name} WHERE id=#{id}")
int update(Role role);
/**
* 删除
*
* @param id
* @return
*/
@Delete(" DELETE FROM role WHERE id=#{id}")
int delete(Integer id);
}
2.2修改后的application.yml
spring:
# 数据库连接
datasource:
url: jdbc:mysql://127.0.0.1:3306/student_manage?useUnicode=true&characterEncoding=UTF-8
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: com.xiaozhao.domain
打印sql语句
使用logback来进行打印,可以参考文章:logback
在resources文件夹下新建一个logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 控制台输出 -->
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- Console 输出设置 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--用来设置某一个包或者具体的某一个类的日志打印级别-->
<!--打印MyBatis的sql语句-->
<logger name="com.xiaozhao.dao" level="DEBUG"></logger>
<!-- 日志输出级别,生产环境下需要移除控制台输出 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
注意其中的包名要是项目中mapper所在的包名,设置为DEBUG级别,然后就可以打印sql了。
完整代码
https://github.com/xiaozhaowen/spring-boot-in-action/tree/master/springboot-mybatis
网友评论