什么是 MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
SpringBoot 中使用
使用 Maven
在你的pom.xml
中:
< dependency>
< groupId>org.mybatis.spring.boot< /groupId>
< artifactId>mybatis-spring-boot-starter< /artifactId>
< version>1.2.1-SNAPSHOT< /version>
< /dependency>
使用 Gradle
在你的 build.gradle
中:
dependencies {
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")
}
使用
目录结构
--src
--main
--java
--com.example
--dao
--UserDao.java
--entity
--User.java
--DemoApplication.java
--UserSex.java
--resources
--mapper
--UserMapper.xml
--application.properties
基于注解
使用MyBatis-Spring-Boot-Starter will:
- 将自动检测存在的数据源
- 将数据源输入然后创建注册一个
SqlSessionFactoryBean
实例 - 从
SqlSessionFactoryBean
中创建注册一个SqlSessionTemplate
实例 - 自动扫描你的
mappers
,将它们连接到SqlSessionTemplate
然后将它们注册到 Spring 的上下文
我们新建一个实体类User.java
,在这里我们使用 Lombok
(使用说明见这篇文章)来简化代码
@Data
public class User {
private Long id;
private String userName;
private String password;
private UserSex userSex;
private String nickName;
}
接着我们创建一张叫 user
的表
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
user_name VARCHAR(32) DEFAULT NULL COMMENT '用户名',
password VARCHAR(32) DEFAULT NULL COMMENT '密码',
user_sex VARCHAR(32) DEFAULT NULL ,
nick_name VARCHAR(32) DEFAULT NULL ,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
然后创建一个 Dao
文件UserDao.java
@Mapper
public interface UserDao {
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property = "userName", column = "user_name"),
@Result(property = "password", column = "password"),
@Result(property = "userSex", column = "user_sex", javaType = UserSex.class),
@Result(property = "nickName",column = "nick_name")
})
User findById(@Param("id") Long id);
@Insert("INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})")
void save(User user);
@Update("UPDATE user set user_name = #{userName}, nick_name = #{nickName} WHERE id = #{id}")
void update(User user);
@Delete("DELETE FROM user where id = #{id}")
void remove(Long id);
}
每个方法都对应的对应的 sql 语句,其中@Select
注解用于查询,@Result
注解将实体类属性跟数据库的字段一一对应,@Insert
注解用于插入数据,@Update
注解用于修改数据,@Delete
注解用于删除
接下来我们简单的测试下
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
UserDao userDao;
@Test
public void test(){
User one = new User();
one.setUserName("张三");
one.setPassword("123456");
one.setUserSex(UserSex.MAN);
userDao.save(one);
User two = new User();
two.setUserName("李四");
two.setPassword("123456");
two.setUserSex(UserSex. WOMAN);
userDao.save(two);
}
}
基于 XML 配置
在application.properties
配置文件中新增以下配置
mybatis.type-aliases-package= com.example.entity
mybatis.mapper-locations=classpath:mapper/*.xml
然后在resources
文件夹中创建mapper
文件夹,然后新建一个userMapper.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.example.dao.UserDao">
< resultMap id="userMap" type="com.example.entity.User">
< result column="id" property="id"/>
< result column="user_name" property="userName"/>
< result column="password" property="password"/>
< result column="user_sex" property="userSex" javaType="com.example.UserSex"/>
< result column="nick_name" property="nickName"/>
< /resultMap>
< insert id="save" parameterType="com.example.entity.User">
INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})
< /insert>
< delete id="remove" parameterType="java.lang.Long">
DELETE FROM user where id = #{id}
< /delete>
< update id="update" parameterType="com.example.entity.User">
UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE id = #{id}
< /update>
< select id="findById" parameterType="java.lang.Long" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
< /select>
< /mapper>
然后将UserDao.java
文件修改如下
public interface UserDao {
User findById(Long id);
void save(User user);
void update(User user);
void remove(Long id);
}
最后在SpringBoot的主程序上加上@MapperScan
的注解将 dao 文件跟 sql 语句对应起来
@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
总结
mybatis-spring-boot-starter
可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好

微信打赏

支付宝打赏
- 本文作者: 小小小maker_wei
- 本文链接: blog.makerwei.me/posts/33582…
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!